000000*Caesar Cipher - COBOL
000000*Author: John Paul Welsh
000000 IDENTIFICATION DIVISION.
000000 program-id. cipher.
000000
000000 ENVIRONMENT DIVISION.
000000
000000 DATA DIVISION.
000000 WORKING-STORAGE SECTION.
000000
000000 01 str-input PIC X(15) VALUE "John Paul Welsh".
000000 01 curr-char PIC X.
000000 01 chr-shift PIC 99 VALUE 04.
000000 01 max-shift PIC 99 VALUE 26.
000000 01 encrypted PIC X(15).
000000 01 decrypted PIC X(15).
000000 01 this-char PIC X.
000000 01 this-index PIC 99.
000000 01 new-char PIC X.
000000 01 str-pos PIC 99 VALUE 01.
000000 01 new-index PIC 99.
000000 01 table-alpha.
000000 05 idx-char-pair OCCURS 26 TIMES INDEXED BY idx.
000000 10 table-idx PIC 99.
000000 10 table-val PIC X.
000000
000000 PROCEDURE DIVISION.
000000
000000 PROGRAM-BEGIN.
000000 MOVE "A" TO al-char(1).
000000 MOVE "B" TO al-char(2).
000000 MOVE "C" TO al-char(3).
000000 MOVE "D" TO al-char(4).
000000 MOVE "E" TO al-char(5).
000000 MOVE "F" TO al-char(6).
000000 MOVE "G" TO al-char(7).
000000 MOVE "H" TO al-char(8).
000000 MOVE "I" TO al-char(9).
000000 MOVE "J" TO al-char(10).
000000 MOVE "K" TO al-char(11).
000000 MOVE "L" TO al-char(12).
000000 MOVE "M" TO al-char(13).
000000 MOVE "N" TO al-char(14).
000000 MOVE "O" TO al-char(15).
000000 MOVE "P" TO al-char(16).
000000 MOVE "Q" TO al-char(17).
000000 MOVE "R" TO al-char(18).
000000 MOVE "S" TO al-char(19).
000000 MOVE "T" TO al-char(20).
000000 MOVE "U" TO al-char(21).
000000 MOVE "V" TO al-char(22).
000000 MOVE "W" TO al-char(23).
000000 MOVE "X" TO al-char(24).
000000 MOVE "Y" TO al-char(25).
000000 MOVE "Z" TO al-char(26).
000000 DISPLAY "The input string is " str-input
000000 DISPLAY "The shift amount is " chr-shift
000000 DISPLAY "The max shift amount is " max-shift
000000
000000* capitalize the input
000000 MOVE FUNCTION upper-case(str-input) TO str-input.
000000
000000* do not use periods after any sentences inside loops
000000 PERFORM 15 TIMES
000000* lookup the current character from the string in the table,
000000* find the index+shiftval of that character, replace the current
000000* character with the shifted one
000000
000000 MOVE str-input TO encrypted
000000 MOVE encrypted(str-pos:str-pos) TO curr-char
000000 DISPLAY curr-char
000000 PERFORM TABLE-SEARCH
000000 ADD this-index, chr-shift GIVING new-index
000000 MOVE al-char(new-index) TO new-char
000000 INSPECT curr-char CONVERTING this-char TO new-char
000000 ADD str-pos, 1 GIVING str-pos
000000 END-PERFORM.
000000
000000 TABLE-SEARCH.
000000 SET idx to 1.
000000 SEARCH table-alpha VARYING idx
000000 WHEN idx-char-pait(idx) = curr-char
000000 MOVE idx-char-pair(idx) TO this-char
000000 MOVE idx TO this-index.
000000
000000 PROGRAM-DONE.
000000 STOP RUN.