100 REM *** ARISTED›110 REM ›120 REM by David A. Peterson›130 REM ›140 REM 6/17/1987›150 REM ›160 REM Encipher/Decipher›165 REM ARISTOCRAT›170 REM PATRISTOCRAT›175 REM CAESAR›180 REM ›200 REM *** Dimension Variables›205 DIM CT$(500),HT$(500),CTL(1)›210 DIM PT$(500),PTL(1),CK$(35),PK$(35)›215 DIM KW$(50),Y(1),CI$(120)›220 DIM PA$(26),CA$(26),F(1),G(1)›225 DIM DR$(30),X(1),Z(1),ET(1)›245 DIM NA$(26),AM(26),KH$(26)›250 DIM S$(1):S$=" "›260 NA$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"›265 DIM CL$(37):CL$=" ":CL$(37)=CL$:CL$(2)=CL$›270 PA$=NA$:CA$=NA$›280 PK$="*":CK$=PK$›290 GOTO 15500›1400 REM *** View file›1410 ? CHR$(125)›1420 ? :? "Plaintext- ";PT$›1430 ? :? "Ciphertext- ";CT$›1460 ? :? ," ðòåóó ÓÔÁÒÔ æïò íåîõ "›1470 IF PEEK(53279)=6 THEN 9000›1490 GOTO 1470›2000 REM *** Keyword Menu›2005 PRINT CHR$(125)›2010 PRINT ," Ëåù÷ïòä íåîõ "›2015 ? :? "1. Menu 6. Print"›2020 ? :? "2. Key PA$ 7. Key CA$"›2025 ? :? "3. Shift PA$ 8. Shift CA$"›2030 ? :? "4. Reverse PA$ 9. Reverse CA$"›2035 ? :? "5. Reset PA$ 10. Reset CA$"›2040 POSITION 2,14:? CL$:? CL$:? CL$:? CL$:? CL$›2045 POSITION 2,14:? "PK$- ";PK$:? "CK$- ";CK$:? :? "Plain- ";PA$:? :? "Cipher- ";CA$›2050 REM *** Input command›2055 X=0:POSITION 2,21:? CL$:? CL$›2060 POSITION 2,21:? " Éîðõô á îõíâåò  ";:INPUT X›2070 IF X=1 THEN GOTO 9000›2080 ON X GOSUB 9000,2300,2800,2550,2700,2200,2400,2900,2500,2750›2090 GOTO 2040›2100 REM *** Input keyword›2120 POSITION 2,21:? CL$:? CL$›2130 POSITION 2,21:? " Õóå ìåôôåòó ïîìù ­ Éîðõô ëåù  ":INPUT KW$›2140 RETURN ›2150 FOR MM=1 TO 26:AM(MM)=0:NEXT MM:RETURN ›2160 POSITION 2,21:? " Õóå ¼¾ ëåùó ôï óèéæô áìðèáâåô ":? " ¨¯© ôï åîä "›2170 RETURN ›2200 REM *** Print key + Alphabets›2210 LPRINT :LPRINT :LPRINT "Plain Alphabet Key -",PK$›2215 LPRINT :LPRINT "Cipher Alphabet Key -",CK$›2220 LPRINT :LPRINT :LPRINT "Plain Alphabet -",PA$›2230 LPRINT :LPRINT "Cipher Alphabet -",CA$›2240 RETURN ›2300 REM *** Key PA$›2310 GOSUB 2100:Z=1:GOSUB 2150›2315 PK$=KW$›2320 FOR HH=1 TO LEN(KW$)›2325 X=ASC(KW$(HH,HH))-64›2330 IF AM(X)=0 THEN PA$(Z,Z)=CHR$(X+64):Z=Z+1:AM(X)=1›2335 NEXT HH›2350 FOR MM=1 TO 26›2355 IF AM(MM)=0 THEN PA$(Z,Z)=CHR$(MM+64):Z=Z+1›2360 NEXT MM›2390 RETURN ›2400 REM *** Key CA$›2410 GOSUB 2100:LL=1:GOSUB 2150›2415 CK$=KW$›2420 FOR HH=1 TO LEN(KW$)›2425 KK=ASC(KW$(HH,HH))-64›2430 IF AM(KK)=0 THEN CA$(LL,LL)=CHR$(KK+64):LL=LL+1:AM(KK)=1›2435 NEXT HH›2450 FOR MM=1 TO 26›2455 IF AM(MM)=0 THEN CA$(LL,LL)=CHR$(MM+64):LL=LL+1›2460 NEXT MM›2490 RETURN ›2500 REM *** Reverse CA$›2505 GG=27›2510 FOR FF=1 TO 26›2520 GG=GG-1›2530 CA$(FF,FF)=NA$(GG,GG)›2540 NEXT FF›2545 RETURN ›2550 REM *** Reverse PA$›2555 GG=27›2560 FOR FF=1 TO 26›2570 GG=GG-1›2575 PA$(FF,FF)=NA$(GG,GG)›2580 NEXT FF›2595 RETURN ›2700 REM *** Restore alphabets›2720 PA$=NA$:PK$="*":RETURN ›2750 CA$=NA$:CK$="*":RETURN ›2800 REM *** Roll PA$›2805 Y=1:GOSUB 2160›2820 X=0:OPEN #4,4,0,"K:":GET #4,X:CLOSE #4›2830 IF X=60 THEN Y=Y-1:IF Y<0 THEN Y=0:REM ›2835 IF X=47 THEN GOTO 2850›2840 IF X=62 THEN Y=Y+1:IF Y>26 THEN Y=26›2845 POSITION 37,17:? " ":POSITION 37,17:? Y:GOTO 2820›2850 FOR KK=1 TO 26›2855 Z=KK+Y:IF Z>26 THEN Z=Z-26›2865 KH$(Z,Z)=PA$(KK,KK)›2875 NEXT KK›2880 PA$=KH$›2895 GOTO 2040›2900 REM *** Roll CA$›2905 Y=1:GOSUB 2160›2920 X=0:OPEN #4,4,0,"K:":GET #4,X:CLOSE #4›2930 IF X=60 THEN Y=Y-1:IF Y<0 THEN Y=0:REM ›2935 IF X=47 THEN GOTO 2950›2940 IF X=62 THEN Y=Y+1:IF Y>26 THEN Y=26›2945 POSITION 37,19:? " ":POSITION 37,19:? Y:GOTO 2920›2950 FOR KK=1 TO 26›2955 Z=KK+Y:IF Z>26 THEN Z=Z-26›2965 KH$(Z,Z)=CA$(KK,KK)›2975 NEXT KK›2980 CA$=KH$›2995 GOTO 2040›4000 REM *** Input Ciphertext›4010 ? CHR$(125)›4020 ? :? " Éîðõô Ãéðèåòôåøô "›4030 ? :INPUT CI$›4040 CT$(LEN(CT$)+1)=CI$›4050 ? :? "ÓÔÁÒÔ ÓÅÌÅÃÔ ÏÐÔÉÏÎ"›4060 ? "Menu Input CT$ clear"›4065 IF PEEK(53279)=5 THEN PRINT CT$:GOTO 4030›4070 IF PEEK(53279)=6 THEN 9000›4075 IF PEEK(53279)=3 THEN CT$=" ":GOTO 4050›4095 GOTO 4065›4100 REM *** Input Plaintext›4110 ? CHR$(125)›4120 ? :? " Éîðõô Ðìáéîôåøô "›4130 ? :INPUT CI$›4140 PT$(LEN(PT$)+1)=CI$›4150 ? :? "ÓÔÁÒÔ ÓÅÌÅÃÔ ÏÐÔÉÏÎ"›4160 ? "Menu Input PT$ clear"›4165 IF PEEK(53279)=5 THEN PRINT PT$:GOTO 4130›4170 IF PEEK(53279)=6 THEN 9000›4175 IF PEEK(53279)=3 THEN PT$=" ":GOTO 4150›4195 GOTO 4165›5000 REM *** Encipher›5005 TRAP 14000›5010 CT$=PT$:IF PA$=CA$ THEN ? "Alphabets not keyed":FOR DE=1 TO 100:NEXT DE:GOTO 2000›5015 GRAPHICS 2:POKE 710,0:POSITION 4,5:PRINT #6;"ENCIPHERING"›5020 FOR PP=1 TO LEN(PT$)›5025 POKE 708,148›5030 FOR QQ=1 TO 26›5040 IF PT$(PP,PP)=PA$(QQ,QQ) THEN CT$(PP,PP)=CA$(QQ,QQ):QQ=26›5050 NEXT QQ›5055 POKE 708,0›5060 NEXT PP›5080 GRAPHICS 0›5090 GOTO 1400›6000 REM *** Decipher›6005 TRAP 14000›6010 PT$=CT$:IF PA$=CA$ THEN ? "Alphabets not keyed":FOR DE=1 TO 100:NEXT DE:GOTO 2000›6020 GRAPHICS 2:POKE 710,0:POSITION 4,5:PRINT #6;"DECIPHERING"›6040 FOR PP=1 TO LEN(PT$)›6045 POKE 708,148›6050 FOR QQ=1 TO 26›6060 IF CT$(PP,PP)=CA$(QQ,QQ) THEN PT$(PP,PP)=PA$(QQ,QQ)›6070 NEXT QQ›6075 POKE 708,0›6080 NEXT PP›6085 GRAPHICS 0›6090 GOTO 1400›7000 REM *** Print Menu›7005 ? CHR$(125)›7010 ? ," Ðòéîô Íåîõ "›7020 ? :? "1. Menu"›7025 ? :? "2. Plaintext"›7030 ? :? "3. Ciphertext"›7035 ? :? "4. Keywords + Alphabets"›7040 ? :? "5. Complete file"›7045 ? :? "6. Patristocrat"›7050 REM *** Input command›7055 TRAP 14000:X=0:POSITION 2,21:? CL$:? CL$›7060 POSITION 2,21:? " Éîðõô á îõíâåò  ";:INPUT X›7070 IF X=1 THEN GOTO 9000›7080 ON X GOSUB 9000,7400,7450,2200,7300,7500›7090 GOTO 7050›7100 REM *** Print CT$, Patristocrat›7105 OPEN #3,8,0,"P:":X=1:? #3:? #3;"Ciphertext-":CTL=LEN(CT$)›7110 F=1:PRINT #3›7120 G=1›7125 IF X>CTL THEN CLOSE #3:RETURN ›7130 PRINT #3;CT$(X,X);:X=X+1:G=G+1›7140 IF G=6 AND F=11 THEN 7110›7150 IF G=6 THEN PRINT #3;S$;:F=F+1:GOTO 7120›7160 GOTO 7125›7300 REM *** Print complete file›7310 LPRINT :LPRINT "Plaintext- ",PT$›7320 LPRINT :LPRINT "Ciphertext-",CT$›7330 GOSUB 2200›7340 RETURN ›7400 REM *** Print PT$›7410 LPRINT :LPRINT "Plaintext- ",PT$›7440 RETURN ›7450 REM *** Print CT$›7470 LPRINT :LPRINT "Ciphertext-",CT$›7480 RETURN ›7500 REM *** Set up Patristocrat›7520 X=1:Y=1›7530 IF ASC(CT$(X,X))>64 AND ASC(CT$(X,X))<91 THEN HT$(Y,Y)=CT$(X,X):Y=Y+1›7540 X=X+1›7550 IF X>LEN(CT$) THEN GOTO 7570›7560 GOTO 7530›7570 CT$=HT$›7580 GOSUB 7100:GOTO 7000›8000 REM *** File Menu›8005 ? CHR$(125)›8010 ? :? ," Æéìå Íåîõ "›8020 ? :? "1. Save to Disk"›8025 ? :? "2. Load from Disk"›8030 ? :? "3. Directory reader"›8050 ? :? "4. Main Menu"›8055 POSITION 2,20:X=0:TRAP 14000›8060 ? " Éîðõô á îõíâåò  ";:INPUT X›8070 ON X GOTO 8100,8200,12000,9000›8090 GOTO 8055›8100 OPEN #1,8,0,"D1:ARIST.FIL"›8110 FOR M=1 TO LEN(PT$):PUT #1,ASC(PT$(M,M)):NEXT M›8115 PUT #1,42›8120 FOR N=1 TO LEN(CT$):PUT #1,ASC(CT$(N,N)):NEXT N›8125 PUT #1,42›8130 FOR KK=1 TO 26:PUT #1,ASC(PA$(KK,KK)):PUT #1,ASC(CA$(KK,KK)):NEXT KK›8140 CLOSE #1:GOTO 8000›8200 OPEN #1,4,0,"D1:ARIST.FIL"›8205 M=1›8210 GET #1,X:IF X=42 THEN GOTO 8220›8215 PT$(M,M)=CHR$(X):M=M+1:GOTO 8210›8220 M=1›8230 GET #1,X:IF X=42 THEN GOTO 8250›8235 CT$(M,M)=CHR$(X):M=M+1:GOTO 8230›8250 REM ›8260 FOR KK=1 TO 26:GET #1,X:GET #1,Y:PA$(KK,KK)=CHR$(X):CA$(KK,KK)=CHR$(Y):NEXT KK›8280 CLOSE #1:GOTO 1400›9000 REM *** Main Menu›9005 ? CHR$(125)›9010 ? "  Áòéóôïãòáô  Åîãéðèåò­Äåãéðèåò "›9020 ? :? "1. Input Plaintext"›9030 ? :? "2. Input Ciphertext"›9035 ? :? "3. Key functions"›9040 ? :? "4. Encipher"›9045 ? :? "5. Decipher"›9050 ? :? "6. File functions"›9055 ? :? "7. Print functions"›9060 ? :? "8. View file"›9100 REM ›9110 TRAP 14000:POSITION 2,21:? " Éîðõô á îõíâåò  ";:INPUT X›9120 ON X GOTO 4100,4000,2000,5000,6000,8000,7000,1400›9180 GOTO 9110›12000 REM *** Directory›12010 ? :? "Drive 1":? ›12015 TRAP 14000›12020 CLOSE #1:OPEN #1,6,0,"D1:*.*"›12025 TRAP 12060›12030 INPUT #1;DR$:? DR$:GOTO 12025›12060 TRAP 40000:CLOSE #1›12070 ? :? ,"ÓÔÁÒÔ ÓÅÌÅÃÔ ÏÐÔÉÏÎ"›12075 ? ,"Menu D:1 D:2":? ›12080 IF PEEK(53279)=6 THEN 9000›12085 IF PEEK(53279)=5 THEN 12000›12090 IF PEEK(53279)=3 THEN 12100›12095 GOTO 12080›12100 REM *** Directory›12110 ? :? "Drive 2":? ›12115 TRAP 14000›12120 CLOSE #2:OPEN #2,6,0,"D2:*.*"›12125 TRAP 12160›12130 INPUT #2;DR$:? DR$:GOTO 12125›12160 TRAP 40000:CLOSE #2:GOTO 12070›14000 REM *** Error traps›14100 ET=PEEK(195)›14110 TRAP 40000›14120 ? CHR$(125)›14130 CLOSE #1:CLOSE #2:CLOSE #3›14200 POSITION 10,10›14210 IF ET=138 THEN ? "TURN ON DEVICE !"›14220 IF ET=170 THEN ? "File not on disk"›14230 IF ET=167 THEN ? "File locked"›14235 IF ET=144 THEN ? "insert disk in Drive"›14240 IF ET=8 THEN ? "Input error"›14245 IF PEEK(195)=5 THEN ? "INPUT TEXT !":POP :POP ›14310 FOR TM=1 TO 100:NEXT TM›14410 GOTO 9000›15500 REM *** Title›15505 GRAPHICS 1:POKE 710,0›15510 PRINT #6:PRINT #6:PRINT #6›15530 PRINT #6;" ******************"›15535 PRINT #6;" * *"›15540 PRINT #6;" * ARISTED *"›15545 PRINT #6;" * *"›15550 PRINT #6;" ******************"›15560 PRINT #6:PRINT #6:PRINT #6›15565 PRINT #6:PRINT #6:PRINT #6›15580 PRINT #6;" BY "›15585 PRINT #6;" D A PETERSON "›15600 FOR DEL=1 TO 500:NEXT DEL›15605 GRAPHICS 0:GOTO 9000›