! CODER.BAS - A program to encrypt/decrypt any sequential file.
!
! Dave Britson
! Des Moines, Ia
! November '85
!
! XCALL Subroutines used: FILEIN, STRIP
!
! Thanks to Tom Dahlquist for FILEIN.SBR
!
ENCODE:
PRINT TAB(8,30);
INPUT LINE CODE'TYPE
IF CODE'TYPE="" GOTO BACKOUT
CODE'TYPE=UCS(CODE'TYPE[1;1])
IF INSTR(1,"ED",CODE'TYPE[1;1])=0 GOTO ENCODE
DOCUMENT:
PRINT TAB(10,30);
INPUT LINE FILENAME
IF FILENAME="" GOTO ENCODE
CODE:
PRINT TAB(12,30);
INPUT LINE CODE
IF CODE="" GOTO DOCUMENT
ANYCNG:
PRINT TAB(23,1);"ANY CHANGE? _";
PRINT TAB(23,13);
INPUT LINE ENTRY
ENTRY=UCS(ENTRY)
IF ENTRY="Y" GOTO BEGIN
XCALL STRIP,FILENAME
BRK=INSTR(1,FILENAME,".")
IF BRK=0 &
BRK=LEN(FILENAME)+1 : &
FILENAME=FILENAME+".TXT"
PREF=FILENAME[1,BRK-1]
LOOKUP FILENAME,THERE
IF THERE=0 &
PRINT TAB(23,1);CHR(7);"DOCUMENT NOT FOUND"; : &
INPUT LINE ENTRY : &
GOTO BEGIN
IF THERE<0 &
PRINT TAB(23,1);CHR(7);"CANNOT PROCESS CONTIGUOUS FILES"; : &
INPUT LINE ENTRY : &
GOTO BEGIN
FOR I = 1 TO 6
C=C+(ASC(CODE[I,I])**I)
NEXT I
D=SQR(C)
NUM'CODE=INT(D)
XCALL STRIP,NUM'CODE
XCALL FILEIN,1,AREA,FILENAME
IF CODE'TYPE="E" &
OPEN #14,PREF+".CDE",OUTPUT &
ELSE &
OPEN #14,PREF+".NRM",OUTPUT
X=0 : INLINE="" : OUTLINE="" : DECODE=""
LOOP:
XCALL FILEIN,2,AREA,BUFFER,L
IF L<1 GOTO FINALE
X=X+1 : Y=Y+1
IF X>LEN(NUM'CODE) X=1
B=ASC(BUFFER)
IF CODE'TYPE="E" &
CALL ROR &
ELSE &
CALL ROL
PRINT #14,CHR(B);
IF Y/10=INT(Y/10) PRINT TAB(15,5);Y USING "#,###,###";
GOTO LOOP
ROR:
FOR J = 1 TO VAL(NUM'CODE[X;1])
IF B/2#INT(B/2) C=128 ELSE C=0
B=INT(B/2)
B=B+C
NEXT J
RETURN
ROL:
FOR I = 1 TO VAL(NUM'CODE[X;1])
IF B*2>255 C=255 ELSE C=0
B=B*2
B=B-C
NEXT I
RETURN
FINALE:
XCALL FILEIN,3,AREA
CLOSE #14
PRINT
IF CODE'TYPE="E" &
PRINT TAB(23,1);CHR(7);"ENCODED FILE EXISTS ON DISK AS ";PREF;".CDE"; : &
INPUT LINE ENTRY &
ELSE &
PRINT TAB(23,1);CHR(7);"DECODED FILE EXISTS ON DISK AS ";PREF;".NRM"; : &
INPUT LINE ENTRY