0 'Morse Keyboard for Models 100, 102, and 200. 0 ' StopProgram CTRL_C 0 ' BackSpaceAll CTRL_U 0 ' BackSpaceOne BKSP 0 ' BackSpaceOne DEL 0 ' SpeedIncrease UpArrow 0 ' SpeedDecrease DownArrow 0 ' ClearScreen ESC 0 ' TextBuffer: 0 ' Transmit CTRL_T 0 ' View CTRL_V 0 ' Define CTRL_D 0 ' Erase CTRL_E 0 ' Reference PlusSign (followed by numeral) 0 IFL%=0THEN300 1 IFLEN(T$)=0THEN20 2 FORI%=1TOLEN(T$):POKER%,0:CALLR%+1,ASC(MID$(T$,I%,1)),0:V%=PEEK(R%):IFV%=0THENPRINT"*";:GOTO6 3 PRINTMID$(T$,I%,1);:IFC%(V%,1)=0THENFORJ%=1TO2*W%:CALLO%+1:NEXT:GOTO6 4 C%=C%(V%,0):FORN%=1TOC%(V%,1):J%=INT(C%/2):K%=2*(C%/2-J%):C%=J%:J%=T%:IFK%THENJ%=W% 5 FORJ%=J%TO1STEP-1:CALLO%-1:NEXT:FORJ%=1TOT%:CALLO%+1:NEXT:NEXT:IFF%THENFORN%=1TOF%:NEXT 6 NEXT:GOTO20 7 K%=ASC(INPUT$(1)):IFK%>96AND123>K%THENK%=K%-32 8 K$=CHR$(K%):RETURN 9 E%=0:IFLEN(T$)=255THENE%=1 10 RETURN 20 T$="":ONM%GOTO22,30 22 GOSUB7:IFK%=13THENM%=2:GOTO20 24 T$=K$:GOTO1 30 IFPOS(0)THENPRINT 31 PRINT"?"; 32 GOSUB9:IFE%THEN90 40 GOSUB7:ONLEN(T$)+1GOTO42,60:GOTO82 42'change mode 42 IFK%=13THENPRINTCHR$(127);:M%=1:GOTO20 44 IFK%=8ORK%=21ORK%=127THEN32 46 IFK%=31THENS%=S%+1:GOSUB200:GOTO32 48 IFK%=30THENS%=S%-1:GOSUB200:GOTO32 50 IFK%=27THENCLS:PRINT@40,"?";:GOSUB200:GOTO40 52 T$=K$:PRINTK$;:GOTO32 60 J%=K%-48:A%=ASC(T$):IFJ%=>0AND9=>J%AND(A%=20ORA%=22ORA%=4ORA%=5)THENONA%-3GOTO68,78,80,80,80,80,80,80,80,80,80,80,80,80,80,80,64,80,66 62 GOTO80 64 T$=T$(J%):PRINTCHR$(8)K$" ";:GOTO92 66 PRINTCHR$(8)K$" "T$(J%);:GOTO20 68 IFLEN(T$(J%))THENPRINTCHR$(8)K$" USED";:GOTO20 70 PRINT:PRINTK$" ";:T$="" 72 GOSUB9:IFE%THENT$(J%)=T$:GOTO20 74 GOSUB7:IFK%=13THENT$(J%)=T$:GOTO20 76 T$=T$+K$:PRINTK$;:GOTO72 78 T$(J%)="":PRINTCHR$(8)K$" ERASED";:GOTO20 80 IFK%=8THENT$=LEFT$(T$,LEN(T$)-1):GOTO40 82 IFK%=13THEN90 84 IFK%=8THENPRINTK$" "K$;:T$=LEFT$(T$,LEN(T$)-1):GOTO40 86 IFK%=21THENFORK%=1TOLEN(T$):PRINTCHR$(127);:NEXT:T$="":GOTO40 88 T$=T$+K$:PRINTK$;:GOTO32 90 FORK%=1TOLEN(T$):PRINTCHR$(127);:NEXT 92'Find/impliment TextBuffer references. OV error where concatenation would exceed 255-character limit of T$ 92 K%=INSTR(T$,"+"):IFK%ANDK%0ANDA%<10THENT$=LEFT$(T$,K%-1)+T$(A%)+MID$(T$,K%+2):GOTO92 96 M%=1:GOTO1 200'set and display word-per-minute speed 200 IFS%>S(0)THENS%=S(0):GOTO206 202 IFS%<1THENS%=1:GOTO206 204 T%=S%:W%=3*T%:F%=INT(2*S%*LOG(S%)) 206 N%=40*CSRLIN+POS(0):PRINT@0,CHR$(27)"lSpeed"STR$(S(S%))" AA] AR+ AS_ BK[ BT= HH< SK>" 208 PRINT@N%,;:RETURN 300'determine the Typ?NumVar 300 L%=PEEK(VARPTR(L%)-3)+3 301'all free mem is string space except: Overhead 16-Typ?NumVar 3-StringVar S()26-Speed T$()10-Buffer C?(,1)49-Symbol 301 CLEARFRE(0)+FRE("") -58-128-8-8 -L%*16 -6*3 -6-2*1-4*(1+26) -6-2*1-3*(1+9) -6-2*2-2*(L%-3)*(1+49) 302'1stStringVar 302 T$="" 303'11of16 Typ?NumVar 303 I%=0:R%=0:V%=0:O%=0:N%=0:J%=0:C%=0:K%=0:L%=0:F%=0:S%=0 304'2ndStringVar 49 Symbols 304 C$="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ?/.,+>[<=_]-" 305 DATA2,2,1,4,5,4,1,3,0,1,4,4,3,3,0,4,0,2,14,4,5,3,2,4,3,2,1,2,7,3,6,4,11,4,2,3,0,3,1,1,4,3,8,4,6,3,9,4,13,4,3,4 306 DATA30,5,28,5,24,5,16,5,0,5,1,5,3,5,7,5,15,5,31,5,0,0,12,6,9,5,42,6,51,6,10,5,40,6,81,7,0,8,17,5,2,5,10,4,33,6 308'last5of16 Typ?NumVar 3rdof3StringVar 308 M%=0:T%=0:W%=0:E%=0:A%=0:K$="" 310'per-symbol Morse, Plane0 Dit/Dah bits, Plane1 number of key-downs. Init mode 310 L%=LEN(C$):DIMC%(L%,1),T$(9):FORI%=1TOL%:READC%(I%,0):READC%(I%,1):NEXT:M%=2 311'Terminate if not Model 10x or Model 200 311 T$="SEARCH":IFPEEK(72)THENIFPEEK(877)THENMENUELSEO%=5569:R%=-1489ELSEO%=5289:R%=-513 312 READK$:IFK$<>T$THEN312 314 READI%:IFI%<1THENSTOP:ENDELSER%=R%-I% 315'plant machine language at end of prior screen bufr, no HIMEM requirement 315 FORV%=R%+1TOR%+I%:READC% 316 IFC%<2^8THENPOKEV%,C%:GOTO319 317'relative reference adjustment 317 N%=C%-2^8:V%=V%+1:READC%:C%=R%+1+I%-256*C%-N% 318 POKEV%,INT(2^16+C%)/256:POKEV%-1,(2^16+C%)-256*PEEK(V%) 319'Linkage to variable holding the Morse symbols 319 NEXT:N%=VARPTR(C$):POKER%-3,PEEK(N%+1):POKER%-2,PEEK(N%+2):POKER%-1,PEEK(N%) 320'24-byte machine language search of (all) Morse symbols 320 DATASEARCH,24 322'note there are five relative references 322 DATA42, 282,0 ,235,42, 284,0 ,25,43,190,194, 261,0 ,245,123,50, 281,0 ,241,29,194, 272,0 ,201 330 IFPEEK(72)THENT$="speed200"ELSET$="speed100" 332 READK$:IFK$<>T$THEN332 334'define letter S as single-precision then use only implicit type references to array S() 334 DEFSNGS:DIMS(26):S(0)=26:L%=PEEK(VARPTR(L%)-3) 336'26-Speed notches, initial speed set midway on 14th notch 336 L%=L%/2:FORI%=1TOS(0):READS(I%):NEXT:IFL%>1THEN336ELSES%=14:CLS:PRINT@39,;:GOSUB200 340'Model 10x measured word-per-minute speed ranges for: integer, single-, double-precision 340 DATAspeed100 341'all integers, inits at 23.7 341 DATA75.3,64.4,56.8,50.3,45.5,41.2,37.9,35,32.5,30.2,28.3,26.6,25.1,23.7,22.5,21.3,20.4,19.5,18.7,17.9,17.2,16.5,15.9,15.3,14.8,14.3 342'all single-precisions, inits at 10.7 342 DATA57.8,44.6,36.6,30.5,25.9,22.6,19.9,17.9,16.2,14.7,13.5,12.4,11.5,10.7,10,9.4,8.9,8.4,8,7.6,7.3,7,6.7,6.4,6.2,5.9 343'all double-precisions, inits at 10 343 DATA54.8,42,34.4,28.6,24.4,21.2,18.7,16.8,15.1,13.7,12.6,11.6,10.8,10,9.4,8.8,8.3,7.9,7.5,7.1,6.8,6.5,6.2,6,5.8,5.5 350'Model 200 measured word-per-minute speed ranges for: integer, single-, double-precision 350 DATAspeed200 351'all integers, inits at 20.4 351 DATA68.9,58.6,50.8,45,40.4,36.1,33.3,30.6,28.3,26.2,24.4,23,21.5,20.4,19.3,18.3,17.4,16.6,15.8,15.2,14.6,14,13.4,12.9,12.4,12 352'all single-precisions, inits at 9.9 352 DATA54,41.5,34,28.2,24,21,18.5,16.6,15,13.6,12.4,11.5,10.6,9.9,9.3,8.7,8.2,7.8,7.4,7,6.7,6.4,6.2,5.9,5.7,5.5 353'all double-precisions, inits at 9.3 353 DATA51,39.2,31.9,26.5,22.6,19.7,17.4,15.6,14,12.7,11.7,10.8,10,9.3,8.7,8.2,7.7,7.3,6.9,6.6,6.3,6,5.8,5.5,5.3,5.1 400'You may define TextBuffers here, otherwise they initially are empty 401'TextBuffer1 402'TextBuffer2 403'TextBuffer3 404'TextBuffer4 405'TextBuffer5 406'TextBuffer6 407'TextBuffer7 408'TextBuffer8 409'TextBuffer9 410'TextBuffer0 410'define the international standard word 20 times for convenience in measuring speed 410 FORI%=1TO20:T$(0)=T$(0)+"PARIS ":NEXT 498 ONERRORGOTO500 499 GOTO20 500'Line 92, OV error 500 RESUME1 65529'MK21 original by Ron Wiesen Technical Products 4/2/99, manual is MKMAN.DO