Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
out
#21
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)
Reply
#22
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...
Reply
#23
Valerie I am so sorry to have confused you :oops: . I dunno how I typed error tags instead of code tags =(
Reply
#24
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...
Reply
#25
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.
Reply
#26
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 Cry so it's back to the "trial & error" type of coding.

Thanks again

V...
Reply
#27
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.
·~¹'°¨°'¹i|¡~æthérFòx~¡|i¹'°¨°'¹~·-
avinash.vora - http://www.avinashv.net
Reply
#28
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?
SCUMM (the band) on Myspace!
ComputerEmuzone Games Studio
underBASIC, homegrown musicians
[img]http://www.ojodepez-fanzine.net/almacen/yoghourtslover.png[/i
Reply
#29
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 Cry 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 ?
Reply
#30
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... Big Grin
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)