Posts: 309
Threads: 15
Joined: Jul 2003
You have it. You just aren't understanding his terminology. Click the code button, paste your code, and click the code button again. The error tags he mentioned were "code" and "/code" in square brackets. Clicking Code does it for you.
hrist Jesus came into the world to save sinners, of whom I am first.(I Timothy 1:15)
For God so loved the world, that He gave His only begotten Son,
that whoever believes in Him should not perish, but have eternal life.(John 3:16)
Posts: 13
Threads: 1
Joined: Oct 2003
Thanks SCM.
To recap on previous post I am using a 486DX proc with Dos.6.22 and Win For Work 3.11. The following is part of a prog in QB.4.5 which when compiled runs ok in Dos but I haven't been able to work out how to get output at Com.2 when running in WFW.3.11 (everything else performs well in WFW).
The purpose of the prog is to send cw (Morse code) using keyboard input raising a -10v dc voltage to +10v dc across a couple of pins at Com.2. The cw is also heard at the pc speaker (Sound command).
The prog is mostly my work, some of the algorithms are "borrowed" from a similar project. The prog has not been tested on any other OS.
If anyone manages to get it running then pressing ESC will (should) return to the OS. I hope someone can solve my query. So here's the code:
Code: ' Prog P01BETA1 send cw P1B.bat
DECLARE SUB HELPFILE () ' Display HelpFile
DECLARE SUB FRAME1 () ' Frame for first page of Help File..
DECLARE SUB FRAME2 () ' Frame for second page of Help File..
DECLARE SUB CHAR.TO.BUFFER () ' Writes individual chars to buffer & prints..
DECLARE SUB BACK.SPACE () ' Back space chars..
DECLARE SUB STRING.TO.BUFFER () ' Writes strings to buffer & prints..
DECLARE SUB CLEAR.SIDE (side%) ' Clear LH (SIDE%=1) or RH screen (SIDE%=2)..
DECLARE SUB PAUSE () ' Toggle PAUSE ON/OFF..
DECLARE SUB setup () ' Sets initial parameters..
DECLARE SUB ENTER.CHAR () ' Chars for buffer..
DECLARE SUB EXTRACT.CHAR () ' Gets char from buffer..
DECLARE SUB PRINT.SENT () ' Overprints sent char..
DECLARE SUB SEND.CHAR () ' Sends char..
DECLARE SUB RESETS () ' Resets parameters after alteration..
DECLARE SUB DIGI.ON () ' Digital output on..
DECLARE SUB DIGI.OFF () ' Digital output off..
DECLARE SUB OTHER.CALL () ' Get other callsign..
COMMON SHARED PAUSE.FLAG ' Pause flag
COMMON SHARED CR ' Characters remaining in buffer
COMMON SHARED SPEED, wdsp, FREQ, DOT, DOT.START.TIME, ps, cs, pz, cz
COMMON SHARED chs, LMAX, OFFBITS, ONBITS, HIS.CALL$, CALLSIGN$
COMMON SHARED AUDIO.ON.OFF
COMMON SHARED SENDFLAG, LINEIN, iin, NEWIN
COMMON SHARED OUTPORT, MY.CALL$
COMMON SHARED STRING.ENTRY, CHAR.SPACE, RECS
COMMON SHARED a$, B$, C$, D$, E$, F$, G$, H$, I$, J$, K$, NBR, X, xx, z$, XXX
' Array to hold CW sending codes
DIM SHARED C$(96)
FOR I = 0 TO 95: C$(I) = "": NEXT ' SET ARRAY VALUES TO ""
FOR I = 33 TO 43: READ C$(I): NEXT ' READ DATA FOR ASCII 41-43
FOR I = 44 TO 64: READ C$(I): NEXT ' READ DATA FOR ASCII 44-64
FOR I = 65 TO 90: READ C$(I): NEXT ' READ DATA FOR ASCII 65-90
READ C$(95)
C$(13) = " ": C$(32) = " " ' SET ARRAY ASCII 13 & 32 TO " "
' Array to hold buffer entries
DIM SHARED I$(512)
FOR z = 0 TO 511: I$(z) = "": NEXT ' Set all buffer entries to ""
CLS
' keyboard definitions
KEY 15, CHR$(0) + CHR$(1) ' Define ESC key
KEY 18, CHR$(128) + CHR$(72) ' Define uparrow
KEY 19, CHR$(128) + CHR$(80) ' Define downarrow
KEY 20, CHR$(128) + CHR$(77) ' Define rightarrow
KEY 21, CHR$(128) + CHR$(75) ' Define leftarrow
FOR AA = 1 TO 10: KEY(AA) ON: NEXT ' Turns F.1 thru F.10 on
KEY(15) ON ' " ESC on
FOR AA = 18 TO 21: KEY(AA) ON: NEXT ' " Arrow keys on
KEY(30) ON ' " F.11 on
KEY(31) ON ' " F.12 on
ON KEY(1) GOSUB PRESS.F1 ' Clear LH screen
ON KEY(2) GOSUB PRESS.F2 ' Clear screen/reset all
ON KEY(3) GOSUB PRESS.F3 ' Toggles PAUSE on/off
ON KEY(4) GOSUB PRESS.F4 ' F.4 unused
ON KEY(5) GOSUB PRESS.F5 ' F.5 unused
ON KEY(6) GOSUB PRESS.F6 ' F.6 unused
ON KEY(7) GOSUB PRESS.F7 ' Toggles audio on/off
ON KEY(8) GOSUB PRESS.F8 ' Set STRING.ENTRY=0 to allow strings to be entered into buffer
ON KEY(9) GOSUB PRESS.F9 ' Enter other callsign
ON KEY(10) GOSUB PRESS.F10 ' Send callsign exchange (if HIS.CALL$ > "")
ON KEY(15) GOSUB PRESS.ESC ' Return to O/S
ON KEY(18) GOSUB PRESS.UP.ARROW ' Increase speed
ON KEY(19) GOSUB PRESS.DN.ARROW ' Decrease speed
ON KEY(20) GOSUB PRESS.R.ARROW ' Increase char spacing
ON KEY(21) GOSUB PRESS.L.ARROW ' Decrease char spacing
ON KEY(30) GOSUB PRESS.F11 ' F.11 unused
ON KEY(31) GOSUB PRESS.F12 ' Help file
CALL setup ' Set initial parameter
DO
DO
CALL ENTER.CHAR ' Put char into buffer..
IF CR = 0 THEN EXIT DO ' If buffer empty then loop..
CALL EXTRACT.CHAR ' Get a char from buffer
IF a$ = "" THEN EXIT DO ' Loop if buffer empty (CR=0)
SEND.CHAR ' Send char
LOOP ' Loop to put next char into buffer
LOOP
' ****************** GOSUBS FROM SOFTKEYS & DEFINED KEYS ********************
PRESS.F1: ' (Clears LH screen.)
IF CR > 0 THEN RETURN
CALL CLEAR.SIDE(1): CALL RESETS: OUT (inport - 1), 1
cz = 4: pz = 1: LOCATE 4, 1
RETURN
PRESS.F2: ' (Clears total screen - restarts program.)
CLS : CR = 0: OUT OUTPORT, 0: RUN
PRESS.F3: ' (Toggles sending on/off.)
CALL PAUSE: RETURN
PRESS.F4: ' (Enter call/search files.)
RETURN
PRESS.F5:
RETURN
PRESS.F6:
RETURN
PRESS.F7: ' (Toggles audio on/off.)
AUDIO.ON.OFF = AUDIO.ON.OFF XOR 1
IF AUDIO.ON.OFF = 1 THEN FREQ = 400 ELSE FREQ = 20000
RETURN
PRESS.F8: ' (Sets flag to permit string entry.)
STRING.ENTRY = 0: CALL ENTER.CHAR: RETURN
PRESS.F9: ' (Enter other call.)
IF CR > 0 THEN RETURN ELSE CALL OTHER.CALL: RETURN
PRESS.F10: ' (Send call exchange to buffer.)
IF HIS.CALL$ = "" THEN RETURN
z$ = " " + HIS.CALL$ + " DE " + MY.CALL$ + " "
CALL STRING.TO.BUFFER: RETURN
PRESS.F11:
RETURN
PRESS.F12:
IF CR > 0 THEN RETURN
KEY(31) OFF
HELPFILE
RETURN
PRESS.ESC: ' (Return to O.S.)
CLS : CALL DIGI.OFF: OUT 97, 76: END
PRESS.UP.ARROW: ' (Increase sending speed.)
SPEED = SPEED + 1: CALL RESETS: RETURN
PRESS.DN.ARROW: ' (Decrease sending speed.)
SPEED = SPEED - 1: CALL RESETS: RETURN
PRESS.R.ARROW: ' (Increase character gap.)
CHAR.SPACE = CHAR.SPACE + 2: CALL RESETS: RETURN
PRESS.L.ARROW: ' (Decrease character gap.)
CHAR.SPACE = CHAR.SPACE - 2
IF CHAR.SPACE < 2 THEN CHAR.SPACE = 2
CALL RESETS: RETURN
' **************************************************************************
' data for cw
' ! # ( )
DATA "11131","","31313","","","","","313313","31331"
' * + , - . /
DATA "111313","13131","331133","311113","131313","31131"
' 0 1 2 3 4 5 6 7
DATA "33333","13333","11333","11133","11113","11111","31111","33111"
' 8 9 : = ? @
DATA "33311","33331","333111","","","31113","","113311","13111"
' A B C D E F G H I J
DATA "13","3111","3131","311","1","1131","331","1111","11","1333"
' K L M N O P Q R S T
DATA "313","1311","33","31","333","1331","3313","131","111","3"
' U V W X Y Z
DATA "113","1113","133","3113","3133","3311"
' _
DATA "3111113"
SUB BACK.SPACE
' Process backspace
IF CR = 0 THEN EXIT SUB
IF LINEIN > 1 THEN
ps2 = POS(I): cs2 = CSRLIN: LOCATE cs2, ps2 - 1: PRINT " "
LOCATE cs2, ps2 - 1
iin = (iin - 1) AND 511: LINEIN = LINEIN - 1: CR = CR - 1
END IF
CALL ENTER.CHAR
END SUB
SUB CHAR.TO.BUFFER
' Write individual chars to buffer
I$(iin) = K$: iin = (iin + 1) AND 511: CR = CR + 1
cs2 = CSRLIN: ps2 = POS(I): LOCATE 24, 1: PRINT "BUFFER "; CR;
LOCATE cs2, ps2
IF ((LINEIN > LMAX) AND (K$ = " ")) THEN LINEIN = 0: NEWIN = 1: PRINT : GOTO noprint
IF (NEWIN = 0) THEN COLOR 15, 0
IF K$ = "!" THEN K$ = "VE " ELSE
IF K$ = "#" THEN K$ = "CT " ELSE
IF K$ = "@" THEN K$ = "AS "
PRINT K$;
noprint:
LINEIN = LINEIN + 1: NEWIN = 0
CALL ENTER.CHAR
END SUB
SUB CLEAR.SIDE (side%)
' Clear sides of screen CLEAR.SIDE(1)=LH side CLEAR.SIDE(2)=RH side
IF (side% = 1) THEN ' Clear LH screen
FOR CC = 4 TO 23
LOCATE CC, 1: PRINT SPACE$(39);
NEXT
EXIT SUB
END IF
FOR CC = 2 TO 23: LOCATE CC, 41 ' Clear RH screen
PRINT SPACE$(40);
NEXT
END SUB
SUB DIGI.OFF
' Set outport to send offbits
OUT OUTPORT, OFFBITS
END SUB
SUB DIGI.ON
' Set outport to send onbits
OUT OUTPORT, ONBITS
END SUB
SUB ENTER.CHAR
' Put characters into buffer
K$ = UCASE$(INKEY$)
IF CR > 505 OR K$ = "" THEN EXIT SUB
IF K$ = CHR$(8) THEN CALL BACK.SPACE: EXIT SUB
IF STRING.ENTRY = 0 THEN STRING.ENTRY = 1: CALL STRING.TO.BUFFER: EXIT SUB
IF K$ = "\" THEN z$ = MY.CALL$: CALL STRING.TO.BUFFER: EXIT SUB
IF K$ = "$" THEN
z$ = " CLUB INFO WAS HERE "
CALL STRING.TO.BUFFER
EXIT SUB
END IF
IF K$ = "|" THEN z$ = " ESE EE": CALL STRING.TO.BUFFER: EXIT SUB
IF K$ = "~" THEN z$ = " QRL? ": CALL STRING.TO.BUFFER: EXIT SUB
IF K$ = "[" OR K$ = "]" OR K$ = "{" OR K$ = "}" OR K$ = "`" THEN EXIT SUB
IF K$ = "`" OR K$ = "'" OR K$ = ";" OR K$ = ">" OR K$ = "<" THEN EXIT SUB
IF K$ = CHR$(&H22) THEN EXIT SUB
CALL CHAR.TO.BUFFER
END SUB
SUB EXTRACT.CHAR
' Get character from buffer
STATIC iout
IF PAUSE.FLAG = 1 OR CR = 0 THEN a$ = "": EXIT SUB
a$ = I$(iout): CR = CR - 1: iout = (iout + 1) AND 511
END SUB
SUB FRAME1
' Frame for page 1 of Help File
SCREEN 0
WIDTH "scrn:", 80
COLOR 14
LOCATE 2, 13
PRINT CHR$(218); STRING$(6, 196); CHR$(194); STRING$(50, 196); CHR$(191)
LOCATE , 13: PRINT CHR$(179); " KEY. "; CHR$(179); " PURPOSE...."; : LOCATE , 71: PRINT CHR$(179)
LOCATE , 13: PRINT CHR$(195); STRING$(6, 196); CHR$(197); STRING$(50, 196); CHR$(180)
XXX = 5
DO
LOCATE XXX, 13
PRINT CHR$(179)
LOCATE XXX, 20
PRINT CHR$(179)
LOCATE XXX, 71
PRINT CHR$(179)
XXX = XXX + 1
LOOP UNTIL XXX = 18
LOCATE 18, 13
PRINT CHR$(192); STRING$(6, 196); CHR$(193); STRING$(50, 196); CHR$(217)
END SUB
SUB FRAME2
' Frame for 2nd page of Help File
COLOR 14
LOCATE 1, XXX - 2
PRINT CHR$(218); STRING$(3, 196); CHR$(194); STRING$(14, 196);
PRINT CHR$(194); STRING$(32, 196); CHR$(191)
PRINT TAB(XXX - 2); CHR$(179); "KEY"; CHR$(179); " DESCR. "; CHR$(179);
PRINT " PURPOSE..."; TAB(67); CHR$(179)
PRINT TAB(XXX - 2); CHR$(195); STRING$(3, 196); CHR$(197); STRING$(14, 196);
PRINT CHR$(197); STRING$(32, 196); CHR$(180)
FOR xxxxxx = 1 TO 16
LOCATE , XXX - 2: PRINT CHR$(179); : LOCATE , XXX + 2: PRINT CHR$(179);
LOCATE , XXX + 17: PRINT CHR$(179); : LOCATE , XXX + 50: PRINT CHR$(179)
NEXT
PRINT TAB(XXX - 2); CHR$(192); STRING$(3, 196); CHR$(193); STRING$(14, 196);
PRINT CHR$(193); STRING$(32, 196); CHR$(217)
END SUB
SUB HELPFILE
' Display the HelpFile
SPEEDSAVE = SPEED
CLS : COLOR 2
LOCATE 5, 15
PRINT "ESC CLEAR SCREEN - RETURN TO O.S"
PRINT TAB(15); "F.1 CLEAR LH SIDE OF SCREEN - SEE ***"
PRINT TAB(15); "F.2 CLEAR SCREEN - RESTART PROG."
PRINT TAB(15); "F.3 TOGGLE SENDING ON/OFF"
PRINT TAB(15); "F.4 UNUSED."
PRINT TAB(15); "F.5 UNUSED."
PRINT TAB(15); "F.6 UNUSED."
PRINT TAB(15); "F.7 TOGGLE AUDIO ON/OFF"
PRINT TAB(15); "F.8 RELEASE LOCKED KEYS - SEE **"
PRINT TAB(15); "F.9 ENTER OTHER CALL - SEE ***"
PRINT TAB(15); "F10 SEND 1x1 CALL EXCHANGE (IF OTHER.CALL > BLANK)"
PRINT TAB(15); "F11 UNUSED"
PRINT TAB(15); "F12 DISPLAY THIS HELP FILE - SEE ***"
LOCATE 19, 15
PRINT "** F.8 unlocks key { } [ ] ' and "; CHR$(34); " which are 'locked'"
LOCATE , 23: PRINT "to prevent unwanted entries to the buffer."
PRINT TAB(14); "*** Only if buffer empty (CR=0)."
FRAME1
LOCATE 23, 19: COLOR 3
PRINT "CONTINUED NEXT PAGE - ENTER ANY KEY TO CONTINUE.": COLOR 15
SLEEP
CLS
COLOR 2
XXX = 17: YYY = 25: zzz = 40
LOCATE 4, XXX: PRINT "~"; TAB(YYY); "TILDE"; TAB(zzz); "Send QRL?"; TAB(63); "**"
PRINT TAB(XXX); "!"; TAB(YYY - 1); "EXCLAIM"; TAB(zzz); "Send (bar) EEEN"; TAB(63); "**"
PRINT TAB(XXX); "@"; TAB(YYY + 1); "AT"; TAB(zzz); "Send (bar) AS"; TAB(63); "**"
PRINT TAB(XXX); "#"; TAB(YYY - 1); "NUMBER"; TAB(zzz); "Send (bar) CT"; TAB(63); "**"
PRINT TAB(XXX); "$"; TAB(YYY - 1); "DOLLAR"; TAB(zzz); "Send Club identities"; TAB(63); "**"
PRINT TAB(XXX); "*"; TAB(YYY); "STAR"; TAB(zzz); "Send (bar) VA"; TAB(63); "**"
PRINT TAB(XXX); ")"; TAB(YYY - 3); "CLOSE BKT."; TAB(zzz); "Send (bar) KN"; TAB(63); "**"
PRINT TAB(XXX); "+"; TAB(YYY); "PLUS"; TAB(zzz); "Send (bar) AR"; TAB(63); "**"
PRINT TAB(XXX); "{"; TAB(YYY - 4); "L.WINGED BKT."; TAB(zzz); "Send 3x3 CQ CALL"; TAB(62); "***"
PRINT TAB(XXX); "}"; TAB(YYY - 4); "R.WINGED BKT."; TAB(zzz); "Send 2x2 CQ CALL"; TAB(62); "***"
PRINT TAB(XXX); CHR$(34); TAB(YYY - 4); "DOUBLE QUOTE"; TAB(zzz); "Send QTH + NAME"; TAB(62); "***"
PRINT TAB(XXX); "["; TAB(YYY - 4); "L.SQUARE BKT."; TAB(zzz); "Send 3x3 FISTS CALL ****"
PRINT TAB(XXX); "]"; TAB(YYY - 4); "R.SQUARE BKT."; TAB(zzz); "Send 2x2 FISTS CALL ****"
PRINT TAB(XXX); "'"; TAB(YYY - 4); "SINGLE QUOTE"; TAB(zzz); "Send NAME + QTH ****"
PRINT TAB(XXX); "\"; TAB(YYY - 3); "BACK-SLASH"; TAB(zzz); "Send OWN CALLSIGN"
PRINT TAB(XXX); "="; TAB(YYY - 1); "EQUALS"; TAB(zzz); "Send (bar) BT"
PRINT
PRINT TAB(XXX - 6); " ** Press SHIFT + KEY *** F8 must have been pressed"
PRINT TAB(XXX - 6); "**** F8 must have been pressed (followed by SHIFT + KEY)"
FRAME2
LOCATE 24, 19: COLOR 3
PRINT "CONTINUED NEXT PAGE - ENTER ANY KEY TO CONTINUE."; : COLOR 15
SLEEP
CLS
COLOR 2
LOCATE 4, XXX: PRINT CHR$(24); TAB(YYY); "UP ARROW"; TAB(zzz); "Increase sending speed"
PRINT TAB(XXX); CHR$(25); TAB(YYY); "DN ARROW"; TAB(zzz); "Decrease sending speed"
PRINT TAB(XXX); CHR$(26); TAB(YYY); "R.ARROW"; TAB(zzz); "Increase char gap"
PRINT TAB(XXX); CHR$(27); TAB(YYY); "L.ARROW"; TAB(zzz); "Decrease char gap"
PRINT TAB(zzz - 2); "(Extended keyboard arrow"; ""
PRINT TAB(zzz + 4); "keys - NOT keypad)"
FRAME2
LOCATE 24, 15: COLOR 3
PRINT "END OF HELP FILE - PRESS ANY KEY TO RETURN TO PROGRAM.";
SLEEP
DEF SEG = &H40 ' Sets circular
OF.SET = &H1E ' kbrd buffer to zeros
FOR NBR = 0 TO 31 ' .
POKE OF.SET + NBR, 0 ' .
NEXT
CLS
CALL setup: SPEED = SPEEDSAVE: RESETS
KEY(31) ON
END SUB
SUB OTHER.CALL
' Get other stations call and enter into header line
cs = CSRLIN: ps = POS(I)
LOCATE 2, 11: PRINT SPACE$(19);
LOCATE 2, 11: COLOR 30, 0: PRINT "Oth call? ";
COLOR 15, 0: INPUT "", HIS.CALL$:
HIS.CALL$ = UCASE$(HIS.CALL$)
LOCATE 2, 11: PRINT SPACE$(19);
LOCATE 2, 11: PRINT "Oth call: "; HIS.CALL$;
LOCATE cs, ps
END SUB
SUB PAUSE
' Toggle PAUSE condition ON/OFF
PAUSE.FLAG = PAUSE.FLAG XOR 1
kc = CSRLIN: pc = POS(I)
LOCATE 2, 7
IF PAUSE.FLAG = 1 THEN
COLOR 15, 0: PRINT "ON ";
ELSE COLOR 30, 0: PRINT "OFF";
END IF
COLOR 15, 0
LOCATE kc, pc
END SUB
SUB PRINT.SENT
' Print the sent character
STATIC lineout, newout
ps = POS(I): cs = CSRLIN
LOCATE 24, 1: PRINT "BUFFER "; CR; " CHARS CHAR SPACE="; CHAR.SPACE;
COLOR 0, 11: LOCATE cz, pz
IF ((lineout > LMAX) AND (a$ = " ")) THEN
PRINT : lineout = 0: newout = 1
END IF
IF a$ = "!" THEN a$ = "VE " ELSE
IF a$ = "#" THEN a$ = "CT " ELSE
IF a$ = "@" THEN a$ = "AS " ELSE
IF newout = 0 THEN PRINT a$;
COLOR 7, 0: lineout = lineout + 1: newout = 0
cz = CSRLIN: pz = POS(I)
LOCATE cs, ps
END SUB
SUB RESETS
' Reset the speed and print
DEF SEG = &H40
POKE &H17, PEEK(&H17) AND &HBF ' Set CapsLock OFF
DEF SEG
COLOR 10, 14
OUT OUTPORT, 0 ' : IF FREQ < 100 THEN FREQ = 100
DOT = DOT.START.TIME * 12 / SPEED
chs = CHAR.SPACE * DOT: wdsp = 4 * DOT: PS1 = POS(I): CS1 = CSRLIN
COLOR 15, 0: LOCATE 2, 31: PRINT "Speed:"; SPEED;
LOCATE 2, 1: PRINT "PAUSE:"; : COLOR 30, 0: LOCATE 2, 7: IF PAUSE.FLAG = 0 THEN PRINT "OFF"; : COLOR 15, 0
COLOR 15, 0: IF PAUSE.FLAG = 1 THEN LOCATE 2, 7: PRINT "ON ";
LOCATE 1, 1: PRINT STRING$(80, 45);
LOCATE 3, 1: PRINT STRING$(40, 45);
LOCATE 24, 1: PRINT "BUFFER "; CR; " CHARS CHAR SPACE="; CHAR.SPACE;
LOCATE 2, 11: PRINT "Oth call: "; HIS.CALL$;
FOR CC = 2 TO 24: LOCATE CC, 40: PRINT "³"; : NEXT
LOCATE 24, 52: COLOR 14, 0: PRINT "FOR HELP PRESS F.12";
LOCATE CS1, PS1
COLOR 15, 0
END SUB
SUB SEND.CHAR
' Send characters
IF a$ = " " THEN SOUND 20000, wdsp * 1.5: CALL PRINT.SENT: EXIT SUB
IF a$ = "`" THEN SOUND 20000, wdsp * .5: CALL PRINT.SENT: EXIT SUB
IF a$ = "" THEN EXIT SUB
ij = ASC(a$): s$ = C$(ij)
FOR jj = 1 TO LEN(s$)
N = VAL(MID$(s$, jj, 1)): SOUND FREQ, N * DOT: CALL DIGI.OFF
SOUND 20000, DOT
CALL ENTER.CHAR
OUT OUTPORT, ONBITS
NEXT
SOUND 20000, chs + 1: OUT OUTPORT, 0
CALL PRINT.SENT
END SUB
SUB setup
' Initial setup of parameters
SPEED = 25 ' START-UP SPEED (WPM)
FREQ = 400 ' SET AUDIO FREQ
DOT.START.TIME = 1.77 ' SET DOT SPEED
STRING.ENTRY = 1 ' STRING ENTRY FLAG
PAUSE.FLAG = 1 ' SET PAUSE ON
CHAR.SPACE = 2 ' SET CHRSPACE START
CALL RESETS
ONBITS = 1 ' DIGI.ON BYTE
OFFBITS = 0 ' DIGI.OFF BYTE
OUTPORT = 764 ' OUTPUT PORT (COM2)
cz = 4: pz = 1 ' OUTPUT START POS'N
LMAX = 30 ' MAX LINE LGTH BEFORE WRAP CHECK
MY.CALL$ = "VALERIE " ' MY CALL
LOCATE 4, 1 ' PRINT START POS'N.
END SUB
SUB STRING.TO.BUFFER
' Read string Z$ into buffer & print Z$
IF K$ = "'" THEN z$ = " I LIVE HERE AND MY NAME IS VALERIE " ELSE
IF K$ = CHR$(34) THEN z$ = " MY NAME IS VALERIE AND I LIVE HERE " ELSE
IF K$ = "[" THEN z$ = " NO MEANING " ELSE
IF K$ = "]" THEN z$ = " NO MEANING " ELSE
IF K$ = "{" THEN z$ = " CQ CQ CQ DE " + MY.CALL$ + MY.CALL$ + MY.CALL$ + "DX PSE K" ELSE
IF K$ = "}" THEN z$ = " cq cq dx de " + MY.CALL$ + MY.CALL$ + "dx pse k " ELSE
IF K$ = "!" THEN z$ = " EEEN " ELSE
FOR M = 1 TO LEN(z$)
kk$ = UCASE$(MID$(z$, M, 1))
I$(iin) = kk$: iin = (iin + 1) AND 511: CR = CR + 1
ps2 = POS(I): cs2 = CSRLIN
LOCATE 24, 1: PRINT "BUFFER "; CR; " CHARS CHAR SPACE="; CHAR.SPACE;
LOCATE cs2, ps2
IF ((LINEIN > LMAX) AND (kk$ = " ")) THEN LINEIN = 0: NEWIN = 1: PRINT
IF NEWIN = 0 THEN PRINT kk$;
LINEIN = LINEIN + 1: NEWIN = 0
NEXT
END SUB
Thanks to all
V...
Posts: 4,307
Threads: 63
Joined: May 2003
Valerie I am so sorry to have confused you :oops: . I dunno how I typed error tags instead of code tags =(
Posts: 13
Threads: 1
Joined: Oct 2003
TBBQ thanks - I guess I'm easily confused.
Another query - if anyone has a look at my prog and can figure out why ESC will not work when CapsLock and/or NumLock is on I'd like to know. I'm not sure if it's a QB or Dos problem.
Thanks
V...
Posts: 4,307
Threads: 63
Joined: May 2003
Val, Firstly you are using ON KEY which is a function I havent used since I was little. Secondly, you are taking input from the std input device that is the keyboard using Inkey$ at the same time. Don't do that its 'messy'.
Try using scan codes instead. They are much better. For example if you want to trap the arrow keys, the ESC key and the Function Keys at the same time use this little proggie:
Code: CLS
DO
KeyPress$ = INKEY$
IF LEN(KeyPress$) = 2 THEN
ScanCode% = ASC(RIGHT$(KeyPress$, 1))
END IF
IF KeyPress$ = CHR$(27) THEN LOCATE 1, 1: PRINT "You hit the ESC key!": END
SELECT CASE ScanCode%
CASE 72
LOCATE 1, 1: PRINT "UP ARROW "
CASE 75
LOCATE 1, 1: PRINT "LEFT ARROW "
CASE 77
LOCATE 1, 1: PRINT "RIGHT ARROW "
CASE 80
LOCATE 1, 1: PRINT "DOWN ARROW "
CASE 59
LOCATE 1, 1: PRINT "F1 Key "
END SELECT
ScanCode% = 0
LOOP
Look up the Keyboard Scan codes in Qb's help(Contents > Quick Reference > Keyboard Scan Codes) for codes of F2, F3... 8)
P.S.: Most keys like the ESC key have Ascii codes, such keys need not be trapped using Scancodes. But the arrows and F1, F2... keys are trapped using Scan codes.
Posts: 13
Threads: 1
Joined: Oct 2003
Thanks TBBQ - I have tried Select Case but it throws up a few more problems so I have a bit more work to do with that.
Looks like no-one on this forum can help with my original Out problem so it's back to the "trial & error" type of coding.
Thanks again
V...
Posts: 780
Threads: 49
Joined: Dec 2001
Wow, more chick programmers!
I am impressed!
I'd help you with your problem, but I'm confused myself...
You posted a huge chunk of code there, sorry I dont have time to read it all. Do you know where the problems lie? If you could narrow it down it would be easier. Try debugging...
I do recall seeing a program along these lines somewhere...I shall attempt to look for it.
Posts: 6,419
Threads: 74
Joined: Mar 2002
Maybe Windows 3.11 is closing your ports. Try to peek in the configuration utilities. Maybe the network capabilities of Windows 3.11 for Workgroups interfere with raw port programming. Is it necessary to run the QB program from the win GUI?
Posts: 4,307
Threads: 63
Joined: May 2003
Quote:Thanks TBBQ - I have tried Select Case but it throws up a few more problems so I have a bit more work to do with that.
Looks like no-one on this forum can help with my original Out problem so it's back to the "trial & error" type of coding.
Thanks again
V...
Val, I cant find anything wrong with your code. The only way I am going to be able to 'debug' your prog is by getting Windows for Workgroups =). I dunno if I will be able to set it up on my comp since I already have 3 O/Ss. But still i'll try =P and why not search for old books on WFW I bet they will have some info about the security features in it.
BTW I had a question, how do I check whether its sending pulses over COM port ?
Posts: 13
Threads: 1
Joined: Oct 2003
TBBQ - again thanks. I don't think I can ask you to devote any more time to my little conundrum or to load WFW just for this purpose as you would probly also have to load a Dos. I shall plod on with sorting out the bugs since replacing On Key with Sel Case and may have to accept that my effort will only run in Dos.. FYI my prog outputs across pins 29 and 9 at the Com2 RS232. Again, many ,many thanks for your efforts.
V...
|