PROC Fix(CHAR ARRAY in,fixed) INT i CHAR c fixed(0)=0 FOR i=1 TO in(0) DO c=in(i) IF c>='a AND c<='z THEN c==-('a-'A) FI IF c>='A AND c<='Z THEN fixed(0)==+1 fixed(fixed(0))=c FI OD RETURN PROC Process(CHAR ARRAY in,key,out INT dir) CHAR ARRAY inFixed(256),keyFixed(256) INT keyI,tmp,i CHAR c out(0)=0 Fix(in,inFixed) Fix(key,keyFixed) IF inFixed(0)=0 OR keyFixed(0)=0 THEN RETURN FI keyI=1 FOR i=1 TO inFixed(0) DO c=inFixed(i) tmp=c-'A+dir*(keyFixed(keyI)-'A) IF tmp<0 THEN tmp==+26 FI out(0)==+1 out(out(0))='A+tmp MOD 26 keyI==+1 IF keyI>keyFixed(0) THEN keyI=1 FI OD RETURN PROC Encrypt(CHAR ARRAY in,key,out) Process(in,key,out,1) RETURN PROC Decrypt(CHAR ARRAY in,key,out) Process(in,key,out,-1) RETURN PROC Test(CHAR ARRAY in,key) CHAR ARRAY enc(256),dec(256) PrintE("Original:") PrintE(in) Encrypt(in,key,enc) PrintF("Encrypted key=%S:%E",key) PrintE(enc) Decrypt(enc,key,dec) PrintF("Decrypted key=%S:%E",key) PrintE(dec) PutE() RETURN PROC Main() Test("Attack at dawn!","LEMONLEMONLE") Test("Crypto is short for cryptography.","ABCDABCDABCDABCDABCDABCDABCD") RETURN