PROGRAM CodeBreakerHelper; {Declarations module} CONST MessMax = 255; CharRange = 95; TopCharCode = 126; MaxKeys = 10; TYPE Message = ARRAY[1..MessMax] OF CHAR; KeyCode = ARRAY[1..MaxKeys] OF INTEGER; VAR K, i, Count, NumKeysNeeded : INTEGER; FileName1 : STRING; InFile : TEXT; Mess, NewMess : Message; Key : KeyCode; Letter : CHAR; PROCEDURE Decrypt(Shift : INTEGER; VAR Code : CHAR); VAR NumCode : INTEGER; BEGIN NumCode := ORD(Code) + Shift; IF NumCode > TopCharCode THEN NumCode := NumCode - CharRange; Code := CHR(NumCode); END; BEGIN {program} {File name prompt module} WRITE('Enter the name of the file you would like to decrypt : '); READLN(FileName1); {Read File Module} RESET(InFile, FileName1); i := 0; WHILE NOT EOF(InFile) DO BEGIN i := i + 1; READ(InFile, Mess[i]); END; CLOSE(InFile); WRITELN; {Key code prompt module} WRITE('Enter the number of encryption keys (maximum of 10) : '); READLN(NumKeysNeeded); WRITELN; WRITELN('***WARNING*** Encryption keys must be entered in the proper order.'); FOR Count := 1 TO NumKeysNeeded DO BEGIN WRITE('Key number ', Count:1, ': '); READLN(Key[Count]); END; {Decryption module} FOR Count := 1 TO i DO BEGIN Letter := Mess[Count]; Decrypt(Key[(((Count - 1) MOD NumKeysNeeded) + 1)], Letter); NewMess[Count] := Letter; END; {Decrypted message display module} WRITELN('The decrypted message is : '); FOR Count := 1 TO i DO WRITE(NewMess[Count]); WRITELN; END. {program}