1. Program breakEnigma; 2. // © 2022 Diana K 3. Var 4. subCrypts: array[1..3,1..5] of string = (('T-?-??-???--X-T'),('A-?-??-???-P-A'), ('C-?-??-???-Z-C'),('Q-?-??-???-B-Q'),('G-?-??-???-Q-G'),( ), (); 5. msg: string; 6. i, j, k:integer; 7. settings: array[0..3] of integer = (0,0,0,0); 8. maxWheel: array[0..3] = (32, 32, 32, 32 ); 9. state:integer; 10. completed:Boolean; 11. function decrypt1(cryptMsg): Boolean; 12. var 13. I, j, k:integer; 14. Tmp: string; 15. Solved : Boolean; 16. Begin 17. Tmp:=''; 18. Solved := true; 19. For i:= 1 to length(cryptMsg) 20. Do begin 21. J:=(I mod 4); 22. // plugboard 23. Tmp[1]:=chr(((ord(cryptMsg[i])+setting[j]) mod maxWheel[j]); 24. // wheel 3 25. Tmp[2]:=chr(((ord(tmp[1])+setting[(j+1) mod 4]) mod maxWheel[(j+1) mod 4]); 26. // wheel 2 27. Tmp[3]:=chr(((ord(tmp[2])+setting[(j+2) mod 4]) mod maxWheel[(j+2) mod 4]); 28. // wheel 1 29. Tmp[4]:=chr(((ord(tmp[4])+setting[(j+3) mod 4]) mod maxWheel[(j+3) mod 4]); 30. Solved:=solved and (cryptMsg[i] = tmp[4]); 31. End; 32. Decrypt1:= solved; 33. End; 34. Procedure solvePartialSubCrypt(state:integer; I:integer; settings:integer; subCrypts: string[][]); 35. Var 36. I, j, k:integer; 37. Begin 38. // convert pseudocode lit to pascal like pseudocode 39. // a challenge to the reader, easy to do 40. End; 41. begin 42. writeln('Program Break Enigma'); 43. write('Enter Encrypted Message? '); 44. readln(msg); 45. writeln; 46. writeln('…Starting Solving'); 47. for state:=1 to 4 48. do begin 49. for i:=4 downto 1 50. do solvePartialSubCrypt(state, I, settings, subCrypts); 51. end; 52. // check work 53. Completed:=true; 54. For state:=1 to 3 55. Do for j:=1 to 5 56. Do competed:=completed and decrypt1(subCrypts[state,j]); 57. // show result 58. If not completed 59. Then writeln('A Solution was not found') 60. Else writeln('A Solution was found'); 61. Writeln; 62. Writeln('Settings: \tPlugboard \tWheel 3 \tWheel 2 \tWheel1'); 63. Writeln('\t'+settings[0]+'\t'+settings[1]+'\t\+settings[2]+'\t\+settings[3]); 64. Writeln 65. Writeln('…Program Completed'); 66. End.