PROGRAM RandomCode; USES cs65; CONST MessMax = 255; KeySize = 10; CharRange = 95; TopCharCode = 126; TYPE Message = ARRAY[1..MessMax] OF CHAR; KeyType = ARRAY[1..KeySize] OF INTEGER; {----------------------------- Encrypt ------------------------} PROCEDURE Encrypt(Shift : INTEGER; VAR Code: CHAR); VAR NumCode: INTEGER; BEGIN NumCode := ORD(Code) + Shift; IF NumCode > TopCharCode THEN NumCode := NumCode - CharRange; Code := CHR(NumCode); END; {----------------------------- EncodeMessage -------------------} PROCEDURE EncodeMessage(VAR Key : KeyType; VAR Chars : Message; N : INTEGER; NKN : INTEGER); VAR Index : INTEGER; BEGIN FOR Index := 1 TO N DO Encrypt(Key[((Index-1) MOD NKN)+1], Chars[Index]); END; {------------------------------ Main Program -------------------} VAR i, count, NumKeysNeeded : INTEGER; Mess : Message; Key : KeyType; Letter : CHAR; FileName : STRING; OutFile : TEXT; BEGIN RANDOMIZE; {Get Size of Key from User} WRITE('Enter the number of keys to use for this encryption (max of ', KeySize:1, ') : '); READLN(NumKeysNeeded); WRITELN; {Generate Random Key} FOR i := 1 TO NumKeysNeeded DO Key[i] := RandomInt(CharRange-2)+1; {Get a Message} WRITELN; WRITELN('Enter your message on one line and terminate with a tilde(~).'); Count := 0; READ(Letter); WHILE Letter <> '~' DO BEGIN Count := Count + 1; Mess[Count] := Letter; READ(Letter) END; READLN; EncodeMessage(Key, Mess, Count, NumKeysNeeded); {Open output file} WRITE('Enter filename for encoded message: '); READLN(FileName); REWRITE(OutFile, FileName); {Write result to the file} FOR i := 1 TO Count DO WRITE(OutFile, mess[i]); CLOSE(OutFile); WRITELN('Coded message has been written to the file.'); END.