home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / crypto.arc / CRYPTO.BAS (.txt) < prev   
Encoding:
GW-BASIC  |  1987-02-02  |  14.4 KB  |  498 lines

  1. 10  REM ***** CRYPTO PROGRAM BY ART REW  4/86 *******
  2. 15  REM ***** UPDATE BY JEFF EBERT 2/87 *******
  3. 20  REM VERS. 3.3  2/87
  4. 30  REM CONVERTS SENTENCES TO CRYPTOS AND/OR HELPS YOU SOLVE A CRYPTO
  5. 40  COLOR 4,7,8
  6. 50  CLS:LOCATE 4,30:GOSUB 3280:REM SETS UP F-KEYS
  7. 60  DIM Y$(40),S$(255),A(26),P$(26),Y(26)
  8. 70  REM ***********************************************
  9. 80  REM MAIN MENU
  10. 90  COLOR 1,7,8:CLS:LOCATE 4,30:PRINT"CRYPTOQUIP ANALYZER":PRINT
  11. 95  COLOR 4,7,8
  12. 100  KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
  13. 105  COLOR 4,0,8:GOSUB 4500:COLOR 20,7,8
  14. 110  LOCATE 7,9:PRINT"PICK YOUR POISON:":COLOR 12,0,8
  15. 120  LOCATE 11,12:PRINT"1.  SOLVE A CRYPTOQUIP"
  16. 130  LOCATE 13,12:PRINT"2.  CREATE A CRYPTOQUIP "
  17. 135  LOCATE 15,12:PRINT"3.  EXIT THIS PROGRAM"
  18. 140  LOCATE 17,16:PRINT"(OR YOU MAY USE THE FUNCTION"
  19. 145  LOCATE 18,17:PRINT"KEYS TO ENTER YOUR COMMANDS)"
  20. 150  COLOR 4,0,8
  21. 160  V=RND
  22. 170  A$=INKEY$
  23. 180  IF A$="2" THEN GOTO 230
  24. 190  IF A$="1" THEN GOTO 1770
  25. 195  IF A$="3" THEN GOTO 4390
  26. 200  GOTO 160
  27. 210  REM ***********************************************
  28. 220  REM CONVERT SENT TO CRYPTO
  29. 230  COLOR 11,0,8:CLS:LIN=1
  30. 240  KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
  31. 250  COLOR 27,0,8:PRINT:PRINT:PRINT"TYPE IN THE SENTENCE TO BE CONVERTED"
  32. 260  COLOR 11,0,8:PRINT:PRINT
  33. 270  PRINT"USE CAPITAL LETTERS, HIT 'RETURN/ENTER' WHEN DONE "
  34. 280  PRINT "USE THE 'BACKSPACE' KEY TO CORRECT TYPING ERRORS"
  35. 290  PRINT:PRINT:PRINT
  36. 300  FOR N=1 TO 255
  37. 310  S$(N)=INKEY$:IF LEN(S$(N))=0 THEN GOTO 310
  38. 320  IF S$(N)=CHR$(13) THEN GOTO 380:REM DONE ENTERING
  39. 330  IF S$(N)=" " THEN N=N+1:S$(N)=" ":PRINT " ";:REM TWO SPACES BETWEEN WORDS
  40. 340  IF S$(N)=CHR$(8) THEN GOSUB 1680:REM BACKSPACE
  41. 350  PRINT S$(N);
  42. 360  IF POS(X)>65 AND S$(N)=" " THEN PRINT:PRINT:PRINT:NL(LIN)=N:LIN=LIN+1
  43. 370  NEXT N
  44. 380  NC=N-1
  45. 390  NL(LIN)=N
  46. 400  LOCATE 3,1:PRINT"                                                     "
  47. 410  COLOR 27,0,8:LOCATE 20,1:PRINT "IS THIS CORRECT?  (Y/N)":COLOR 11,0,8
  48. 420  A$=INKEY$:IF A$="N" THEN GOTO 230
  49. 430  IF A$="Y" THEN GOTO 460
  50. 440  GOTO 420
  51. 450  REM ***********************************************
  52. 460  REM ROUTINE TO CHECK IF LETTERS USED TWICE
  53. 470  FOR I=1 TO 26:A(I)=0:NEXT I:REM SET COUNTS AT ZERO
  54. 480  Y=0
  55. 490  CLS:COLOR 23,0
  56. 500  PRINT:PRINT:PRINT "CHECKING TO SEE IF ALL LETTERS HAVE BEEN USED TWICE"
  57. 510  COLOR 7,0:PRINT
  58. 520  GOSUB 3200:REM COUNT LETTERS
  59. 530  FOR I=1 TO 26
  60. 540  IF A(I)=1 THEN GOTO 570
  61. 550  NEXT I
  62. 560  GOTO 600
  63. 570  COLOR 13,0,8:PRINT "THE LETTER "CHR$(I+64)" WAS NOT USED TWICE"
  64. 575  COLOR 11,0,8
  65. 580  Y=1
  66. 590  GOTO 550
  67. 600  IF Y=0 THEN GOTO 670
  68. 610  LOCATE 3,1
  69. 620  PRINT "                                                       ":COLOR 27,0,8
  70. 630  LOCATE 21,1:PRINT "DO YOU WISH TO ENTER A DIFFERENT SENTENCE?":COLOR 11,0,8
  71. 640  A$=INKEY$:IF A$="Y" THEN GOTO 210
  72. 650  IF A$="N" THEN GOTO 670
  73. 660  GOTO 640
  74. 670  REM ***********************************************
  75. 680  REM ROUTINE TO ASSIGN CHARACTERS
  76. 690  COLOR 11,0,8:CLS:LOCATE 10,20:PRINT"RANDOMLY ASSIGNING LETTERS"
  77. 700  FOR N=1 TO 26:REM ROUTINE FROM DENNIS
  78. 710  Y(N)=N
  79. 720  NEXT N
  80. 730  FOR I=26 TO 1 STEP -1
  81. 740  J=INT(RND*I)+1
  82. 750  SWAP Y(I),Y(J)
  83. 760  NEXT I
  84. 770  REM MAKE AN E,T,A,O,N NOT AN E,T,A,O, OR N
  85. 780  IF Y(1)=5 OR Y(1)=15 OR Y(1)=20 OR Y(1)=14 THEN GOTO 700
  86. 790  IF Y(5)=1 OR Y(5)=15 OR Y(5)=20 OR Y(5)=14 THEN GOTO 700
  87. 800  IF Y(14)=1 OR  Y(14)=5 OR  Y(14)=15 OR Y(14)=20 THEN GOTO 700
  88. 810  IF Y(20)=1 OR Y(20)=5 OR Y(20)=14 OR Y(20)=15 THEN GOTO 700
  89. 820  IF Y(15)=1 OR Y(15)=5 OR Y(15)=14 OR Y(15)=20 THEN GOTO 700
  90. 830  FOR N=1 TO 26
  91. 840  IF Y(N)=N THEN GOTO 700
  92. 850  NEXT N
  93. 860  FOR NN=1 TO 26
  94. 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
  95. 880  Y$(NN)="A":GOTO 1140
  96. 890  Y$(NN)="B":GOTO 1140
  97. 900  Y$(NN)="C":GOTO 1140
  98. 910  Y$(NN)="D":GOTO 1140
  99. 920  Y$(NN)="E":GOTO 1140
  100. 930  Y$(NN)="F":GOTO 1140
  101. 940  Y$(NN)="G":GOTO 1140
  102. 950  Y$(NN)="H":GOTO 1140
  103. 960  Y$(NN)="I":GOTO 1140
  104. 970  Y$(NN)="J":GOTO 1140
  105. 980  Y$(NN)="K":GOTO 1140
  106. 990  Y$(NN)="L":GOTO 1140
  107. 1000  Y$(NN)="M":GOTO 1140
  108. 1010  Y$(NN)="N":GOTO 1140
  109. 1020  Y$(NN)="O":GOTO 1140
  110. 1030  Y$(NN)="P":GOTO 1140
  111. 1040  Y$(NN)="Q":GOTO 1140
  112. 1050  Y$(NN)="R":GOTO 1140
  113. 1060  Y$(NN)="S":GOTO 1140
  114. 1070  Y$(NN)="T":GOTO 1140
  115. 1080  Y$(NN)="U":GOTO 1140
  116. 1090  Y$(NN)="V":GOTO 1140
  117. 1100  Y$(NN)="W":GOTO 1140
  118. 1110  Y$(NN)="X":GOTO 1140
  119. 1120  Y$(NN)="Y":GOTO 1140
  120. 1130  Y$(NN)="Z"
  121. 1140  NEXT NN
  122. 1150  A$="0"
  123. 1155  COLOR 10,0,8
  124. 1160  CLS:LOCATE 4,15:PRINT "DO YOU WISH TO PUT YOUR CRYPTOQUIP-"
  125. 1165  COLOR 11,0,8
  126. 1170  LOCATE 6,18:PRINT "1.  ON PAPER (PRINTER)"
  127. 1180  LOCATE 7,18:PRINT "2.  ON DISK"
  128. 1190  LOCATE 8,18:PRINT "3.  ON BOTH PAPER AND DISK"
  129. 1200  A$=INKEY$:IF A$="" THEN GOTO 1200
  130. 1210  IF A$="1" OR A$="3" THEN GOTO 1240
  131. 1220  IF A$="2" THEN GOTO 1500
  132. 1230  GOTO 1200
  133. 1240  CLS:PRINT "IF PRINTER IS ON-PRESS 'RETURN'"
  134. 1250  B$=INKEY$:IF B$=CHR$(13) THEN GOTO 1280
  135. 1260  GOTO 1250
  136. 1270  REM PRINT THE CRYPTO
  137. 1280  CLS:LPRINT:LPRINT:LPRINT:LPRINT
  138. 1290  LOCATE 4,10:PRINT "PRINTING THE CRYPTO"
  139. 1300  LIN=1
  140. 1310  FOR N=1 TO NC
  141. 1320  NN=ASC(S$(N))
  142. 1330  IF NN>64 AND NN<91 THEN NN=NN-64:GOTO 1360:REM A LETTER
  143. 1340  IF N>NL(LIN) THEN LPRINT:LPRINT:LPRINT:LIN=LIN+1
  144. 1350  LPRINT S$(N);:GOTO 1380:REM IF NOT A LETTER PRINT IT
  145. 1360  IF N>NL(LIN) THEN LPRINT:LPRINT:LPRINT:LIN=LIN+1
  146. 1370  LPRINT Y$(NN);:S$(N)=Y$(NN)
  147. 1380  NEXT N
  148. 1390  REM ***********************************************
  149. 1400  REM ROUTINE TO PRINT A KEY
  150. 1410  LPRINT:LPRINT:LPRINT:LPRINT:LPRINT:LPRINT "KEY":LPRINT:LPRINT
  151. 1420  LPRINT"ABCDEFGHIJKLMNOPQRSTUVWXYZ - IN YOUR SENTENCE IS"
  152. 1430  FOR N=1 TO 26
  153. 1440  LPRINT Y$(N);
  154. 1450  NEXT N
  155. 1460  LPRINT " - IN YOUR CRYPTOQUIP"
  156. 1470  LPRINT:LPRINT:LPRINT
  157. 1480  IF A$="1" THEN GOTO 90
  158. 1490  REM ********************************************
  159. 1500  REM TO STORE ON DISK
  160. 1510  IF A$="3" THEN GOTO 1580
  161. 1520  FOR N=1 TO NC
  162. 1530  NN=ASC(S$(N))
  163. 1540  IF NN>64 AND NN<91 THEN NN=NN-64:GOTO 1560
  164. 1550  S$(N)=CHR$(NN):GOTO 1570
  165. 1560  S$(N)=Y$(NN)
  166. 1570  NEXT N
  167. 1580  REM PRINT KEY ON SCREEN
  168. 1590  PRINT "KEY"
  169. 1600  PRINT:PRINT "ABCDEFGHIJKLMNOPQRSTUVWXYZ-IN YOUR SENTENCE IS"
  170. 1610  FOR N=1 TO 26
  171. 1620  PRINT Y$(N);
  172. 1630  NEXT N
  173. 1640  PRINT "-IN YOUR CRYPTOQUIP"
  174. 1650  GOSUB 3480:REM TO STORE
  175. 1660  GOTO 90:REM TO MENU
  176. 1670  REM ****************************************************
  177. 1680  REM SUBROUTINE TO CORRECT TYPING ERRORS
  178. 1690  N=N-2
  179. 1700  X=CSRLIN
  180. 1710  Y=POS(Q):Y=Y-2:IF Y<1 AND LIN=1 THEN LOCATE X,1:LOCATE X,1:RETURN
  181. 1720  IF Y<1 THEN Y=NL(LIN-1)-NL(LIN-2)-1:X=X-3:LIN=LIN-1
  182. 1730  LOCATE X,Y
  183. 1740  RETURN
  184. 1750  REM ****************************************************
  185. 1760  REM ****************************************************
  186. 1770  REM HELP SOLVE A CRYPTOQUIP
  187. 1780  CLS
  188. 1790  KEY (1) OFF:KEY (2) OFF:KEY (4) OFF
  189. 1800  LIN=1
  190. 1810  FOR J=1 TO 26:A(J)=0:NEXT J:REM SETS LETTER COUNT TO ZERO
  191. 1820  CLS:COLOR 28,0,8:PRINT:PRINT:PRINT:PRINT"ENTER THE CRYPTOQUIP":COLOR 11,0,8
  192. 1830  PRINT "OR USE THE 'F6' KEY TO LOAD A CRYPTO FROM DISK"
  193. 1840  PRINT:PRINT "USE THE BACKSPACE KEY TO CORRECT TYPING ERRORS"
  194. 1850  PRINT "****  USE CAPITAL LETTERS ****"
  195. 1860  PRINT:PRINT:PRINT
  196. 1865  COLOR 14,0,8
  197. 1870  FOR N=1 TO 255
  198. 1880  S$(N)=INKEY$:IF LEN (S$(N))=0 THEN GOTO 1880
  199. 1890  IF S$(N)=CHR$(13) THEN GOTO 1940:REM DONE ENTERING
  200. 1900  IF S$(N)=CHR$(32) THEN PRINT " ";:S$(N+1)=" ":N=N+1:REM ADD A SPACE
  201. 1910  IF S$(N)=CHR$(8) THEN GOSUB 1680:REM BACKSPACE
  202. 1920  PRINT S$(N);:IF POS(X)>65 AND S$(N)=" " THEN NL(LIN)=N:LIN=LIN+1:PRINT:PRINT:PRINT
  203. 1930  NEXT N
  204. 1940  NC=N-1
  205. 1950  LOCATE 6,1:PRINT "                                                        "
  206. 1960  LOCATE 4,1:PRINT "                         ":COLOR 28,0,8:LOCATE 20,1
  207. 1970  PRINT "IS THIS CORRECT?":COLOR 11,0,8
  208. 1980  A$=INKEY$:IF A$="N" THEN GOTO 1770
  209. 1990  IF A$="Y" THEN GOTO 2010
  210. 2000  GOTO 1980
  211. 2010  CLS:GOSUB 3480:REM TO STORE
  212. 2020  FOR J=1 TO 26:A(J)=0:NEXT J
  213. 2030  GOSUB 3200:REM COUNT LETTERS
  214. 2040  T1=TIMER
  215. 2050  REM ************************************************
  216. 2060  CLS:COLOR 3,0:LOCATE 1,28:PRINT "CRYPTOQUIP ANALYZER"
  217. 2061  LOCATE 1,20:PRINT CHR$(175)
  218. 2062  LOCATE 1,22:PRINT CHR$(175)
  219. 2063  LOCATE 1,24:PRINT CHR$(175)
  220. 2064  LOCATE 1,26:PRINT CHR$(175)
  221. 2065  LOCATE 1,48:PRINT CHR$(174)
  222. 2066  LOCATE 1,50:PRINT CHR$(174)
  223. 2067  LOCATE 1,52:PRINT CHR$(174)
  224. 2068  LOCATE 1,54:PRINT CHR$(174)
  225. 2070  KEY (1) ON:KEY (2) ON:KEY (4) ON
  226. 2080  FOR CLE=1 TO 26
  227. 2090  P$(CLE)=""
  228. 2100  NEXT CLE
  229. 2105  COLOR 12,0,8
  230. 2110  LIN=1
  231. 2120  LOCATE 5,2
  232. 2130  FOR I=1 TO NC
  233. 2140  PRINT S$(I);
  234. 2150  IF POS(X)>65 AND S$(I)=" " THEN NL(LIN)=I:LIN=LIN+1:PRINT:PRINT:PRINT:PRINT
  235. 2160  IF ASC(S$(I))>64 AND ASC(S$(I))<91 THEN GOTO 2220
  236. 2170  IF S$(I)=" " THEN GOTO 2220
  237. 2180  L=CSRLIN:M=L-1
  238. 2190  U=POS(X)-1
  239. 2200  IF U=0 THEN GOTO 2220
  240. 2210  LOCATE M,U:PRINT S$(I);:LOCATE L,U+1
  241. 2220  NEXT I
  242. 2230  NL(LIN)=NC
  243. 2240  REM ***********************************************
  244. 2245  COLOR 14,0,8
  245. 2250  LOCATE 17,50:PRINT "CLUE:  ";CL$
  246. 2255  COLOR 12,0,8
  247. 2260  REM ***********************************************
  248. 2270  REM ROUTINE TO DRAW LINE ABOVE LETTER INFO
  249. 2275  COLOR 6,0,8
  250. 2280  FOR I=1 TO 48
  251. 2290  LOCATE 21,I:PRINT CHR$(196);:NEXT I
  252. 2300  LOCATE 21,49:PRINT CHR$(217);
  253. 2310  FOR I=20 TO 19 STEP -1:LOCATE I,49:PRINT CHR$(179);:NEXT I
  254. 2320  LOCATE 18,49:PRINT CHR$(218);
  255. 2330  FOR I=50 TO 79:LOCATE 18,I:PRINT CHR$(196);:NEXT I
  256. 2335  COLOR 12,0,8
  257. 2340  REM ***********************************************
  258. 2350  REM PRINT LETTERS AND NUMBER USED ON SCREEN BOTTOM
  259. 2360  FOR I=65 TO 90:LOCATE 22,((I-64)*3):PRINT CHR$(I);
  260. 2370  LOCATE 23,((I-64)*3)-1:IF A(I-64)>9 THEN LOCATE 23,((I-64)*3)-2
  261. 2380  PRINT A(I-64);
  262. 2390  NEXT I
  263. 2400  REM ****************************************************
  264. 2410  REM PUT DASHES UNDER UNUSED LETTERS ON SCREEN BOTTOM
  265. 2415  COLOR 6,0,8
  266. 2420  FOR Y=1 TO 26
  267. 2430  IF A(Y)=0 THEN LOCATE 24,Y*3:PRINT "-";
  268. 2440  NEXT Y
  269. 2445  COLOR 11,0,8
  270. 2450  REM ***********************************************
  271. 2460  REM PRINT UP LETTERS NOT USED-INITIALLY
  272. 2470  LOCATE 19,50 :PRINT"LETTERS NOT USED:";
  273. 2480  LOCATE 20,50: PRINT"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  274. 2490  REM ***********************************************
  275. 2500  LOCATE 17,1:PRINT"ENTER THE CRYPTO LETTER, LETTER TO TRY          "
  276. 2510  LOCATE 19,1:PRINT "                                               "
  277. 2520  I$=INKEY$:IF I$="" THEN GOTO 2520
  278. 2530  IF ASC(I$)<65 OR ASC(I$)>90 THEN GOTO 2520
  279. 2540  LOCATE 19,1:PRINT I$;" EQUALS ";
  280. 2550  J$=I$
  281. 2560  I$=INKEY$:IF I$="" THEN GOTO 2560
  282. 2570  IF ASC(I$)=45 OR ASC(I$)=32 THEN GOTO 2590:REM DASH OR SPACE FOR A DELETION
  283. 2580  IF ASC(I$)<65  OR ASC(I$)>90 THEN GOTO 2560
  284. 2590  K$=I$
  285. 2600  PRINT I$;
  286. 2610  REM ***********************************************
  287. 2620  REM ROUTINE TO SEE IF J$ IS USED IN CRYPTO
  288. 2630  FOR CH=1 TO NC:IF S$(CH)=J$ THEN GOTO 2660
  289. 2640  NEXT CH
  290. 2650  GOTO 2500
  291. 2660  REM *********************************************
  292. 2670  IF K$="-" THEN K$=" ":IF K<>" " THEN GOTO 2890
  293. 2680  REM SEE IF LETTERS ARE USED ELSEWHERE AND REPRINT IF NOT
  294. 2690  L=ASC(J$)
  295. 2700  J=L-64:L$=P$(J)
  296. 2710  FOR L=1 TO 26
  297. 2720  IF L$=P$(L) THEN GOTO 2750
  298. 2730  NEXT L
  299. 2740  GOTO 2770
  300. 2750  IF L=J THEN GOTO 2730
  301. 2760  GOTO 2810:REM DONT REPRINT
  302. 2770  REM REPRINT AS LETTER NOT USED
  303. 2780  N=ASC(P$(J))
  304. 2790  LOCATE 20,N-15:PRINT P$(J)
  305. 2800  REM *************************************************
  306. 2810  REM ROUTINE TO SEE IF LETTER ALREADY USED AND WARN
  307. 2820  FOR N=1 TO 26
  308. 2830  IF P$(N)=K$ THEN GOTO 2860
  309. 2840  NEXT N
  310. 2850  GOTO 2890
  311. 2860  IF P$((ASC(J$)-64))=K$ THEN GOTO 2890:LETTER ALREADY ASSIGNED TO SAME THING
  312. 2870  IF K$<>" " THEN JD$=CHR$(N+64):KD$=" ":DOUBLE=1:REM DUP LETTER-CANCEL OLD
  313. 2880  REM **********************************************
  314. 2890  IF K$=" " THEN GOTO 2930
  315. 2900  I=ASC(K$):LOCATE 20,I-15:PRINT " ":GOTO 2930
  316. 2910  REM ***********************************************
  317. 2920  REM ROUTINE TO FIND THE MATCH AND PRINT
  318. 2930  LIN=1
  319. 2940  GTO=0
  320. 2950  FOR W=1 TO NC
  321. 2960  IF J$=S$(W) THEN GOTO 2990
  322. 2970  NEXT W
  323. 2975  IF DOUBLE=1 THEN DOUBLE=0:J$=JD$:K$=KD$:GOTO 2620
  324. 2980  GOTO 2500
  325. 2990  Z=W
  326. 3000  IF W<=NL(1) THEN Y=4:GOTO 3030
  327. 3010  IF W<=NL(2) THEN Y=8:GOTO 3030
  328. 3020  Y=12
  329. 3030  IF Z<=NL(1) THEN Z=Z+1:GOTO 3060
  330. 3040  IF Z<=NL(2) THEN Z=W-NL(1):GOTO 3060
  331. 3050  Z=W-NL(2)
  332. 3060  LOCATE Y,Z:COLOR 11,0,8:PRINT K$;
  333. 3065  COLOR 12,0,8
  334. 3070  IF GTO=1 THEN GOTO 2970
  335. 3080  REM ****************************************************
  336. 3090  REM ROUTINE TO REMEMBER LETTER COMBINATIONS
  337. 3100  I=ASC(J$)
  338. 3110  P$(I-64)=K$
  339. 3120  REM ****************************************************
  340. 3130  REM ROUTINE TO MATCH LETTERS ON BOTTOM OF SCREEN
  341. 3140  LOCATE 24,((I-64)*3):PRINT K$;
  342. 3160  GTO=1
  343. 3170  GOTO 2970
  344. 3180  REM ***************************************************
  345. 3190  REM ****************************************************
  346. 3200  REM ROUTINE TO COUNT LETTERS
  347. 3210  FOR LC=1 TO NC
  348. 3220  I=ASC(S$(LC))
  349. 3230  IF I<65 OR I>90 THEN GOTO 3250
  350. 3240  A(I-64)=A(I-64)+1
  351. 3250  NEXT LC
  352. 3260  RETURN
  353. 3270  REM ****************************************************
  354. 3280  REM ROUTINE TO SET UP FUNCTION KEYS
  355. 3290  KEY 1,"CLEAN":KEY 2, "TIME":KEY 3, "NEW":KEY 4,"DONE"
  356. 3300  KEY 5,"QUIT ":KEY 6,"LOAD ":KEY 7,"FILES":KEY 8,"F-KEYS"
  357. 3310  KEY 9,"DOS":KEY 10, "MAKE"
  358. 3320  ON KEY (1) GOSUB 4170:REM CLEANS SLATE
  359. 3330  ON KEY (2) GOSUB 3950:REM SHOW ELAPSED TIME
  360. 3340  ON KEY (3) GOSUB 4180:REM START NEW PUZZLE
  361. 3350  ON KEY (4) GOSUB 4040:REM DONE-SHOW TIME
  362. 3360  ON KEY (5) GOSUB 4380:REM QUIT-END
  363. 3370  ON KEY (6) GOSUB 3690:REM LOAD A CRYPTO
  364. 3380  ON KEY (7) GOSUB 4160:REM DIR
  365. 3390  ON KEY (8) GOSUB 4210:REM GIVE F-KEY DESCRIPTION
  366. 3400  ON KEY (9) GOSUB 3460:REM TO DOS
  367. 3410  ON KEY (10) GOSUB 4190:REM MAKE A CRYTPO
  368. 3420  KEY (1) ON:KEY (2) ON:KEY (3) ON:KEY (4) ON
  369. 3430  KEY (5) ON:KEY (6) ON:KEY (7) ON:KEY (8) ON:KEY (9) ON :KEY(10) ON
  370. 3440  KEY ON
  371. 3450  RETURN
  372. 3460  CLS:CLOSE:SYSTEM
  373. 3470  REM ****************************************************
  374. 3480  REM ROUTINE TO SAVE A CRYPTO
  375. 3490  PRINT:PRINT:PRINT "ENTER THE STARTING CLUE";:INPUT CL$
  376. 3500  PRINT:PRINT:PRINT "ENTER THE NAME FOR THE CRYPTO ";:INPUT N$
  377. 3510  IF N$="" THEN PRINT "TRY AGAIN":GOTO 3500
  378. 3520  ON ERROR GOTO 3660
  379. 3530  B$=""
  380. 3540  FOR CN=1 TO NC
  381. 3550  B$=B$+S$(CN)
  382. 3560  NEXT CN
  383. 3570  B$=B$+"\":B$=B$+CL$
  384. 3580  OPEN "R",1,N$+".CRP",NC+25
  385. 3590  FIELD 1,NC+25 AS C$
  386. 3600  LSET C$=B$
  387. 3610  PUT 1,1
  388. 3620  CLOSE
  389. 3630  ON ERROR GOTO 0
  390. 3640  IF A$="2" THEN RETURN 90
  391. 3650  RETURN
  392. 3660  PRINT:PRINT "DISK I/O ERROR:  TRY AGAIN"
  393. 3670  RESUME 3500
  394. 3680  REM ****************************************************
  395. 3690  REM ROUTINE TO LOAD A CRYPTO
  396. 3700  ON ERROR GOTO 3920
  397. 3710  PRINT:PRINT "ENTER THE NAME OF THE CRYPTO TO BE LOADED ";:INPUT N$
  398. 3720  IF N$="" THEN PRINT "TRY AGAIN":GOTO 3710
  399. 3730  N$=N$+".CRP"
  400. 3740  OPEN "R",1,N$,255
  401. 3750  IF LOF(1)>0 THEN GOTO 3770
  402. 3760  PRINT "       NO SUCH CRYPTO EXISTS":CLOSE:KILL N$:GOTO 3710
  403. 3770  CLS:LOCATE 10,20:PRINT "CRYPTO LOADING-PLEASE WAIT"
  404. 3780  FIELD 1,255 AS B$
  405. 3790  GET 1,1
  406. 3800  FOR J=1 TO 26:A(J)=0
  407. 3810  NEXT J
  408. 3820  FOR N=1 TO 240
  409. 3830  BU$=MID$(B$,N,1)
  410. 3840  IF BU$="\" THEN NC=N-1:GOTO 3870
  411. 3850  S$(N)=BU$
  412. 3860  NEXT N
  413. 3870  REM THE NEXT 24 IS THE CLUE
  414. 3880  CL$=MID$(B$,NC+2,24)
  415. 3890  CLOSE
  416. 3900  ON ERROR GOTO 0
  417. 3910  RETURN 2020
  418. 3920  PRINT:PRINT "DISK I/O ERROR:  TRY AGAIN"
  419. 3930  RESUME 3710
  420. 3940  REM ****************************************************
  421. 3950  REM SHOW ELAPSED TIME
  422. 3960  T2=TIMER
  423. 3970  TD=((T2-T1-3)/60)
  424. 3980  TD2=(TD-INT(TD))*60
  425. 3990  LOCATE 17,1:PRINT "                                             "
  426. 4000  LOCATE 17,1:PRINT "ELAPSED TIME: "INT(TD)" MINUTES  "INT(TD2)"SECONDS."
  427. 4010  FOR X=1 TO 1000:NEXT X
  428. 4020  RETURN 2500
  429. 4030  REM *************************************************
  430. 4040  REM DONE-DISPLAY TIME USED
  431. 4050  T2=TIMER
  432. 4060  TD=((T2-T1-3)/60)
  433. 4070  TD2=(TD-INT(TD))*60
  434. 4080  LOCATE 17,1:PRINT "                                             "
  435. 4090  LOCATE 17,1:PRINT "TIME COMPLETED: "INT(TD)" MINUTES  "INT(TD2)"SECONDS."
  436. 4100  PRINT:COLOR 27,0,8:PRINT "USE F-KEYS TO ENTER YOUR NEXT COMMAND"
  437. 4110  COLOR 11,0,8
  438. 4120  RETURN 4130
  439. 4130  A$=INKEY$:GOTO 4130
  440. 4140  REM ***************************************************
  441. 4150  REM DISPLAY FILES FROM DISK
  442. 4160  FILES "*.CRP":PRINT:PRINT "ENTER YOUR NEXT COMMAND ":PRINT:RETURN
  443. 4170  RETURN 2060:REM CLEAN SLATE
  444. 4180  RETURN 1770:REM ENTER NEW PUZZLE
  445. 4190  RETURN 230:REM MAKE A CRYTPO
  446. 4200  REM ************************************************
  447. 4210  REM F-KEY DESCRIPTION
  448. 4220  CLS:LOCATE 1,30:PRINT "CRYPTOQUIP"
  449. 4230  LOCATE 2,25:PRINT "F-KEY DESCRIPTION"
  450. 4240  PRINT:PRINT "F1-CLEAN:  CLEANS OR ERASES THE GUESSES YOU HAVE ENTERED"
  451. 4250  PRINT:PRINT "F2-TIME:  SHOWS THE ELAPSED TIME WHEN SOLVING"
  452. 4260  PRINT:PRINT "F3-NEW:  ALLOWS YOU TO ENTER OR LOAD A CRYPTO"
  453. 4270  PRINT:PRINT "F4-DONE:  HIT WHEN YOU HAVE SOLVED CRYPTO-SHOWS TIME"
  454. 4280  PRINT:PRINT "F5-QUIT:  HIT WHEN YOU WISH TO QUIT THE GAME"
  455. 4290  PRINT:PRINT "F6-LOAD:  LOADS A CRYPTOQUIP THAT HAS BEEN STORED ON DISK"
  456. 4300  PRINT:PRINT "F7-FILES:  DISPLAYS THE CRYPTOS STORED ON THE DEFAULT DISK"
  457. 4310  PRINT:PRINT "F8-F-KEYS:  THIS SCREEN"
  458. 4320  PRINT:PRINT "F9-DOS:  RETURNS YOU TO DOS"
  459. 4330  PRINT:PRINT "F10-MAKE:  ALLOWS YOU TO CONVERT A SENTENCE TO A CRYPTO"
  460. 4340  COLOR 27,0,8:PRINT "ENTER YOUR CHOICE":COLOR 11,0,8:RETURN 4350
  461. 4350  R$=INKEY$:GOTO 4350
  462. 4360  CLS
  463. 4370  REM **************************************
  464. 4380  REM END OF PROGRAM-SET UP F-KEYS AS DEFAULT
  465. 4390  CLOSE:CLS:KEY OFF
  466. 4400  KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+CHR$(34)
  467. 4410  KEY 4,"SAVE"+CHR$(34):KEY 5,"CONT"+CHR$(13):KEY 6,",LPT1:"+CHR$(13)
  468. 4420  KEY 7,"TRON"+CHR$(13):KEY 8,"TROFF"+CHR$(13):KEY 9,"KEY"
  469. 4430  KEY 10,"SCREEN 0,0,0"+CHR$(13):KEY ON
  470. 4440  NEW:END
  471. 4450  REM ***************************************
  472. 4455  REM DRAW BOX AROUND SCREEN FOR MAIN MENU
  473. 4500  LOCATE 1,1:PRINT CHR$(213)
  474. 4510  FOR J=2 TO 79:LOCATE 1,J:PRINT CHR$(205):NEXT J
  475. 4520  LOCATE 1,80:PRINT CHR$(184)
  476. 4530  FOR J=2 TO 22:LOCATE J,1:PRINT CHR$(179):LOCATE J,80:PRINT CHR$(179):NEXT J
  477. 4540  LOCATE 23,1:PRINT CHR$(212):LOCATE 23,80:PRINT CHR$(190)
  478. 4550  FOR J=2 TO 79:LOCATE 23,J:PRINT CHR$(205):NEXT J
  479. 4560  REM ******** DRAW INNER BOX **************
  480. 4565  COLOR 2,0,8
  481. 4600  LOCATE 9,9:PRINT CHR$(213)
  482. 4610  FOR J=10 TO 50:LOCATE 9,J:PRINT CHR$(205):NEXT J
  483. 4620  LOCATE 9,51:PRINT CHR$(184)
  484. 4630  FOR J=10 TO 19:LOCATE J,9:PRINT CHR$(179):LOCATE J,51:PRINT CHR$(179):NEXT J
  485. 4640  LOCATE 20,9:PRINT CHR$(212):LOCATE 20,51:PRINT CHR$(190)
  486. 4650  FOR J=10 TO 50:LOCATE 20,J:PRINT CHR$(205):NEXT J
  487. 4660  FOR J=10 TO 19:LOCATE J,10:PRINT"                                         "
  488. 4670  NEXT J
  489. 4800  COLOR 4,7,8
  490. 4810  REM ********* ENCLOSE CRYPTO TITLE *********
  491. 4820  LOCATE 3,28:PRINT CHR$(213)
  492. 4830  FOR J=29 TO 50:LOCATE 3,J:PRINT CHR$(205):NEXT J
  493. 4840  LOCATE 3,51:PRINT CHR$(184)
  494. 4850  FOR J=4 TO 4:LOCATE J,28:PRINT CHR$(179):LOCATE J,51:PRINT CHR$(179):NEXT J
  495. 4860  LOCATE 5,28:PRINT CHR$(212):LOCATE 5,51:PRINT CHR$(190)
  496. 4870  FOR J=29 TO 50:LOCATE 5,J:PRINT CHR$(205):NEXT J
  497. 5000  RETURN
  498.