Vigenère cipher: Difference between revisions

Line 1,344:
=={{header|PL/I}}==
<lang PL/I>
cypher: procedure options (main); /* 21 FebruarySeptember 2012 */
declare t(26) character (26);
declare (i, j, k, L) fixed binary;
declare (original, encoded, coder) character (1000) varying initial ('');
declare cypher character (30) varying;
declare (co, ct, cc) character (1);
 
/* Set up cypher table. */
t(1) = uppercase('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
do i = 2 to 26;
t(i) = substr(t(i-1), 2, 25) || substr(t(i-1), 1, 1);
end;
 
cypher = uppercase('vigilanceVIGILANCE');
original = 'Meet me on Tuesday evening at seven.';
put edit ('Message=', original) (a);
original = uppercase(original);
coder = '';
do i = 1 to length(original) by length(cypher);
coder = coder || cypher;
end;
 
/* Create the cypher text, same length as original, or longer. */
/* Remove non-alphabetic characters. */
do icoder = 1 torepeat(cypher, length(original) by /length(cypher));
j = 0;
do i = 1 to length(original);
k = index(t(1), substr(original, i, 1));
if k > 0 then
do; j = j + 1; substr(original, j, 1) = substr(original, i, 1); end;
end;
original = substr(original, 1, j);
 
/* Encode the original message, character by character. */
/* Remove nonNon-alphabetic characters are ignored. */
encoded = '';
coderL = ''0;
do i = 1 to length(original);
co = substr(original, i, 1);
j = index(t(1), co);
if j = 0 then iterate; /* Ignore non-alphabetic character */
ct = substr(coder, i, 1);
j L = 0L + 1;
coderct = substr(coder, ||L, cypher1);
k = index(t(1), ct);
encoded = encoded || substr(t(j), k, 1);
Anonymous user