home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1987-02-02 | 14.4 KB | 498 lines |
- 10 REM ***** CRYPTO PROGRAM BY ART REW 4/86 *******
- 15 REM ***** UPDATE BY JEFF EBERT 2/87 *******
- 20 REM VERS. 3.3 2/87
- 30 REM CONVERTS SENTENCES TO CRYPTOS AND/OR HELPS YOU SOLVE A CRYPTO
- 40 COLOR 4,7,8
- 50 CLS:LOCATE 4,30:GOSUB 3280:REM SETS UP F-KEYS
- 60 DIM Y$(40),S$(255),A(26),P$(26),Y(26)
- 70 REM ***********************************************
- 80 REM MAIN MENU
- 90 COLOR 1,7,8:CLS:LOCATE 4,30:PRINT"CRYPTOQUIP ANALYZER":PRINT
- 95 COLOR 4,7,8
- 100 KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
- 105 COLOR 4,0,8:GOSUB 4500:COLOR 20,7,8
- 110 LOCATE 7,9:PRINT"PICK YOUR POISON:":COLOR 12,0,8
- 120 LOCATE 11,12:PRINT"1. SOLVE A CRYPTOQUIP"
- 130 LOCATE 13,12:PRINT"2. CREATE A CRYPTOQUIP "
- 135 LOCATE 15,12:PRINT"3. EXIT THIS PROGRAM"
- 140 LOCATE 17,16:PRINT"(OR YOU MAY USE THE FUNCTION"
- 145 LOCATE 18,17:PRINT"KEYS TO ENTER YOUR COMMANDS)"
- 150 COLOR 4,0,8
- 160 V=RND
- 170 A$=INKEY$
- 180 IF A$="2" THEN GOTO 230
- 190 IF A$="1" THEN GOTO 1770
- 195 IF A$="3" THEN GOTO 4390
- 200 GOTO 160
- 210 REM ***********************************************
- 220 REM CONVERT SENT TO CRYPTO
- 230 COLOR 11,0,8:CLS:LIN=1
- 240 KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
- 250 COLOR 27,0,8:PRINT:PRINT:PRINT"TYPE IN THE SENTENCE TO BE CONVERTED"
- 260 COLOR 11,0,8:PRINT:PRINT
- 270 PRINT"USE CAPITAL LETTERS, HIT 'RETURN/ENTER' WHEN DONE "
- 280 PRINT "USE THE 'BACKSPACE' KEY TO CORRECT TYPING ERRORS"
- 290 PRINT:PRINT:PRINT
- 300 FOR N=1 TO 255
- 310 S$(N)=INKEY$:IF LEN(S$(N))=0 THEN GOTO 310
- 320 IF S$(N)=CHR$(13) THEN GOTO 380:REM DONE ENTERING
- 330 IF S$(N)=" " THEN N=N+1:S$(N)=" ":PRINT " ";:REM TWO SPACES BETWEEN WORDS
- 340 IF S$(N)=CHR$(8) THEN GOSUB 1680:REM BACKSPACE
- 350 PRINT S$(N);
- 360 IF POS(X)>65 AND S$(N)=" " THEN PRINT:PRINT:PRINT:NL(LIN)=N:LIN=LIN+1
- 370 NEXT N
- 380 NC=N-1
- 390 NL(LIN)=N
- 400 LOCATE 3,1:PRINT" "
- 410 COLOR 27,0,8:LOCATE 20,1:PRINT "IS THIS CORRECT? (Y/N)":COLOR 11,0,8
- 420 A$=INKEY$:IF A$="N" THEN GOTO 230
- 430 IF A$="Y" THEN GOTO 460
- 440 GOTO 420
- 450 REM ***********************************************
- 460 REM ROUTINE TO CHECK IF LETTERS USED TWICE
- 470 FOR I=1 TO 26:A(I)=0:NEXT I:REM SET COUNTS AT ZERO
- 480 Y=0
- 490 CLS:COLOR 23,0
- 500 PRINT:PRINT:PRINT "CHECKING TO SEE IF ALL LETTERS HAVE BEEN USED TWICE"
- 510 COLOR 7,0:PRINT
- 520 GOSUB 3200:REM COUNT LETTERS
- 530 FOR I=1 TO 26
- 540 IF A(I)=1 THEN GOTO 570
- 550 NEXT I
- 560 GOTO 600
- 570 COLOR 13,0,8:PRINT "THE LETTER "CHR$(I+64)" WAS NOT USED TWICE"
- 575 COLOR 11,0,8
- 580 Y=1
- 590 GOTO 550
- 600 IF Y=0 THEN GOTO 670
- 610 LOCATE 3,1
- 620 PRINT " ":COLOR 27,0,8
- 630 LOCATE 21,1:PRINT "DO YOU WISH TO ENTER A DIFFERENT SENTENCE?":COLOR 11,0,8
- 640 A$=INKEY$:IF A$="Y" THEN GOTO 210
- 650 IF A$="N" THEN GOTO 670
- 660 GOTO 640
- 670 REM ***********************************************
- 680 REM ROUTINE TO ASSIGN CHARACTERS
- 690 COLOR 11,0,8:CLS:LOCATE 10,20:PRINT"RANDOMLY ASSIGNING LETTERS"
- 700 FOR N=1 TO 26:REM ROUTINE FROM DENNIS
- 710 Y(N)=N
- 720 NEXT N
- 730 FOR I=26 TO 1 STEP -1
- 740 J=INT(RND*I)+1
- 750 SWAP Y(I),Y(J)
- 760 NEXT I
- 770 REM MAKE AN E,T,A,O,N NOT AN E,T,A,O, OR N
- 780 IF Y(1)=5 OR Y(1)=15 OR Y(1)=20 OR Y(1)=14 THEN GOTO 700
- 790 IF Y(5)=1 OR Y(5)=15 OR Y(5)=20 OR Y(5)=14 THEN GOTO 700
- 800 IF Y(14)=1 OR Y(14)=5 OR Y(14)=15 OR Y(14)=20 THEN GOTO 700
- 810 IF Y(20)=1 OR Y(20)=5 OR Y(20)=14 OR Y(20)=15 THEN GOTO 700
- 820 IF Y(15)=1 OR Y(15)=5 OR Y(15)=14 OR Y(15)=20 THEN GOTO 700
- 830 FOR N=1 TO 26
- 840 IF Y(N)=N THEN GOTO 700
- 850 NEXT N
- 860 FOR NN=1 TO 26
- 870 ON Y(NN) GOTO 880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130
- 880 Y$(NN)="A":GOTO 1140
- 890 Y$(NN)="B":GOTO 1140
- 900 Y$(NN)="C":GOTO 1140
- 910 Y$(NN)="D":GOTO 1140
- 920 Y$(NN)="E":GOTO 1140
- 930 Y$(NN)="F":GOTO 1140
- 940 Y$(NN)="G":GOTO 1140
- 950 Y$(NN)="H":GOTO 1140
- 960 Y$(NN)="I":GOTO 1140
- 970 Y$(NN)="J":GOTO 1140
- 980 Y$(NN)="K":GOTO 1140
- 990 Y$(NN)="L":GOTO 1140
- 1000 Y$(NN)="M":GOTO 1140
- 1010 Y$(NN)="N":GOTO 1140
- 1020 Y$(NN)="O":GOTO 1140
- 1030 Y$(NN)="P":GOTO 1140
- 1040 Y$(NN)="Q":GOTO 1140
- 1050 Y$(NN)="R":GOTO 1140
- 1060 Y$(NN)="S":GOTO 1140
- 1070 Y$(NN)="T":GOTO 1140
- 1080 Y$(NN)="U":GOTO 1140
- 1090 Y$(NN)="V":GOTO 1140
- 1100 Y$(NN)="W":GOTO 1140
- 1110 Y$(NN)="X":GOTO 1140
- 1120 Y$(NN)="Y":GOTO 1140
- 1130 Y$(NN)="Z"
- 1140 NEXT NN
- 1150 A$="0"
- 1155 COLOR 10,0,8
- 1160 CLS:LOCATE 4,15:PRINT "DO YOU WISH TO PUT YOUR CRYPTOQUIP-"
- 1165 COLOR 11,0,8
- 1170 LOCATE 6,18:PRINT "1. ON PAPER (PRINTER)"
- 1180 LOCATE 7,18:PRINT "2. ON DISK"
- 1190 LOCATE 8,18:PRINT "3. ON BOTH PAPER AND DISK"
- 1200 A$=INKEY$:IF A$="" THEN GOTO 1200
- 1210 IF A$="1" OR A$="3" THEN GOTO 1240
- 1220 IF A$="2" THEN GOTO 1500
- 1230 GOTO 1200
- 1240 CLS:PRINT "IF PRINTER IS ON-PRESS 'RETURN'"
- 1250 B$=INKEY$:IF B$=CHR$(13) THEN GOTO 1280
- 1260 GOTO 1250
- 1270 REM PRINT THE CRYPTO
- 1280 CLS:LPRINT:LPRINT:LPRINT:LPRINT
- 1290 LOCATE 4,10:PRINT "PRINTING THE CRYPTO"
- 1300 LIN=1
- 1310 FOR N=1 TO NC
- 1320 NN=ASC(S$(N))
- 1330 IF NN>64 AND NN<91 THEN NN=NN-64:GOTO 1360:REM A LETTER
- 1340 IF N>NL(LIN) THEN LPRINT:LPRINT:LPRINT:LIN=LIN+1
- 1350 LPRINT S$(N);:GOTO 1380:REM IF NOT A LETTER PRINT IT
- 1360 IF N>NL(LIN) THEN LPRINT:LPRINT:LPRINT:LIN=LIN+1
- 1370 LPRINT Y$(NN);:S$(N)=Y$(NN)
- 1380 NEXT N
- 1390 REM ***********************************************
- 1400 REM ROUTINE TO PRINT A KEY
- 1410 LPRINT:LPRINT:LPRINT:LPRINT:LPRINT:LPRINT "KEY":LPRINT:LPRINT
- 1420 LPRINT"ABCDEFGHIJKLMNOPQRSTUVWXYZ - IN YOUR SENTENCE IS"
- 1430 FOR N=1 TO 26
- 1440 LPRINT Y$(N);
- 1450 NEXT N
- 1460 LPRINT " - IN YOUR CRYPTOQUIP"
- 1470 LPRINT:LPRINT:LPRINT
- 1480 IF A$="1" THEN GOTO 90
- 1490 REM ********************************************
- 1500 REM TO STORE ON DISK
- 1510 IF A$="3" THEN GOTO 1580
- 1520 FOR N=1 TO NC
- 1530 NN=ASC(S$(N))
- 1540 IF NN>64 AND NN<91 THEN NN=NN-64:GOTO 1560
- 1550 S$(N)=CHR$(NN):GOTO 1570
- 1560 S$(N)=Y$(NN)
- 1570 NEXT N
- 1580 REM PRINT KEY ON SCREEN
- 1590 PRINT "KEY"
- 1600 PRINT:PRINT "ABCDEFGHIJKLMNOPQRSTUVWXYZ-IN YOUR SENTENCE IS"
- 1610 FOR N=1 TO 26
- 1620 PRINT Y$(N);
- 1630 NEXT N
- 1640 PRINT "-IN YOUR CRYPTOQUIP"
- 1650 GOSUB 3480:REM TO STORE
- 1660 GOTO 90:REM TO MENU
- 1670 REM ****************************************************
- 1680 REM SUBROUTINE TO CORRECT TYPING ERRORS
- 1690 N=N-2
- 1700 X=CSRLIN
- 1710 Y=POS(Q):Y=Y-2:IF Y<1 AND LIN=1 THEN LOCATE X,1:LOCATE X,1:RETURN
- 1720 IF Y<1 THEN Y=NL(LIN-1)-NL(LIN-2)-1:X=X-3:LIN=LIN-1
- 1730 LOCATE X,Y
- 1740 RETURN
- 1750 REM ****************************************************
- 1760 REM ****************************************************
- 1770 REM HELP SOLVE A CRYPTOQUIP
- 1780 CLS
- 1790 KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
- 1800 LIN=1
- 1810 FOR J=1 TO 26:A(J)=0:NEXT J:REM SETS LETTER COUNT TO ZERO
- 1820 CLS:COLOR 28,0,8:PRINT:PRINT:PRINT:PRINT"ENTER THE CRYPTOQUIP":COLOR 11,0,8
- 1830 PRINT "OR USE THE 'F6' KEY TO LOAD A CRYPTO FROM DISK"
- 1840 PRINT:PRINT "USE THE BACKSPACE KEY TO CORRECT TYPING ERRORS"
- 1850 PRINT "**** USE CAPITAL LETTERS ****"
- 1860 PRINT:PRINT:PRINT
- 1865 COLOR 14,0,8
- 1870 FOR N=1 TO 255
- 1880 S$(N)=INKEY$:IF LEN (S$(N))=0 THEN GOTO 1880
- 1890 IF S$(N)=CHR$(13) THEN GOTO 1940:REM DONE ENTERING
- 1900 IF S$(N)=CHR$(32) THEN PRINT " ";:S$(N+1)=" ":N=N+1:REM ADD A SPACE
- 1910 IF S$(N)=CHR$(8) THEN GOSUB 1680:REM BACKSPACE
- 1920 PRINT S$(N);:IF POS(X)>65 AND S$(N)=" " THEN NL(LIN)=N:LIN=LIN+1:PRINT:PRINT:PRINT
- 1930 NEXT N
- 1940 NC=N-1
- 1950 LOCATE 6,1:PRINT " "
- 1960 LOCATE 4,1:PRINT " ":COLOR 28,0,8:LOCATE 20,1
- 1970 PRINT "IS THIS CORRECT?":COLOR 11,0,8
- 1980 A$=INKEY$:IF A$="N" THEN GOTO 1770
- 1990 IF A$="Y" THEN GOTO 2010
- 2000 GOTO 1980
- 2010 CLS:GOSUB 3480:REM TO STORE
- 2020 FOR J=1 TO 26:A(J)=0:NEXT J
- 2030 GOSUB 3200:REM COUNT LETTERS
- 2040 T1=TIMER
- 2050 REM ************************************************
- 2060 CLS:COLOR 3,0:LOCATE 1,28:PRINT "CRYPTOQUIP ANALYZER"
- 2061 LOCATE 1,20:PRINT CHR$(175)
- 2062 LOCATE 1,22:PRINT CHR$(175)
- 2063 LOCATE 1,24:PRINT CHR$(175)
- 2064 LOCATE 1,26:PRINT CHR$(175)
- 2065 LOCATE 1,48:PRINT CHR$(174)
- 2066 LOCATE 1,50:PRINT CHR$(174)
- 2067 LOCATE 1,52:PRINT CHR$(174)
- 2068 LOCATE 1,54:PRINT CHR$(174)
- 2070 KEY (1) ON:KEY (2) ON:KEY (4) ON
- 2080 FOR CLE=1 TO 26
- 2090 P$(CLE)=""
- 2100 NEXT CLE
- 2105 COLOR 12,0,8
- 2110 LIN=1
- 2120 LOCATE 5,2
- 2130 FOR I=1 TO NC
- 2140 PRINT S$(I);
- 2150 IF POS(X)>65 AND S$(I)=" " THEN NL(LIN)=I:LIN=LIN+1:PRINT:PRINT:PRINT:PRINT
- 2160 IF ASC(S$(I))>64 AND ASC(S$(I))<91 THEN GOTO 2220
- 2170 IF S$(I)=" " THEN GOTO 2220
- 2180 L=CSRLIN:M=L-1
- 2190 U=POS(X)-1
- 2200 IF U=0 THEN GOTO 2220
- 2210 LOCATE M,U:PRINT S$(I);:LOCATE L,U+1
- 2220 NEXT I
- 2230 NL(LIN)=NC
- 2240 REM ***********************************************
- 2245 COLOR 14,0,8
- 2250 LOCATE 17,50:PRINT "CLUE: ";CL$
- 2255 COLOR 12,0,8
- 2260 REM ***********************************************
- 2270 REM ROUTINE TO DRAW LINE ABOVE LETTER INFO
- 2275 COLOR 6,0,8
- 2280 FOR I=1 TO 48
- 2290 LOCATE 21,I:PRINT CHR$(196);:NEXT I
- 2300 LOCATE 21,49:PRINT CHR$(217);
- 2310 FOR I=20 TO 19 STEP -1:LOCATE I,49:PRINT CHR$(179);:NEXT I
- 2320 LOCATE 18,49:PRINT CHR$(218);
- 2330 FOR I=50 TO 79:LOCATE 18,I:PRINT CHR$(196);:NEXT I
- 2335 COLOR 12,0,8
- 2340 REM ***********************************************
- 2350 REM PRINT LETTERS AND NUMBER USED ON SCREEN BOTTOM
- 2360 FOR I=65 TO 90:LOCATE 22,((I-64)*3):PRINT CHR$(I);
- 2370 LOCATE 23,((I-64)*3)-1:IF A(I-64)>9 THEN LOCATE 23,((I-64)*3)-2
- 2380 PRINT A(I-64);
- 2390 NEXT I
- 2400 REM ****************************************************
- 2410 REM PUT DASHES UNDER UNUSED LETTERS ON SCREEN BOTTOM
- 2415 COLOR 6,0,8
- 2420 FOR Y=1 TO 26
- 2430 IF A(Y)=0 THEN LOCATE 24,Y*3:PRINT "-";
- 2440 NEXT Y
- 2445 COLOR 11,0,8
- 2450 REM ***********************************************
- 2460 REM PRINT UP LETTERS NOT USED-INITIALLY
- 2470 LOCATE 19,50 :PRINT"LETTERS NOT USED:";
- 2480 LOCATE 20,50: PRINT"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- 2490 REM ***********************************************
- 2500 LOCATE 17,1:PRINT"ENTER THE CRYPTO LETTER, LETTER TO TRY "
- 2510 LOCATE 19,1:PRINT " "
- 2520 I$=INKEY$:IF I$="" THEN GOTO 2520
- 2530 IF ASC(I$)<65 OR ASC(I$)>90 THEN GOTO 2520
- 2540 LOCATE 19,1:PRINT I$;" EQUALS ";
- 2550 J$=I$
- 2560 I$=INKEY$:IF I$="" THEN GOTO 2560
- 2570 IF ASC(I$)=45 OR ASC(I$)=32 THEN GOTO 2590:REM DASH OR SPACE FOR A DELETION
- 2580 IF ASC(I$)<65 OR ASC(I$)>90 THEN GOTO 2560
- 2590 K$=I$
- 2600 PRINT I$;
- 2610 REM ***********************************************
- 2620 REM ROUTINE TO SEE IF J$ IS USED IN CRYPTO
- 2630 FOR CH=1 TO NC:IF S$(CH)=J$ THEN GOTO 2660
- 2640 NEXT CH
- 2650 GOTO 2500
- 2660 REM *********************************************
- 2670 IF K$="-" THEN K$=" ":IF K<>" " THEN GOTO 2890
- 2680 REM SEE IF LETTERS ARE USED ELSEWHERE AND REPRINT IF NOT
- 2690 L=ASC(J$)
- 2700 J=L-64:L$=P$(J)
- 2710 FOR L=1 TO 26
- 2720 IF L$=P$(L) THEN GOTO 2750
- 2730 NEXT L
- 2740 GOTO 2770
- 2750 IF L=J THEN GOTO 2730
- 2760 GOTO 2810:REM DONT REPRINT
- 2770 REM REPRINT AS LETTER NOT USED
- 2780 N=ASC(P$(J))
- 2790 LOCATE 20,N-15:PRINT P$(J)
- 2800 REM *************************************************
- 2810 REM ROUTINE TO SEE IF LETTER ALREADY USED AND WARN
- 2820 FOR N=1 TO 26
- 2830 IF P$(N)=K$ THEN GOTO 2860
- 2840 NEXT N
- 2850 GOTO 2890
- 2860 IF P$((ASC(J$)-64))=K$ THEN GOTO 2890:LETTER ALREADY ASSIGNED TO SAME THING
- 2870 IF K$<>" " THEN JD$=CHR$(N+64):KD$=" ":DOUBLE=1:REM DUP LETTER-CANCEL OLD
- 2880 REM **********************************************
- 2890 IF K$=" " THEN GOTO 2930
- 2900 I=ASC(K$):LOCATE 20,I-15:PRINT " ":GOTO 2930
- 2910 REM ***********************************************
- 2920 REM ROUTINE TO FIND THE MATCH AND PRINT
- 2930 LIN=1
- 2940 GTO=0
- 2950 FOR W=1 TO NC
- 2960 IF J$=S$(W) THEN GOTO 2990
- 2970 NEXT W
- 2975 IF DOUBLE=1 THEN DOUBLE=0:J$=JD$:K$=KD$:GOTO 2620
- 2980 GOTO 2500
- 2990 Z=W
- 3000 IF W<=NL(1) THEN Y=4:GOTO 3030
- 3010 IF W<=NL(2) THEN Y=8:GOTO 3030
- 3020 Y=12
- 3030 IF Z<=NL(1) THEN Z=Z+1:GOTO 3060
- 3040 IF Z<=NL(2) THEN Z=W-NL(1):GOTO 3060
- 3050 Z=W-NL(2)
- 3060 LOCATE Y,Z:COLOR 11,0,8:PRINT K$;
- 3065 COLOR 12,0,8
- 3070 IF GTO=1 THEN GOTO 2970
- 3080 REM ****************************************************
- 3090 REM ROUTINE TO REMEMBER LETTER COMBINATIONS
- 3100 I=ASC(J$)
- 3110 P$(I-64)=K$
- 3120 REM ****************************************************
- 3130 REM ROUTINE TO MATCH LETTERS ON BOTTOM OF SCREEN
- 3140 LOCATE 24,((I-64)*3):PRINT K$;
- 3160 GTO=1
- 3170 GOTO 2970
- 3180 REM ***************************************************
- 3190 REM ****************************************************
- 3200 REM ROUTINE TO COUNT LETTERS
- 3210 FOR LC=1 TO NC
- 3220 I=ASC(S$(LC))
- 3230 IF I<65 OR I>90 THEN GOTO 3250
- 3240 A(I-64)=A(I-64)+1
- 3250 NEXT LC
- 3260 RETURN
- 3270 REM ****************************************************
- 3280 REM ROUTINE TO SET UP FUNCTION KEYS
- 3290 KEY 1,"CLEAN":KEY 2, "TIME":KEY 3, "NEW":KEY 4,"DONE"
- 3300 KEY 5,"QUIT ":KEY 6,"LOAD ":KEY 7,"FILES":KEY 8,"F-KEYS"
- 3310 KEY 9,"DOS":KEY 10, "MAKE"
- 3320 ON KEY (1) GOSUB 4170:REM CLEANS SLATE
- 3330 ON KEY (2) GOSUB 3950:REM SHOW ELAPSED TIME
- 3340 ON KEY (3) GOSUB 4180:REM START NEW PUZZLE
- 3350 ON KEY (4) GOSUB 4040:REM DONE-SHOW TIME
- 3360 ON KEY (5) GOSUB 4380:REM QUIT-END
- 3370 ON KEY (6) GOSUB 3690:REM LOAD A CRYPTO
- 3380 ON KEY (7) GOSUB 4160:REM DIR
- 3390 ON KEY (8) GOSUB 4210:REM GIVE F-KEY DESCRIPTION
- 3400 ON KEY (9) GOSUB 3460:REM TO DOS
- 3410 ON KEY (10) GOSUB 4190:REM MAKE A CRYTPO
- 3420 KEY (1) ON:KEY (2) ON:KEY (3) ON:KEY (4) ON
- 3430 KEY (5) ON:KEY (6) ON:KEY (7) ON:KEY (8) ON:KEY (9) ON :KEY(10) ON
- 3440 KEY ON
- 3450 RETURN
- 3460 CLS:CLOSE:SYSTEM
- 3470 REM ****************************************************
- 3480 REM ROUTINE TO SAVE A CRYPTO
- 3490 PRINT:PRINT:PRINT "ENTER THE STARTING CLUE";:INPUT CL$
- 3500 PRINT:PRINT:PRINT "ENTER THE NAME FOR THE CRYPTO ";:INPUT N$
- 3510 IF N$="" THEN PRINT "TRY AGAIN":GOTO 3500
- 3520 ON ERROR GOTO 3660
- 3530 B$=""
- 3540 FOR CN=1 TO NC
- 3550 B$=B$+S$(CN)
- 3560 NEXT CN
- 3570 B$=B$+"\":B$=B$+CL$
- 3580 OPEN "R",1,N$+".CRP",NC+25
- 3590 FIELD 1,NC+25 AS C$
- 3600 LSET C$=B$
- 3610 PUT 1,1
- 3620 CLOSE
- 3630 ON ERROR GOTO 0
- 3640 IF A$="2" THEN RETURN 90
- 3650 RETURN
- 3660 PRINT:PRINT "DISK I/O ERROR: TRY AGAIN"
- 3670 RESUME 3500
- 3680 REM ****************************************************
- 3690 REM ROUTINE TO LOAD A CRYPTO
- 3700 ON ERROR GOTO 3920
- 3710 PRINT:PRINT "ENTER THE NAME OF THE CRYPTO TO BE LOADED ";:INPUT N$
- 3720 IF N$="" THEN PRINT "TRY AGAIN":GOTO 3710
- 3730 N$=N$+".CRP"
- 3740 OPEN "R",1,N$,255
- 3750 IF LOF(1)>0 THEN GOTO 3770
- 3760 PRINT " NO SUCH CRYPTO EXISTS":CLOSE:KILL N$:GOTO 3710
- 3770 CLS:LOCATE 10,20:PRINT "CRYPTO LOADING-PLEASE WAIT"
- 3780 FIELD 1,255 AS B$
- 3790 GET 1,1
- 3800 FOR J=1 TO 26:A(J)=0
- 3810 NEXT J
- 3820 FOR N=1 TO 240
- 3830 BU$=MID$(B$,N,1)
- 3840 IF BU$="\" THEN NC=N-1:GOTO 3870
- 3850 S$(N)=BU$
- 3860 NEXT N
- 3870 REM THE NEXT 24 IS THE CLUE
- 3880 CL$=MID$(B$,NC+2,24)
- 3890 CLOSE
- 3900 ON ERROR GOTO 0
- 3910 RETURN 2020
- 3920 PRINT:PRINT "DISK I/O ERROR: TRY AGAIN"
- 3930 RESUME 3710
- 3940 REM ****************************************************
- 3950 REM SHOW ELAPSED TIME
- 3960 T2=TIMER
- 3970 TD=((T2-T1-3)/60)
- 3980 TD2=(TD-INT(TD))*60
- 3990 LOCATE 17,1:PRINT " "
- 4000 LOCATE 17,1:PRINT "ELAPSED TIME: "INT(TD)" MINUTES "INT(TD2)"SECONDS."
- 4010 FOR X=1 TO 1000:NEXT X
- 4020 RETURN 2500
- 4030 REM *************************************************
- 4040 REM DONE-DISPLAY TIME USED
- 4050 T2=TIMER
- 4060 TD=((T2-T1-3)/60)
- 4070 TD2=(TD-INT(TD))*60
- 4080 LOCATE 17,1:PRINT " "
- 4090 LOCATE 17,1:PRINT "TIME COMPLETED: "INT(TD)" MINUTES "INT(TD2)"SECONDS."
- 4100 PRINT:COLOR 27,0,8:PRINT "USE F-KEYS TO ENTER YOUR NEXT COMMAND"
- 4110 COLOR 11,0,8
- 4120 RETURN 4130
- 4130 A$=INKEY$:GOTO 4130
- 4140 REM ***************************************************
- 4150 REM DISPLAY FILES FROM DISK
- 4160 FILES "*.CRP":PRINT:PRINT "ENTER YOUR NEXT COMMAND ":PRINT:RETURN
- 4170 RETURN 2060:REM CLEAN SLATE
- 4180 RETURN 1770:REM ENTER NEW PUZZLE
- 4190 RETURN 230:REM MAKE A CRYTPO
- 4200 REM ************************************************
- 4210 REM F-KEY DESCRIPTION
- 4220 CLS:LOCATE 1,30:PRINT "CRYPTOQUIP"
- 4230 LOCATE 2,25:PRINT "F-KEY DESCRIPTION"
- 4240 PRINT:PRINT "F1-CLEAN: CLEANS OR ERASES THE GUESSES YOU HAVE ENTERED"
- 4250 PRINT:PRINT "F2-TIME: SHOWS THE ELAPSED TIME WHEN SOLVING"
- 4260 PRINT:PRINT "F3-NEW: ALLOWS YOU TO ENTER OR LOAD A CRYPTO"
- 4270 PRINT:PRINT "F4-DONE: HIT WHEN YOU HAVE SOLVED CRYPTO-SHOWS TIME"
- 4280 PRINT:PRINT "F5-QUIT: HIT WHEN YOU WISH TO QUIT THE GAME"
- 4290 PRINT:PRINT "F6-LOAD: LOADS A CRYPTOQUIP THAT HAS BEEN STORED ON DISK"
- 4300 PRINT:PRINT "F7-FILES: DISPLAYS THE CRYPTOS STORED ON THE DEFAULT DISK"
- 4310 PRINT:PRINT "F8-F-KEYS: THIS SCREEN"
- 4320 PRINT:PRINT "F9-DOS: RETURNS YOU TO DOS"
- 4330 PRINT:PRINT "F10-MAKE: ALLOWS YOU TO CONVERT A SENTENCE TO A CRYPTO"
- 4340 COLOR 27,0,8:PRINT "ENTER YOUR CHOICE":COLOR 11,0,8:RETURN 4350
- 4350 R$=INKEY$:GOTO 4350
- 4360 CLS
- 4370 REM **************************************
- 4380 REM END OF PROGRAM-SET UP F-KEYS AS DEFAULT
- 4390 CLOSE:CLS:KEY OFF
- 4400 KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+CHR$(34)
- 4410 KEY 4,"SAVE"+CHR$(34):KEY 5,"CONT"+CHR$(13):KEY 6,",LPT1:"+CHR$(13)
- 4420 KEY 7,"TRON"+CHR$(13):KEY 8,"TROFF"+CHR$(13):KEY 9,"KEY"
- 4430 KEY 10,"SCREEN 0,0,0"+CHR$(13):KEY ON
- 4440 NEW:END
- 4450 REM ***************************************
- 4455 REM DRAW BOX AROUND SCREEN FOR MAIN MENU
- 4500 LOCATE 1,1:PRINT CHR$(213)
- 4510 FOR J=2 TO 79:LOCATE 1,J:PRINT CHR$(205):NEXT J
- 4520 LOCATE 1,80:PRINT CHR$(184)
- 4530 FOR J=2 TO 22:LOCATE J,1:PRINT CHR$(179):LOCATE J,80:PRINT CHR$(179):NEXT J
- 4540 LOCATE 23,1:PRINT CHR$(212):LOCATE 23,80:PRINT CHR$(190)
- 4550 FOR J=2 TO 79:LOCATE 23,J:PRINT CHR$(205):NEXT J
- 4560 REM ******** DRAW INNER BOX **************
- 4565 COLOR 2,0,8
- 4600 LOCATE 9,9:PRINT CHR$(213)
- 4610 FOR J=10 TO 50:LOCATE 9,J:PRINT CHR$(205):NEXT J
- 4620 LOCATE 9,51:PRINT CHR$(184)
- 4630 FOR J=10 TO 19:LOCATE J,9:PRINT CHR$(179):LOCATE J,51:PRINT CHR$(179):NEXT J
- 4640 LOCATE 20,9:PRINT CHR$(212):LOCATE 20,51:PRINT CHR$(190)
- 4650 FOR J=10 TO 50:LOCATE 20,J:PRINT CHR$(205):NEXT J
- 4660 FOR J=10 TO 19:LOCATE J,10:PRINT" "
- 4670 NEXT J
- 4800 COLOR 4,7,8
- 4810 REM ********* ENCLOSE CRYPTO TITLE *********
- 4820 LOCATE 3,28:PRINT CHR$(213)
- 4830 FOR J=29 TO 50:LOCATE 3,J:PRINT CHR$(205):NEXT J
- 4840 LOCATE 3,51:PRINT CHR$(184)
- 4850 FOR J=4 TO 4:LOCATE J,28:PRINT CHR$(179):LOCATE J,51:PRINT CHR$(179):NEXT J
- 4860 LOCATE 5,28:PRINT CHR$(212):LOCATE 5,51:PRINT CHR$(190)
- 4870 FOR J=29 TO 50:LOCATE 5,J:PRINT CHR$(205):NEXT J
- 5000 RETURN
-