home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib42b.dsk / CRYPTO.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  64 lines

  1. 10  REM  ****************************
  2. 20  REM  *        CRYPTO            *
  3. 30  REM  *   BY SIDNEY A. POWERS    *
  4. 40  REM  *                          *
  5. 50  REM  *    COPYRIGHT 1992 BY     *
  6. 60  REM  *  MINDCRAFT PUBLISHING CO.*
  7. 70  REM  ****************************
  8. 80  REM 
  9. 90  DIM CN(255),S(26),B(96),C(26),MM$(26): GOTO 190: REM   SET UP ARRAYS FOR COUNTING OCCURRENCES
  10. 100  FOR I = 1 TO L:CN(I) =  ASC( MID$ (C$,I,1)): NEXT I: PRINT P$: FOR I = 1 TO 96: IF (I <65)  OR (I >90)  THEN B(I) = I: GOTO 120
  11. 110 B(I) = 42
  12. 120  NEXT I: FOR I = 1 TO L:K = CN(I): ON K <65  OR K >90 GOTO 130:K = K -64:S(K) = S(K) +1:K = 42: REM  SORT OCCURRENCES
  13. 130  NEXT I: FOR I = 1 TO 26:C(I) = I: NEXT I:N = 26:M = 1
  14. 140 M = 3 *M +1: ON M <N GOTO 140
  15. 150 M = (M -1)/3: IF M <1  THEN  RETURN 
  16. 160  FOR J = M +1 TO N:I = J -M:D = S(J):E = C(J)
  17. 170  IF S(I) <D  THEN S(I +M) = S(I):C(I +M) = C(I):I = I -M: ON I >0 GOTO 170
  18. 180 S(I +M) = D:C(I +M) = E: NEXT J: GOTO 150: REM  STRING MESSAGES
  19. 190 MS$(6) = " ?= ":MS$(1) = MS$(6) +"E":MS$(2) = MS$(6) +"T":MS$(3) = MS$(6) +"O":MS$(4) = MS$(6) +"A":MS$(5) = MS$(6) +"N":MS$(6) = MS$(6) +"I":MS$(7) = " ":M8$ = "PRESS <CR> WHEN COMPLETE"
  20. 200 M9$ = "IS THIS CRYPTOGRAM CORRECT ?"
  21. 210  HOME : VTAB 5: HTAB 12: PRINT "** CRYPTO **": PRINT : PRINT "THIS PROGRAM HELPS CREATE AND SOLVE": PRINT "CRYPTOGRAMS. PLEASE SEE THE NIBBLE": PRINT "ARTICLE FOR INFORMATION ON USING IT."
  22. 220  PRINT : HTAB 5: PRINT "COPYRIGHT 1992 BY MINDCRAFT": VTAB 18: INPUT "PRESS <RETURN> TO BEGIN:";XX$: REM  INITIALIZATION
  23. 230 I1 = 8:I2 = 10:I3 = 5:I4 = 13:I5 = 1:I6 = 3:I7 = 22:P$ = "***************************************"
  24. 240  HOME : REM  MAIN MENU
  25. 250  VTAB I1: HTAB I2: INVERSE : PRINT  CHR$(91)"1] ENTER CRYPTOGRAM ": HTAB I2: PRINT  CHR$(91)"2] RECALL CRYPTOGRAM": HTAB I2: PRINT  CHR$(91)"3] SOLVE CRYPTOGRAM ": HTAB I2: PRINT  CHR$(91)"4] END              "
  26. 260  VTAB I4: HTAB I4: PRINT "YOUR CHOICE ? ";: GET Z$:Z =  VAL(Z$): PRINT Z: NORMAL : IF Z = 1  THEN  GOSUB 290: GOTO 240
  27. 270  ON Z = 2 GOTO 400: IF Z = 4  THEN  END 
  28. 275  IF Z = 3  AND C$ < >""  THEN 450
  29. 277  IF Z = 3  THEN  PRINT  CHR$(7)
  30. 280  GOTO 260: REM  SET UP FILE
  31. 290  HOME : VTAB I1: HTAB I1: INVERSE : PRINT "ENTER NAME OF CRYPTO FILE ": NORMAL : INPUT "";N$:D$ =  CHR$(4): PRINT D$"OPEN CRY."N$: PRINT D$"CLOSE CRY."N$: PRINT D$"DELETE CRY."N$: PRINT D$"OPEN CRY."N$: ONERR  GOTO 600
  32. 300  HOME : INVERSE : PRINT "ENTER CRYPTOGRAM "N$: VTAB I6: HTAB I1: FLASH : PRINT "WARNING !";: NORMAL : PRINT "DO NOT USE COMMAS": NORMAL : VTAB I3: HTAB I5: FOR I = 1 TO 200: PRINT  CHR$(95);: NEXT I: PRINT : PRINT : HTAB I1
  33. 310  PRINT M8$
  34. 320  VTAB I3: HTAB I5: INPUT "";C$:L =  LEN(C$):T = 40
  35. 330  ON L < = T GOTO 380
  36. 340 A =  ASC( MID$ (C$,T,1)): IF A = 32  THEN T = T +40: GOTO 330
  37. 350 U = T -1:C = 1
  38. 360 A =  ASC( MID$ (C$,U,1)): IF A < >32  THEN C = C +1:U = U -1: GOTO 360
  39. 370 L$ =  LEFT$(C$,U):S$ = "": FOR I = 1 TO C:S$ = S$ +" ": NEXT I:R$ =  RIGHT$(C$,L -U):C$ = L$ +S$ +R$:L = L +C: GOTO 340
  40. 380  VTAB 22: HTAB I5: INVERSE : PRINT M9$;: NORMAL : GET Z$: PRINT Z$: ON Z$ < >"Y" GOTO 320: PRINT D$"WRITE CRY."N$: PRINT C$
  41. 390  PRINT D$"CLOSE CRY."N$: RETURN : REM  REVIEW/EDIT EXISTING FILE
  42. 400  HOME : VTAB 12: INVERSE : INPUT "ENTER NAME OF CRYPTO FILE ";N$: NORMAL : ONERR  GOTO 600
  43. 410 D$ =  CHR$(4): PRINT D$;"OPEN CRY.";N$: PRINT D$;"READ CRY.";N$: INPUT C$
  44. 420  PRINT D$"CLOSE CRY."N$
  45. 430  HOME : GOTO 450
  46. 440  PRINT D$"OPEN CRY."N$: PRINT D$"WRITE CRY."N$: PRINT C$: PRINT D$"CLOSE CRY."N$: GOTO 430
  47. 450  HOME : INVERSE : PRINT C$: NORMAL :L =  LEN(C$): GOSUB 100: GOSUB 550: ONERR  GOTO 600
  48. 460  REM  START OF ANALYSIS
  49. 470  VTAB 23: INVERSE : PRINT "ASSIGNMENTS ? = ";: NORMAL : HTAB 21: PRINT "CTRL-F FOR FREQ TBL": PRINT "CTRL-M FOR MESSAGE";: HTAB 21: PRINT "SPACE BAR FOR MENU";: VTAB 23: HTAB 14: GET Z1$: PRINT Z1$:V =  ASC(Z1$)
  50. 480  ON V <65  OR V >90 GOTO 540: VTAB 23: INVERSE : PRINT "ASSIGNMENTS ? = ";: NORMAL : HTAB 14: PRINT Z1$;: HTAB 21: PRINT "CTRL-F FOR FREQ TBL": VTAB 23: HTAB 16: GET Z2$: PRINT Z2$:W =  ASC(Z2$):B(V) = W: FOR K = 64 TO 90
  51. 490  ON K = V GOTO 500: IF B(K) = B(V)  THEN B(K) = 42
  52. 500  NEXT K:O$ = "": FOR I = 1 TO L:O$ = O$ + CHR$(B(CN(I))): NEXT I
  53. 510  HOME : INVERSE : PRINT C$: NORMAL : PRINT P$: PRINT : PRINT :E$ = "":F$ = "": FOR I = 1 TO 26:E$ = E$ + CHR$(I +64): IF B(I +64) = 42  THEN J = 45
  54. 520  IF B(I +64) < >42  THEN J = I +64
  55. 530 F$ = F$ + CHR$(B(J)): NEXT I: PRINT O$: PRINT : PRINT : INVERSE : PRINT E$;: NORMAL : PRINT " CRYPTO": INVERSE : PRINT F$;: NORMAL : PRINT " PLAIN TEXT": NORMAL : GOTO 460
  56. 540  HOME : ON V = 6 GOTO 550: IF V = 13  THEN  FOR K = 64 TO 90: GOTO 490
  57. 545  GOTO 250: REM  FREQUENCY ANALYSIS OUTPUT
  58. 550  PRINT : HTAB (12): INVERSE : PRINT "FREQUENCY ANALYSIS": NORMAL : PRINT :J = 1: FOR I = 1 TO 26: IF I = 1  THEN MM$(I) = MS$(1): GOTO 590
  59. 560  IF I >1  THEN  IF S(I) < >S(I -1)  THEN J = J +1
  60. 570  IF J <7  THEN MM$(I) = MS$(J)
  61. 580  IF J =  >7  THEN MM$(I) = MS$(7)
  62. 590  NEXT I: FOR I = 1 TO 13: PRINT  TAB( 7)S(I);: HTAB 11: PRINT  CHR$(C(I) +64)MM$(I) TAB( 27)S(I +13);: HTAB 30: PRINT  CHR$(C(I +13) +64)MM$(I +13): NEXT I: PRINT : PRINT P$: PRINT : PRINT : GOTO 470
  63. 600  PRINT "ERROR HAS OCCURRED... ERR#:"; PEEK(222): END 
  64. 610  PRINT "ERR"; PEEK(222): END