RosettaCodeData/Task/Caesar-cipher/Action-/caesar-cipher.action

44 lines
805 B
Plaintext

CHAR FUNC Shift(CHAR c BYTE code)
CHAR base
IF c>='a AND c<='z THEN
base='a
ELSEIF c>='A AND c<='Z THEN
base='A
ELSE
RETURN (c)
FI
c==+code-base
c==MOD 26
RETURN (c+base)
PROC Encrypt(CHAR ARRAY in,out BYTE code)
INT i
out(0)=in(0)
FOR i=1 TO in(0)
DO
out(i)=Shift(in(i),code)
OD
RETURN
PROC Decrypt(CHAR ARRAY in,out BYTE code)
Encrypt(in,out,26-code)
RETURN
PROC Test(CHAR ARRAY in BYTE code)
CHAR ARRAY enc(256),dec(256)
PrintE("Original:") PrintE(in)
Encrypt(in,enc,code)
PrintF("Encrypted code=%B:%E",code) PrintE(enc)
Decrypt(enc,dec,code)
PrintF("Decrypted code=%B:%E",code) PrintE(dec)
PutE()
RETURN
PROC Main()
Test("The quick brown fox jumps over the lazy dog.",23)
Test("The quick brown fox jumps over the lazy dog.",5)
RETURN