10  REM: AUTHOR. RANDY WONG  1 AUG 1975
20  PRINT "LAST-REVISED. 25 AUG 1976"
30  PRINT 
40  REM: EDP RESOURCE CENTER, 400 MANSELL ST, SAN FRANCISCO CA  94134
50  REM: (415) 239-6460
60  IF  ERROR  THEN 1520
70  DIM A$[72],C$[72],L$[72],M$[72],X$[72],Z$[72]
80  PRINT "INT'L MORSE CODE PRGM--TO QUIT A MODE ENTER A NULL RETURN";
90  PRINT "MODE '0' (ZERO) GIVES RUDEMENTARY DIRECTIONS";
100  REM: RANDOMIZE P
110  ENTER #P
120  LET C$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/:-,?.'"
130  LET M$="                          #################"
140  PRINT 
150  PRINT 
160  RESTORE 1470
170  PRINT "MODE NO.: ";
180  ENTER 255,R,M
185  PRINT 
190  IF R<0 THEN 1520
200  IF M>0 AND M<9 AND INT(M)=M THEN 270
210  PRINT LIN(2);"MODE  DESCRIPTION";LIN(1);" 0    LISTS MODES"
220  FOR Z9=1 TO 8
230  READ X$
240  PRINT Z9;X$
250  NEXT Z9
260  GOTO 150
270  FOR Z9=1 TO M
280  READ X$
290  NEXT Z9
300  PRINT TAB(15);X$;LIN(1)
310  GOTO M OF 430,560,580,580,670,720,780,840
320  PRINT 
330  LET Z8=1
340  FOR Z9=1 TO LEN(X$)
350  IF X$[Z9,Z9] <> " " THEN 400
360  LET Z$=X$[Z8,Z9-1+(Z9=LEN(X$))]
370  GOSUB 1200
380  PRINT L$[1,1];
390  LET Z8=Z9+1
400  IF Z9=LEN(X$) AND Z8 <= Z9 THEN 360
410  NEXT Z9
420  PRINT 
430  PRINT "CODE: ";
440  GOTO 910
450  LET A$="  "
460  PRINT 
470  FOR Z9=1 TO LEN(X$)
480  LET Z$=X$[Z9,Z9]
490  GOSUB 1260
500  LET A$[1,1]=X$[Z9,Z9]
510  LET A$[3]=L$[2]
520  LET A$[LEN(A$)+1]="   "
530  PRINT A$;
540  NEXT Z9
550  PRINT 
560  PRINT "TEXT: ";
570  GOTO 910
580  PRINT "C/X:CHR:CODE"
590  GOSUB 1010
600  IF M <> 4 THEN 630
610  PRINT "   : ";L$[1,1];" :";
620  LET A$=L$[2]
630  IF M <> 3 THEN 660
640  PRINT "       :";L$[2];LIN(0);"   : ";
650  LET A$=L$[1,1]
660  GOTO 910
670  PRINT "   DECIPHER:";
680  GOSUB 1110
690  PRINT Z$
700  PRINT "   TEXT: ";
710  GOTO 910
720  PRINT "   ENCIPHER: ";
730  GOSUB 1110
740  PRINT A$
750  LET A$=Z$[2]
760  PRINT "   CODE: ";
770  GOTO 910
780  PRINT C$;LIN(0);M$;LIN(2);"OBSCURE THE CHARACTERS NOT DESIRED ";
790  PRINT "IN D/P MODES.";LIN(2);C$;LIN(0);
800  LET M$="                                           "
810  GOTO 910
820  LET M$[1,LEN(X$)]=X$
830  GOTO 140
840  RESTORE 1320
850  READ X$
860  IF X$[1,1]='92 THEN 850
870  IF X$="#NOT-FOUND" THEN 850
880  IF X$="#END-REFERENCE-MATERIAL" THEN 140
890  PRINT X$[1,1];"  ";X$[2]
900  GOTO 850
910  ENTER 255,R,X$
920  IF R<0 THEN 1520
930  IF  NOT LEN(X$) THEN 140
940  IF M=7 THEN 820
950  GOTO M OF 320,450
960  IF X$ <> A$ THEN 990
970  PRINT " C"
980  GOTO 1000
990  PRINT " X"
1000  GOTO M-2 OF 590,590,670,720
1010  REM: LET L$=RANDOM-L$ .ST. L$::LOOK-UP
1020  RESTORE 1320
1030  LET Z9=LEN(M$)
1040  LET Z8=INT(RND(P)*Z9+1)
1050  LET Z8=Z8+13-(Z8+13>Z9)*Z9
1060  IF M$[Z8,Z8] <> " " THEN 1050
1070  FOR Z9=1 TO Z8
1080  READ L$
1090  NEXT Z9
1100  RETURN 
1110  REM: GENERATE-GROUP-PROBLEM
1120  LET Z$=Z$[2,1]
1130  FOR Z7=1 TO RND(P)+RND(P)+RND(P)+RND(P)+RND(P)+3
1140  GOSUB 1010
1150  LET A$[Z7]=L$[1,1]
1160  LET L$[1,1]=" "
1170  LET Z$[LEN(Z$)+1]=L$
1180  NEXT Z7
1190  RETURN 
1200  REM: LET L$=LOOK-UP(Z$) .ST. Z$::MORSE
1210  RESTORE 1320
1220  READ L$
1230  IF L$[2]=Z$ THEN 1250
1240  IF L$ <> "#NOT-FOUND" THEN 1220
1250  RETURN 
1260  REM: LET L$=LOOK-UP(Z$) .ST. Z$::ALPHAMERIC
1270  RESTORE 1320
1280  READ L$
1290  IF L$[1,1]=Z$ THEN 1310
1300  IF L$ <> "#NOT-FOUND" THEN 1280
1310  RETURN 
1320  DATA "A*=","B=***","C=*=*","D=**","E*"
1330  DATA "F**=*","G==*","H****","I**","J*==="
1340  DATA "K=*=","L*=**","M==","N=*","O==="
1350  DATA "P*==*","Q==*=","R*=*","S***","T="
1360  DATA "U**=","V***=","W*==","X=**=","Y=*==","Z==**"
1370  DATA "0=====","1*====","2**===","3***==","4****="
1380  DATA "5*****","6=****","7==***","8===**","9====*"
1390  DATA "/=**=*",":=*=*=*","-=****=",",==**==","?**==**"
1400  DATA ".**==*=","'*====*",'92"=*==*=","(=*==*=",")=*==*="
1410  DATA "  ","#NOT-FOUND"
1420  DATA " SPECIAL CHARACTERS NOT SUPPORTED BY COMPUTER PROGRAM"
1430  DATA "  "," ********  ERROR"," =***=  DOUBLE-DASH"," *=***  WAIT"
1440  DATA " =*=  INVITATION TO TRANSMIT"," ***=*=  END OF WORK"
1450  DATA " =*==*=  PARENTHESIS (ONLY PARTIALLY SUPPORTED)"
1460  DATA "#END-REFERENCE-MATERIAL"
1470  DATA "DECIPHER CODED TEXT...DOT: '*'  DASH: '='"
1480  DATA "ENCIPHER TEXT","D/P DECIPHERING","D/P ENCIPHERING"
1490  DATA "D/P DECIPHERING GROUPS","D/P ENCIPHERING GROUPS"
1500  DATA "D/P PARAMETER ADJUSTMENTS"
1510  DATA "INT'L MORSE CODE REFERENCE INFORMATION"
1520  CHAIN R,"*HELP"
1530  SYSTEM X,"BYE"
1540  END 
