home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / busi / pcode153.zip / PC-CODE2.153 < prev    next >
Text File  |  1984-06-11  |  20KB  |  714 lines

  1.      '
  2.      '
  3.      '       <<<<<  P C - C O D E 2 . 1 5 3  >>>>>
  4.      '
  5.      '
  6.      '     * * * * * * * * * * * * * * * * * * * *
  7.      '     *                                     *
  8.      '     *  COPYRIGHT 1984 by                  *
  9.      '     *           Richard Nolen Colvard     *
  10.      '     *           Freeware Distribution OK  *
  11.      '     *           Public Domain use OK      *
  12.      '     *                                     *
  13.      '     *  WARNING: This Program must be      *
  14.      '     *           COMPILED with IBM         *
  15.      '     *           BASCOM/T/O/N              *
  16.      '     *           Donot use BASICA          *
  17.      '     *                                     *
  18.      '     *  Highly recommend 8087 link libs    *
  19.      '     *                                     *
  20.      '     * * * * * * * * * * * * * * * * * * * *
  21.      '
  22.      '
  23.      DIM B#(37), C#(99), CONS!(7), CONS#(6), IX%(256)
  24.      DIM BCNT%(37), CCNT%(99), CHNO%(256), SAV%(256)
  25.      CONS!(1)=8: CONS!(2)=131072! : CONS!(3)=8192: CONS!(4)=128
  26.      CONS!(5)=2: CONS!(6)=32 : CONS!(7)=2048 : L0% = 95 : K0% = L0% * 2
  27.      CONS#(1)=1: CONS#(2)=128 : CONS#(3)=32768# : CONS#(4)=8388608#
  28.      CONS#(5)=4096 : CONS#(6)=1048576# : ACNT! = 0
  29.      M%=7: N%=17: YY# = 999991! : MU# = 16807 : MD# = 2147483647#
  30.      SAME1! = 0 : SAME2! = 0 : TOT! = 0
  31.      WH$="V1.53 PC-CODE2"
  32.      WZ$="P C   C o m p u t e r   S e c u r i t y    " + WH$
  33.      HDR$=WH$ + " ENCODED " + DATE$ + " " + TIME$
  34.      DOTS$ = STRING$(78,46)
  35.      FOR J%=1 TO 37 : BCNT%(J%)=0 : NEXT J%
  36.      FOR J%=1 TO 99 : CCNT%(J%)=0 : NEXT J%
  37.      FOR J%=1 TO 256 : CHNO%(J%)=0 : SAV%(J%)=J% : NEXT J%
  38.      YES% = ASC("Y") : NO% = ASC("N")
  39.      PRINT WZ$ : PRINT : PRINT
  40.      GOSUB 6590
  41.      PRINT : PRINT
  42.      YES% = ASC("Y") : NO% = ASC("N")
  43.      PRINT "Debug Statistics will slow down program execution"
  44.      PRINT "Do You Wish Debuging Statistics";
  45.      GOSUB 8300 : BUG% = REPLY%
  46.      PRINT : PRINT
  47.      PRINT "Do You Wish to Load KEYS from a FILE";
  48.      GOSUB 8300 : IF REPLY% = 1% THEN GOSUB 6810 : GOTO 2550
  49.      GOSUB 8190
  50.      FOR J%=10 TO 15
  51.      IF CL%= 1% THEN COLOR J%,9,1
  52.      PRINT "P C - C O D E 2 ......Textual SuperEncipherment......"
  53.      NEXT J%
  54.      IF CL% = 1% THEN COLOR 15,9,1
  55.      PRINT: PRINT : PRINT : PRINT : PRINT
  56.      YES% = ASC("N") : NO% = ASC("A")
  57.      PRINT " Enter the type of KEY desired"
  58.      PRINT "    Numeric; Number Only key ";
  59.      IF CL% = 1% THEN COLOR 13,0,0: PRINT "N" : COLOR 15,9,1
  60.      IF CL% = 0% THEN PRINT "N"
  61.      PRINT "    Alphabetic; alphanumeric ";
  62.      IF CL% = 1% THEN COLOR 13,0,0: PRINT "A" : COLOR 15,9,1
  63.      IF CL% = 0% THEN PRINT "A"
  64.      GOSUB 8300 : TY% = REPLY% : IF REPLY% = 0% THEN 3880
  65.      '
  66.      '
  67.      '
  68.      GOSUB 8190
  69.      PRINT " There are two(2) levels of Security HIGH and LOW"
  70.      PRINT " Enter H for HIGH or L for LOW";
  71.      YES% = ASC("H") : NO% = ASC("L")
  72.      GOSUB 8300 : IF REPLY% = 1% THEN 1980
  73.      '
  74.      '   ----------- LOW level of SECURITY -------------
  75.      '
  76.      PRINT " LOW Level of Security Selected"
  77.      PRINT
  78.      PRINT " You must now enter SEVEN (7) KEY numbers as indicated:"
  79.      PRINT
  80.      GOSUB 4090
  81.      GOTO 2550
  82.      '
  83.      '
  84.      '
  85. 1980 PRINT
  86.      PRINT " You have Selected HIGH security"
  87.      PRINT
  88.      PRINT " You must enter ";1+N%+M%;" key numbers between 1 and 2,147,483,646"
  89. 2020 INPUT " A(1) ? "; A#
  90.      A#=FIX(A#)
  91.      IF A# < 1 OR A# >= MD# THEN GOSUB 2400: GOTO 2020
  92.      PRINT
  93.      '
  94.      '
  95.      FOR J%=1 TO M%
  96. 2090 PRINT " B(";J%;") ";
  97.      INPUT B#(J%)
  98.      B#(J%)=FIX(B#(J%))
  99.      IF B#(J%) < 1 OR B#(J%) >= MD# THEN GOSUB 2400: GOTO 2090
  100.      NEXT J%
  101.      GOSUB 8190
  102.      '
  103.      '
  104.      FOR J%=1 TO N%
  105. 2180 PRINT " C(";J%;") ";
  106.      INPUT C#(J%)
  107.      C#(J%)=FIX(C#(J%))
  108.      IF C#(J%) < 1 OR C#(J%) >= MD# THEN GOSUB 2400: GOTO 2180
  109.      IF J% = 18 THEN GOSUB 8190
  110.      IF J% = 36 THEN GOSUB 8190
  111.      NEXT J%
  112.      '
  113.      GOTO 2550
  114.      '
  115.      '
  116.      '
  117. 2300 PRINT "[";X%;"] ";
  118.      INPUT "Enter a NUMBER between 1 and 9,999,999 "; K2!
  119.      IF K2! < 1 OR K2! > 9999999! THEN GOSUB 2400: GOTO 2300
  120.      Z!=K2!
  121.      GOSUB 2490
  122.      S!=Z!
  123.      RETURN
  124.      '
  125.      '
  126.      '   ---------- ERROR Messages ----------
  127. 2400 IF CL% = 1% THEN COLOR 4+16,0,0
  128.      PRINT " ERROR: Number RANGE must be 1 to 9,999,999"
  129.      IF CL% = 1% THEN COLOR 15,1,9
  130.      RETURN
  131.      '
  132.      '
  133.      '   ------ scaling ---------
  134. 2490 Z! = Z! / 100!
  135.      IF Z! > 1! THEN 2490
  136.      RETURN
  137.      '
  138.      '
  139.      '
  140. 2550 GOSUB 8190 : PRINT
  141.      PRINT "Possible Output files:"
  142.      PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'LPT1:'  'CON:'  'CAS1:'"
  143.      PRINT "   for FILES the input and Output must be different"
  144.      PRINT
  145.      INPUT "Enter Output file name (Full name): "; U$
  146.      IF U$ = "con:" THEN U$="CON:"
  147.      IF U$ <> "CON:" THEN OPEN "O",2,U$
  148.      PRINT: PRINT
  149.      PRINT "Possible Input files:"
  150.      PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'C:FILE.EXT'  'CON:'  'CAS1:'"
  151.      PRINT
  152.      INPUT "Enter Input FILE (full name): "; F1$
  153.      IF F1$= "con:" THEN F1$="CON:"
  154.      IF F1$ <> "CON:" THEN OPEN "I",1,F1$
  155.      PRINT
  156.      PRINT
  157.      PRINT "Encode or Decode";
  158.      YES% = ASC("E") : NO% = ASC("D")
  159.      GOSUB 8300 : EN% = REPLY%
  160.      IF EN%= 1% AND U$ <> "CON:" THEN PRINT #2, HDR$
  161.      IF EN% <> 0% THEN 2870
  162.      IF F1$="CON:" THEN 2870
  163.      LINE INPUT #1, HDR$
  164.      IF LEFT$(HDR$,14) = WH$ THEN 2870
  165.      PRINT "* * * File was never Encoded by "; WH$
  166.      PRINT "      file header = "; HDR$
  167.      END
  168. 2870 GOSUB 8190
  169.      IF CL% = 1% THEN COLOR 4+16,0,0
  170.      IF CL% = 0% THEN COLOR 7+16,0
  171.      PRINT " * * * R U N N I N G * * *"
  172.      IF CL% = 1% THEN COLOR 15,9,1
  173.      IF CL% = 0% THEN COLOR 7,0
  174.      PRINT
  175.      IF F1$="CON:" THEN PRINT "--> Terminate Console Input with use '//END'"
  176.      IF EN% = 0% AND F1$ <> "CON:" THEN PRINT "File Header: "; HDR$
  177.      PRINT
  178. 2970 IF F1$ = "CON:" THEN 3010
  179.      IF EOF(1) <> 0 THEN 3590
  180.      LINE INPUT #1, M$
  181.      GOTO 3030
  182. 3010 LINE INPUT M$
  183.      IF M$ = "//END" OR M$ = "//end" OR M$ = CHR$(26) THEN 3590
  184. 3030 L%=LEN(M$)
  185.      IF L% = 0 THEN 3390
  186.      FOR JJ%=1 TO L%
  187.      IX%(JJ%)=JJ%
  188.      NEXT JJ%
  189.      L9%=INT(L%/2)
  190.      GOSUB 5990
  191.      IF EN% = 0%  THEN GOSUB 6270
  192.      FOR J%=1 TO L%
  193.      H%=ASC( MID$(M$,J%,1))
  194.      H% = H% - 32
  195.      S#=A#
  196.      L=M%
  197.      GOSUB 3450
  198.      A#=S#
  199.      B%=O%
  200.      L=N%
  201.      S#=B#(B%)
  202.      BCNT%(B%) = BCNT%(B%) + 1%
  203.      GOSUB 3450
  204.      B#(B%)=S#
  205.      B%=O%
  206.      S#=C#(B%)
  207.      CCNT%(B%) = CCNT%(B%) + 1%
  208.      L=L0%
  209.      GOSUB 3450
  210.      C#(B%)=S#
  211.      IF EN% = 1% THEN H% = H% + O%  ELSE H% = K0% + (H% - O%)
  212.      H% = H% MOD L0%
  213.      H% = H% + 32%
  214.      CHNO%(H%) = CHNO%(H%) + 1%
  215.      MID$(M$,J%,1)=CHR$(H%)
  216.      NEXT J%
  217.      IF EN% = 1% THEN GOSUB 6270
  218. 3390 IF U$ <> "CON:" THEN PRINT #2, M$
  219.      IF U$ = "CON:" THEN PRINT M$
  220.      IF U$ = "CON:" AND F1$ = "CON:" THEN PRINT
  221.      GOTO 2970
  222.      '
  223.      '
  224.      '   -------- RANDOM NUMBER GENERATOR (1) ------
  225. 3450 S#=S# * MU#
  226.      S#=S# - (MD# * INT(S# / MD#) )
  227.      O%=1 + FIX(L * (S# / MD#) )
  228.      RETURN
  229.      '
  230.      '
  231.      '   -------- RANDOM NUMBER GENERATOR (2) ------
  232. 3520 S!=(S! + 1.352968) ^ 1.256973
  233.      S!=S! - FIX(S!)
  234.      O%=1 + FIX(L * S!)
  235.      RETURN
  236.      '
  237.      '
  238.      '
  239. 3590 PRINT
  240.      IF U$ <> "CON:" THEN CLOSE 2
  241.      IF F1$ <> "CON:" THEN CLOSE 1
  242.      '
  243.      '
  244.      ' ------- CLEAR MEMORY & STOP --------
  245.      PRINT "Wish to Save newly Computed KEYS to a FILE";
  246.      YES% = ASC("Y") : NO% = ASC("N")
  247.      GOSUB 8300 : IF REPLY% = 1% THEN GOSUB 7040
  248.      PRINT "Wish to Save Log Statistics for keys used";
  249.      GOSUB 8300 : IF REPLY% = 1% THEN GOSUB 7690
  250.      Z!=0: A#=0# : M$=SPACE$(128): S! = 0 : S# = 0#
  251.      FOR J%=1 TO M%
  252.      B#(J%)=0# : BCNT%(J%)=0%
  253.      NEXT J%
  254.      FOR J%=1 TO N%
  255.      C#(J%)=0# : CCNT%(J%)=0%
  256.      NEXT J%
  257.      FOR J%=1 TO 256
  258.      IX%(J%)=0%
  259.      NEXT J%
  260.      IF CL% = 1% THEN COLOR 7,0,0
  261.      IF IBM% = 1% THEN CLS
  262.      END
  263.      '
  264.      '   ----------- ALPHANUMERIC KEYS -----------
  265.      '
  266. 3880 GOSUB 8190
  267.      PRINT " There are two(2) levels of Security HIGH and LOW"
  268.      PRINT " Enter H for HIGH or L for LOW ";
  269.      YES% = ASC("H") : NO% = ASC("L")
  270.      GOSUB 8300 : IF REPLY% = 1% THEN 5190
  271.      '
  272.      '   ----------- LOW level of SECURITY -------------
  273.      '
  274.      PRINT " LOW Level of Security Selected"
  275.      PRINT
  276.      PRINT " You must now enter SEVEN (7) key Alphanumerics as indicated:"
  277.      PRINT
  278.      GOSUB 4090
  279.      GOTO 2550
  280.      '
  281.      '
  282.      '   ---------- KEY 1 ---------
  283. 4090 X%=1% : M% = 11% : N% = 47%
  284.      IF TY% = 0% THEN GOSUB 5340    ' Alpha
  285.      IF TY% = 1% THEN GOSUB 2300    ' Numeric
  286.      GOSUB 3520
  287.      GOSUB 3520
  288.      A#=FIX((1# - S!) * MD#)
  289.      '
  290.      '
  291.      '   ---------- KEY 2 ----------
  292.      X%=2
  293.      IF TY% = 0% THEN GOSUB 5340    ' Alpha
  294.      IF TY% = 1% THEN GOSUB 2300    ' Numeric
  295.      GOSUB 3520
  296.      L=4
  297.      FOR J%=1 TO M%
  298.      GOSUB 3520
  299.      O2% = O%
  300.      FOR K%=1 TO O2%
  301.      GOSUB 3520
  302.      NEXT K%
  303.      GOSUB 3520
  304.      B#(J%)=FIX((1# - S!) * MD#)
  305.      NEXT J%
  306.      '
  307.      '
  308.      '   ---------- KEY 3 -----------
  309.      X%=3
  310.      IF TY% = 0% THEN GOSUB 5340    ' Alpha
  311.      IF TY% = 1% THEN GOSUB 2300    ' Numeric
  312.      GOSUB 3520
  313.      L=3
  314.      FOR J%=1 TO N%
  315.      GOSUB 3520
  316.      O2% = O%
  317.      FOR K%=1 TO O2%
  318.      GOSUB 3520
  319.      NEXT K%
  320.      GOSUB 3520
  321.      C#(J%)=FIX((1# - S!) * MD#)
  322.      NEXT J%
  323.      '
  324.      '
  325.      '   ---------- KEY 4 -------------
  326.      X%=4
  327.      IF TY% = 0% THEN GOSUB 5340    ' Alpha
  328.      IF TY% = 1% THEN GOSUB 2300    ' Numeric
  329.      GOSUB 3520
  330.      L=INT(N%/2)
  331.      GOSUB 3520
  332.      K%=O% + 1
  333.      L=N%
  334.      FOR J%=1 TO K%
  335.      GOSUB 3520
  336.      L%=O%
  337.      GOSUB 3520
  338.      C#(L%)=FIX(S! * MD#)
  339.      NEXT J%
  340.      '
  341.      '
  342.      '   ----------- KEY 5 ---------------
  343.      X%=5
  344.      IF TY% = 0% THEN GOSUB 5340       ' Alpha
  345.      IF TY% = 1% THEN GOSUB 2300       ' Numeric
  346.      GOSUB 3520
  347.      L=INT(M%/2)
  348.      GOSUB 3520
  349.      K%=O% + 1
  350.      L=M%
  351.      FOR J%=1 TO K%
  352.      GOSUB 3520
  353.      L%=O%
  354.      GOSUB 3520
  355.      B#(L%)=FIX(S! * MD#)
  356.      NEXT J%
  357.      '
  358.      '
  359.      '   ------------ KEY 6 ---------------
  360.      X%=6
  361.      IF TY% = 0% THEN GOSUB 5340       ' Alpha
  362.      IF TY% = 1% THEN GOSUB 2300       ' Numeric
  363.      GOSUB 3520
  364.      L=M%
  365.      FOR J%=1 TO M%
  366.      GOSUB 3520
  367.      D#=B#(O%)
  368.      B#(O%)=B#(J%)
  369.      B#(J%)=D#
  370.      NEXT J%
  371.      '
  372.      '
  373.      '   ------------- KEY 7 --------------
  374.      X%=7
  375.      IF TY% = 0% THEN GOSUB 5340   ' Alpha
  376.      IF TY% = 1% THEN GOSUB 2300   ' Numeric
  377.      GOSUB 3520
  378.      L=N%
  379.      FOR J%=1 TO N%
  380.      GOSUB 3520
  381.      D#=C#(O%)
  382.      C#(O%)=C#(J%)
  383.      C#(J%)=D#
  384.      NEXT J%
  385.      '
  386.      GOSUB 7440  ' Display generated keys
  387.      '
  388.      RETURN
  389.      '
  390.      '   ---------- end of LOW security ------------
  391.      '
  392.      '
  393. 5190 GOSUB 8190
  394.      PRINT " You must enter 3 long PASSWORDS of alphanumeric data"
  395.      X%=1
  396.      GOSUB 5530
  397.      X%=M%
  398.      GOSUB 5530
  399.      X%=N%
  400.      GOSUB 5530
  401.      '
  402.      GOSUB 7440  ' Display generated keys
  403.      '
  404.      GOTO 2550
  405.      '
  406.      '
  407.      '
  408.      '   --------- alphanumeric password to RND ------------
  409. 5340 PRINT "[";X%;"] Enter Password: ";
  410.      LINE INPUT P$
  411.      L%=LEN(P$)
  412.      IF L% < 6% THEN PRINT "  *** password too short; not > 5": GOTO 5340
  413.      IF X%=1 THEN K# = 0
  414.      FOR J%=1 TO L%
  415.      C%=ASC( MID$(P$,J%,1) )
  416.      LL%=J%
  417.      IF LL% > 7% THEN LL% = LL% MOD 7% : LL% = LL% + 1%
  418.      K# = K# + (CONS!(LL%) * C%)
  419.      NEXT J%
  420.      Z! = K#
  421.      GOSUB 2490
  422.      K# = K# - (YY# * INT( K# / YY#))
  423.      S! = Z!
  424.      RETURN
  425.      '
  426.      '
  427.      '
  428.      '   ------- alphanumeric to DECIMAL --------
  429. 5530 X2%=X% * 6
  430.      X3% = X2% : X4% = 0
  431.      IF X%=1 THEN PRINT " (A) Enter Password of at least (MIN) ";X2%;" Chars"
  432.      IF X%=M% THEN PRINT " (B) Enter Password of at least (MIN) ";X2%;" Chars"
  433.      IF X2% > 60 THEN X3% = 60: X4% = X2% - 60 : GOSUB 8190
  434.      IF X%=N% THEN PRINT " (C) Enter Password of at least (MIN) ";X2%;" Chars"
  435.      W1$="123456789012345678901234567890123456789012345678901234567890"
  436.      W2$="         1         2         3         4         5         6"
  437.      W3$=".........+.........+.........+.........+.........+.........+"
  438.      W4$="         7         8         9        10        11        12"
  439.      PRINT: PRINT
  440.      PRINT "         "; LEFT$(W2$,X3%)
  441.      PRINT "         "; LEFT$(W1$,X3%)
  442.      PRINT "         "; LEFT$(W3$,X3%)
  443.      PRINT "Password:";
  444.      LINE INPUT P$
  445.      PRINT
  446.      IF X4% = 0 THEN 5740
  447.      PRINT: PRINT
  448.      PRINT "         "; LEFT$(W4$,X4%)
  449.      PRINT "         "; LEFT$(W1$,X4%)
  450.      PRINT "         "; LEFT$(W3$,X4%)
  451.      PRINT "Password:";
  452.      LINE INPUT P2$
  453.      P$ = P$ + P2$
  454. 5740 L%=LEN(P$)
  455.      IF L% < X2% THEN PRINT "   *** Password TOO SHORT reenter ": GOTO 5530
  456.      T%=INT(L%/X%)
  457.      K#=0
  458.      FOR K%=1 TO X%
  459.      P2$=LEFT$(P$,T%)
  460.      L%=L%-T%
  461.      IF L% < 1 THEN 5830
  462.      P$=RIGHT$(P$,L%)
  463. 5830 FOR J%=1 TO T%
  464.      LL%=J%
  465.      IF LL% > 6% THEN LL% = LL% MOD 6% : LL% = LL% + 1%
  466.      C% = ASC( MID$(P2$,J%,1) )
  467.      K# =  K# + (CONS#(LL%) * C%)
  468.      NEXT J%
  469.      IF X%=1 THEN A#=K#
  470.      IF X%=M% THEN B#(K%) = K#
  471.      IF X%=N% THEN C#(K%) = K#
  472.      K# = K# - (MD# * INT( K# / MD# ))
  473.      NEXT K%
  474.      RETURN
  475.      '
  476.      '
  477.      '   ------ TRANSPOSITION -------
  478.      '
  479. 5990 FOR JJ%=1 TO L%
  480.      L=M%
  481.      S#=A#
  482.      GOSUB 3450
  483.      A#=S#
  484.      B%=O%
  485.      L=N%
  486.      S#=B#(B%)
  487.      GOSUB 3450
  488.      B#(B%)=S#
  489.      B%=O%
  490.      S#=C#(B%)
  491.      L=L%
  492.      GOSUB 3450
  493.      C#(B%)=S#
  494.      IS% = IX%(JJ%)
  495.      IX%(JJ%) = IX%(O%)
  496.      IX%(O%) = IS%
  497.      NEXT JJ%
  498.      IF BUG% = 0% THEN 6230
  499.      FOR JJ%=1 TO L% : B% = IX%(JJ%)
  500.      IF SAV%(JJ%) = B% THEN SAME1! = SAME1! + 1
  501.      SAV%(JJ%) = B%
  502.      IF B% = JJ% THEN SAME2! = SAME2! + 1
  503.      NEXT JJ%
  504.      TOT! = TOT! + L%
  505. 6230 RETURN
  506.      '
  507.      '
  508.      '
  509. 6270 FOR JJ%=1 TO L9%
  510.      G1%=IX%(JJ%)
  511.      G2%=IX%(JJ%+L9%)
  512.      G1$=MID$(M$,G1%,1)
  513.      G2$=MID$(M$,G2%,1)
  514.      MID$(M$,G1%,1)=G2$
  515.      MID$(M$,G2%,1)=G1$
  516.      NEXT JJ%
  517.      RETURN
  518.      '
  519.      '
  520.      '
  521.      ' ------ Help / Instructions -----
  522. 6400 OPEN "I",3,"PC-CODE2.DOC"
  523. 6420 GOSUB 8190
  524.      JJ%=1
  525. 6450 IF EOF(3) <> 0 THEN 6540
  526.      LINE INPUT #3, M$
  527.      PRINT M$
  528.      JJ%=JJ%+1
  529.      IF JJ% < 19 THEN 6450
  530.      PRINT "======================="
  531.      PRINT "Wish More Documentation";
  532.      YES% = ASC(" ") : NO% = ASC("N")
  533.      GOSUB 8300 : IF REPLY% = 1% THEN 6420 ELSE 6550
  534. 6540 GOSUB 7230   ' Pause
  535. 6550 GOSUB 8190
  536.      CLOSE 3
  537.      RETURN
  538.      '
  539.      '
  540.      '
  541. 6590 PRINT: PRINT
  542.      YES% = ASC("Y") : NO% = ASC("N")
  543.      PRINT "Does your Terminal Support IBM Clear (CLS) screen";
  544.      GOSUB 8300 : IBM% = REPLY%
  545.      PRINT : PRINT
  546.      PRINT "Do you have COLOR installed on your PC";
  547.      GOSUB 8300 : CL% = REPLY%
  548.      IF CL%= 0% THEN 6700
  549.      SCREEN 0,1
  550.      COLOR 15,9,1
  551.      GOSUB 8190
  552. 6700 PRINT : PRINT
  553.      PRINT "Do you wish some instructions/Help";
  554.      GOSUB 8300 : IF REPLY% = 1% THEN GOSUB 6400
  555.      RETURN
  556.      '
  557.      '
  558.      '
  559. 6810 INPUT "Enter the Fully Qualified Input Key FILE name: "; F$
  560.      OPEN "I", 5, F$
  561.      LINE INPUT #5, P$
  562.      IF LEFT$(P$,1) <> "*" THEN A#=VAL(P$): GOTO 6880
  563.      INPUT #5, T%, M%, N%
  564.      INPUT #5, A#
  565. 6872 IF T% <> 1 THEN PRINT "ERROR: Bad Key File ": END
  566. 6880 A# = ABS( FIX( A# ) )
  567.      IF A# = 0 THEN T% = 99 : GOTO 6872
  568.      FOR J%=1 TO M% : INPUT #5, B#(J%)
  569.      B#(J%) = ABS( FIX( B#(J%) ) ) : NEXT J%
  570.      FOR J%=1 TO N% : INPUT #5, C#(J%)
  571.      C#(J%) = ABS( FIX( C#(J%) ) ) : NEXT J%
  572.      IF EOF(5) <> 0 THEN PRINT "*** ERROR *** Reading Key File": END
  573.      T% = M% + N% + 1
  574.      PRINT "*** Loaded "; T% ;" Keys from "; F$; " Successfully"
  575.      GOSUB 7230     ' Pause
  576.      CLOSE 5
  577.      RETURN
  578.      '
  579.      '
  580.      '
  581. 7040 INPUT "Enter the Fully Qualified Output Key File Name: "; F$
  582.      OPEN "O", 5, F$
  583.      PRINT #5, "* HDR PC-CODE2 saved KEYS "
  584.      WRITE #5, 1, M%, N%
  585.      PRINT #5, A#
  586.      FOR J%=1 TO M% : PRINT #5, B#(J%)
  587.      NEXT J%
  588.      FOR J%=1 TO N% : PRINT #5, C#(J%)
  589.      NEXT J%
  590.      PRINT #5, "* Keys computed on " + DATE$ + " " + TIME$ + " " + WH$
  591.      T% = M% + N% + 1
  592.      PRINT "*** Saved "; T% ;" Keys to "; F$; " Successfully"
  593.      GOSUB 7230      ' Pause
  594.      CLOSE 5
  595.      RETURN
  596.      '
  597.      '
  598.      '
  599.      ' ------- Delay function -------
  600. 7230 PRINT : PRINT
  601.      PRINT " <PAUSE> Press Enter to Continue ";
  602.      LINE INPUT Z$
  603.      RETURN
  604.      '
  605.      '
  606.      '
  607.      ' ----- Generated Key Seeds display ------
  608. 7440 GOSUB 8190
  609.      PRINT "The following Numeric Keys/Seeds were generated:"
  610.      PRINT : PRINT
  611.      P$=SPACE$(16)
  612.      PRINT "     ( A ) :    "; A#
  613.      PRINT
  614.      PRINT "     ( B ) :    ";
  615.      FOR J%=1 TO M%
  616.      PRINT LEFT$(STR$(B#(J%))+P$,16);
  617.      NEXT J%
  618.      PRINT : PRINT
  619.      PRINT "     ( C ) :    ";
  620.      FOR J%=1 TO N%
  621.      PRINT LEFT$(STR$(C#(J%))+P$,16);
  622.      NEXT J%
  623.      PRINT: PRINT
  624.      PRINT " --- To Print this screen depress 'Shift PrtSc' ---"
  625.      GOSUB 7230   ' Pause
  626.      RETURN
  627.      '
  628.      '
  629.      '
  630.      '
  631.      '
  632.      ' ---- Save Log Statistics for Keys used -----
  633. 7690 PRINT "Enter Stat Log File Name or 'LPT1:' or default of blank"
  634.      F$ = " "
  635.      INPUT "Enter Log File Name: "; F$
  636.      IF LEN(F$)=0 OR LEFT$(F$,1)=" " THEN F$="PC-STAT2.LOG"
  637.      OPEN "O", 6, F$
  638.      FOR J%=1 TO M% : ACNT! = ACNT! + BCNT%(J%) : NEXT J%
  639.      PRINT #6, " "
  640.      PRINT #6, " <<<<< PC-CODE2 Statistics for Keys Used >>>>>"
  641.      PRINT #6, " " : PRINT #6, " "
  642.      PRINT #6, " Date and Time Stamp        = "; DATE$ + " " + TIME$
  643.      PRINT #6, " Keys Setup (B) size        = "; M%
  644.      PRINT #6, " Keys Setup (C) size        = "; N%
  645.      PRINT #6, " Total Characters processed = "; ACNT!
  646.      PRINT #6, " "
  647.      PRINT #6, " ----- Key Utilitization/Balance -----"
  648.      PRINT #6, " " : PRINT #6, " "
  649.      PRINT #6, " * For Key Group (B)"
  650.      PRINT #6, " "
  651.      PRINT #6, "    KEY      Count"
  652.      FOR J%=1 TO M%
  653.      PRINT #6, USING "    ###    ####### "; J%, BCNT%(J%)
  654.      NEXT J%
  655.      PRINT #6, " " : PRINT #6, " "
  656.      PRINT #6, " * For Key Group (C)"
  657.      PRINT #6, " "
  658.      PRINT #6, "    KEY      Count"
  659.      FOR J%=1 TO N%
  660.      PRINT #6, USING "    ###    ####### "; J%, CCNT%(J%)
  661.      NEXT J%
  662.      PRINT #6, " " : PRINT #6, " "
  663.      PRINT #6, " * Output Character Set Statistics:"
  664.      PRINT #6, " "
  665.      PRINT #6, "    CHR$    Char     Count"
  666.      PRINT #6, "    Num     ----     Occur"
  667.      FOR J%=0 TO 255
  668.      IF CHNO%(J%)=0 THEN 8040
  669.      IF J% > 31 AND J% < 127 THEN P$=CHR$(J%) ELSE P$=" "
  670.      PRINT #6, USING "    ####      !    ####### "; J%, P$, CHNO%(J%)
  671. 8040 NEXT J%
  672.      PRINT #6, " "
  673.      IF BUG% = 0% THEN 8130
  674.      PRINT #6, " ": PRINT #6, " * Debuging Statistics": PRINT #6, " "
  675.      PRINT #6, " "
  676.      PRINT #6, " Transposition count: "; TOT!, " 100%"
  677.      PRINT #6, "      coincidences T1 "; SAME1!, 100 * (SAME1!/TOT!);"%"
  678.      PRINT #6, "      coincidences T2 "; SAME2!, 100 * (SAME2!/TOT!);"%"
  679.      PRINT #6, " ": PRINT #6, " "
  680. 8130 PRINT #6, " *** END of STATISTICAL LOG ***"
  681.      PRINT " *** Saved Stat Log file to "; F$; " ***"
  682.      CLOSE 6
  683.      RETURN
  684.      '
  685.      '
  686.      '   C L E A R     S C R E E N
  687. 8190 IF IBM% = 1% THEN CLS ELSE PRINT : PRINT DOTS$ : PRINT
  688.      PRINT WZ$
  689.      PRINT : PRINT
  690.      RETURN
  691.      '
  692.      '
  693.      '
  694.      '
  695.      '    Y E S  /   N O     Prompt Subroutine
  696. 8300 IF YES% <> 32% THEN PRINT " (";CHR$(YES%);" or ";CHR$(NO%);") ";
  697.      IF YES% = 32% THEN PRINT " ( ";CHR$(NO%);" or <CR> ) ";
  698.      Z$=" "
  699.      INPUT Z$
  700.      IF Z$ = "" AND YES% = 32 THEN REPLY% = 1% : GOTO 8400
  701.      IF Z$ = "" THEN 8300
  702.      REPLY% = 99%
  703.      ANS% = ASC(Z$)
  704.      IF ANS% > 90% THEN ANS% = ANS% - 32%
  705.      IF ANS% = YES% THEN REPLY% = 1%
  706.      IF ANS% = NO%  THEN REPLY% = 0%
  707.      IF REPLY% <> 99% THEN 8400
  708.      PRINT "    ERROR: Re-enter as follows: ";
  709.      GOTO 8300
  710. 8400 RETURN
  711.      '
  712.      '
  713.      ' END
  714.