START: PHDR -1,0,PH$REE!PH$REU ;program header
GETIMP MEMSIZ,A5 ;allocate impure area
HELP: BYP ;bypass leading white space
LIN ;end of line? 1.1
JNE GETIN ; no 1.1
TYPECR <Function: encodes and decodes files.>
TYPECR <Usage: .ENCODE file,key>
TYPECR <Example: .ENCODE TEST.BAS,HOWARD>
CRLF ;newline 1.1
EXIT ;exit 1.1
GETIN: MOV A2,A3 ;save line index
FSPEC IN(A5),TXT ;process filespec
INIT IN(A5) ;load driver, allocate buffer
GETOUT: MOV A3,A2 ;restore line index
FSPEC OUT(A5),TXT ;process filespec
INIT OUT(A5) ;load driver, allocate buffer
MOVW #[$$$],OUT+D.EXT(A5) ;set output extension to .$$$
GETKEY: BYP ;bypass leading white space
LEA A0,KEY(A5) ;index key storage area
10$: LIN ;end of line? 1.1
BEQ 20$ ; yes - end-of-key 1.1
MOVB (A2)+,D1 ;get next char of key
BEQ 20$ ;branch if end-of-key
MOVB D1,(A0)+ ;store byte
BR 10$ ;loop till entire line processed
20$: CLRB @A0 ;terminate key buffer
LEA A0,KEY(A5) ;reset key buffer index
OPNIN: OPENI IN(A5) ;open input file
OPNOUT: LOOKUP OUT(A5) ;check for existence of output file
BNE 10$ ;not found
DSKDEL OUT(A5) ;delete output file
10$: OPENO OUT(A5) ;open output file
GETBYT: CTRLC ENDFIL ;branch on ^C
FILINB IN(A5) ;read byte
TST IN+D.SIZ(A5) ;test for end-of-file
BEQ ENDFIL ;branch on end-of-file
CRYPT: MOVB (A0)+,D0 ;D0 := next char of key
BNE 10$ ;branch if not end-of-key
LEA A0,KEY(A5) ;else reset key index
BR CRYPT ;and loop back to start of key 1.1
10$: XORB D0,D1 ;XOR char with key byte
PUTBYT: FILOTB OUT(A5) ;output encrypted byte
BR GETBYT ;loop till end of file