Add ASCII decoder.

This commit is contained in:
Quinn Evans 2015-09-28 14:53:23 -06:00
parent ca9e294cb5
commit fb13cc73a1
1 changed files with 325 additions and 0 deletions

325
DECASCII.COB Normal file
View File

@ -0,0 +1,325 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. "DECODE-ASCII".
DATA DIVISION.
LINKAGE SECTION.
01 CONVERSION.
03 CHAR-CODE PIC 999.
* CONTROL CHARACTERS.
88 ASCII-NUL VALUE 0.
88 ASCII-SOH VALUE 1.
88 ASCII-STX VALUE 2.
88 ASCII-ETX VALUE 3.
88 ASCII-EOT VALUE 4.
88 ASCII-ENQ VALUE 5.
88 ASCII-ACK VALUE 6.
88 ASCII-BEL VALUE 7.
88 ASCII-BS VALUE 8.
88 ASCII-TAB VALUE 9.
88 ASCII-LF VALUE 10.
88 ASCII-VT VALUE 11.
88 ASCII-FF VALUE 12.
88 ASCII-CR VALUE 13.
88 ASCII-SO VALUE 14.
88 ASCII-SI VALUE 15.
88 ASCII-DLE VALUE 16.
88 ASCII-DC1 VALUE 17.
88 ASCII-DC2 VALUE 18.
88 ASCII-DC3 VALUE 19.
88 ASCII-DC4 VALUE 20.
88 ASCII-NAK VALUE 21.
88 ASCII-SYN VALUE 22.
88 ASCII-ETB VALUE 23.
88 ASCII-CAN VALUE 24.
88 ASCII-EM VALUE 25.
88 ASCII-SUB VALUE 26.
88 ASCII-ESC VALUE 27.
88 ASCII-FS VALUE 28.
88 ASCII-GS VALUE 29.
88 ASCII-RS VALUE 30.
88 ASCII-US VALUE 31.
* PRINTABLE CHARACTERS.
88 ASCII-SPC VALUE 32.
88 ASCII-EXC VALUE 33.
88 ASCII-DBQT VALUE 34.
88 ASCII-PND VALUE 35.
88 ASCII-DLR VALUE 36.
88 ASCII-PCNT VALUE 37.
88 ASCII-AMP VALUE 38.
88 ASCII-SGQT VALUE 39.
88 ASCII-LPRN VALUE 40.
88 ASCII-RPRN VALUE 41.
88 ASCII-STAR VALUE 42.
88 ASCII-PLUS VALUE 43.
88 ASCII-COMA VALUE 44.
88 ASCII-DASH VALUE 45.
88 ASCII-DOT VALUE 46.
88 ASCII-SLSH VALUE 47.
88 ASCII-NUM0 VALUE 48.
88 ASCII-NUM1 VALUE 49.
88 ASCII-NUM2 VALUE 50.
88 ASCII-NUM3 VALUE 51.
88 ASCII-NUM4 VALUE 52.
88 ASCII-NUM5 VALUE 53.
88 ASCII-NUM6 VALUE 54.
88 ASCII-NUM7 VALUE 55.
88 ASCII-NUM8 VALUE 56.
88 ASCII-NUM9 VALUE 57.
88 ASCII-COLN VALUE 58.
88 ASCII-SCLN VALUE 59.
88 ASCII-LESS VALUE 60.
88 ASCII-EQL VALUE 61.
88 ASCII-GRTR VALUE 62.
88 ASCII-QUES VALUE 63.
88 ASCII-AT VALUE 64.
88 ASCII-LETA VALUES 65, 97.
88 ASCII-LETB VALUES 66, 98.
88 ASCII-LETC VALUES 67, 99.
88 ASCII-LETD VALUES 68, 100.
88 ASCII-LETE VALUES 69, 101.
88 ASCII-LETF VALUES 70, 102.
88 ASCII-LETG VALUES 71, 103.
88 ASCII-LETH VALUES 72, 104.
88 ASCII-LETI VALUES 73, 105.
88 ASCII-LETJ VALUES 74, 106.
88 ASCII-LETK VALUES 75, 107.
88 ASCII-LETL VALUES 76, 108.
88 ASCII-LETM VALUES 77, 109.
88 ASCII-LETN VALUES 78, 110.
88 ASCII-LETO VALUES 79, 111.
88 ASCII-LETP VALUES 80, 112.
88 ASCII-LETQ VALUES 81, 113.
88 ASCII-LETR VALUES 82, 114.
88 ASCII-LETS VALUES 83, 115.
88 ASCII-LETT VALUES 84, 116.
88 ASCII-LETU VALUES 85, 117.
88 ASCII-LETV VALUES 86, 118.
88 ASCII-LETW VALUES 87, 119.
88 ASCII-LETX VALUES 88, 120.
88 ASCII-LETY VALUES 89, 121.
88 ASCII-LETZ VALUES 90, 122.
88 ASCII-LSQB VALUE 91.
88 ASCII-BKSL VALUE 92.
88 ASCII-RSQB VALUE 93.
88 ASCII-CRT VALUE 94.
88 ASCII-UNDS VALUE 95.
88 ASCII-BKTK VALUE 96.
88 ASCII-LCRB VALUE 123.
88 ASCII-PIPE VALUE 124.
88 ASCII-RCRB VALUE 125.
88 ASCII-TLDE VALUE 126.
* LONELY CONTROL CHAR
88 ASCII-DEL VALUE 127.
03 COBOL-STRING PIC X(6).
03 FIRST-CHAR REDEFINES COBOL-STRING PIC X.
PROCEDURE DIVISION USING CONVERSION.
IF ASCII-NUL THEN
MOVE "<NUL>" TO COBOL-STRING
ELSE IF ASCII-SOH THEN
MOVE "<SOH>" TO COBOL-STRING
ELSE IF ASCII-STX THEN
MOVE "<STX>" TO COBOL-STRING
ELSE IF ASCII-ETX THEN
MOVE "<ETX>" TO COBOL-STRING
ELSE IF ASCII-EOT THEN
MOVE "<EOT>" TO COBOL-STRING
ELSE IF ASCII-ENQ THEN
MOVE "<ENQ>" TO COBOL-STRING
ELSE IF ASCII-ACK THEN
MOVE "<ACK>" TO COBOL-STRING
ELSE IF ASCII-BEL THEN
MOVE "<BEL>" TO COBOL-STRING
ELSE IF ASCII-BS THEN
MOVE "<BS>" TO COBOL-STRING
ELSE IF ASCII-TAB THEN
MOVE "<TAB>" TO COBOL-STRING
ELSE IF ASCII-LF THEN
MOVE "<LF>" TO COBOL-STRING
ELSE IF ASCII-VT THEN
MOVE "<VT>" TO COBOL-STRING
ELSE IF ASCII-FF THEN
MOVE "<FF>" TO COBOL-STRING
ELSE IF ASCII-CR THEN
MOVE "<CR>" TO COBOL-STRING
ELSE IF ASCII-SO THEN
MOVE "<SO>" TO COBOL-STRING
ELSE IF ASCII-SI THEN
MOVE "<SI>" TO COBOL-STRING
ELSE IF ASCII-DLE THEN
MOVE "<DLE>" TO COBOL-STRING
ELSE IF ASCII-DC1 THEN
MOVE "<DC1>" TO COBOL-STRING
ELSE IF ASCII-DC2 THEN
MOVE "<DC2>" TO COBOL-STRING
ELSE IF ASCII-DC3 THEN
MOVE "<DC3>" TO COBOL-STRING
ELSE IF ASCII-DC4 THEN
MOVE "<DC4>" TO COBOL-STRING
ELSE IF ASCII-NAK THEN
MOVE "<NAK>" TO COBOL-STRING
ELSE IF ASCII-SYN THEN
MOVE "<SYN>" TO COBOL-STRING
ELSE IF ASCII-ETB THEN
MOVE "<ETB>" TO COBOL-STRING
ELSE IF ASCII-CAN THEN
MOVE "<CAN>" TO COBOL-STRING
ELSE IF ASCII-EM THEN
MOVE "<EM>" TO COBOL-STRING
ELSE IF ASCII-SUB THEN
MOVE "<SUB>" TO COBOL-STRING
ELSE IF ASCII-ESC THEN
MOVE "<ESC>" TO COBOL-STRING
ELSE IF ASCII-FS THEN
MOVE "<FS>" TO COBOL-STRING
ELSE IF ASCII-GS THEN
MOVE "<GS>" TO COBOL-STRING
ELSE IF ASCII-RS THEN
MOVE "<RS>" TO COBOL-STRING
ELSE IF ASCII-US THEN
MOVE "<US>" TO COBOL-STRING
ELSE IF ASCII-SPC THEN
MOVE SPACE TO COBOL-STRING
ELSE IF ASCII-EXC THEN
MOVE "<EXC>" TO COBOL-STRING
ELSE IF ASCII-DBQT THEN
MOVE SPACES TO COBOL-STRING
MOVE QUOTE TO FIRST-CHAR
ELSE IF ASCII-PND THEN
MOVE "<PND>" TO COBOL-STRING
ELSE IF ASCII-DLR THEN
MOVE "<$>" TO COBOL-STRING
ELSE IF ASCII-PCNT THEN
MOVE "<PCNT>" TO COBOL-STRING
ELSE IF ASCII-AMP THEN
MOVE "<AMP>" TO COBOL-STRING
ELSE IF ASCII-SGQT THEN
MOVE "<SGQT>" TO COBOL-STRING
ELSE IF ASCII-LPRN THEN
MOVE "(" TO COBOL-STRING
ELSE IF ASCII-RPRN THEN
MOVE ")" TO COBOL-STRING
ELSE IF ASCII-STAR THEN
MOVE "*" TO COBOL-STRING
ELSE IF ASCII-PLUS THEN
MOVE "+" TO COBOL-STRING
ELSE IF ASCII-COMA THEN
MOVE "," TO COBOL-STRING
ELSE IF ASCII-DASH THEN
MOVE "-" TO COBOL-STRING
ELSE IF ASCII-DOT THEN
MOVE "." TO COBOL-STRING
ELSE IF ASCII-SLSH THEN
MOVE "/" TO COBOL-STRING
ELSE IF ASCII-NUM0 THEN
MOVE "0" TO COBOL-STRING
ELSE IF ASCII-NUM1 THEN
MOVE "1" TO COBOL-STRING
ELSE IF ASCII-NUM2 THEN
MOVE "2" TO COBOL-STRING
ELSE IF ASCII-NUM3 THEN
MOVE "3" TO COBOL-STRING
ELSE IF ASCII-NUM4 THEN
MOVE "4" TO COBOL-STRING
ELSE IF ASCII-NUM5 THEN
MOVE "5" TO COBOL-STRING
ELSE IF ASCII-NUM6 THEN
MOVE "6" TO COBOL-STRING
ELSE IF ASCII-NUM7 THEN
MOVE "7" TO COBOL-STRING
ELSE IF ASCII-NUM8 THEN
MOVE "8" TO COBOL-STRING
ELSE IF ASCII-NUM9 THEN
MOVE "9" TO COBOL-STRING
ELSE IF ASCII-NUM0 THEN
MOVE "0" TO COBOL-STRING
ELSE IF ASCII-COLN THEN
MOVE "<COLN>" TO COBOL-STRING
ELSE IF ASCII-SCLN THEN
MOVE ";" TO COBOL-STRING
ELSE IF ASCII-LESS THEN
MOVE "<" TO COBOL-STRING
ELSE IF ASCII-EQL THEN
MOVE "=" TO COBOL-STRING
ELSE IF ASCII-GRTR THEN
MOVE ">" TO COBOL-STRING
ELSE IF ASCII-QUES THEN
MOVE "<QUES>" TO COBOL-STRING
ELSE IF ASCII-AT THEN
MOVE "<AT>" TO COBOL-STRING
ELSE IF ASCII-LETA THEN
MOVE "A" TO COBOL-STRING
ELSE IF ASCII-LETB THEN
MOVE "B" TO COBOL-STRING
ELSE IF ASCII-LETC THEN
MOVE "C" TO COBOL-STRING
ELSE IF ASCII-LETD THEN
MOVE "D" TO COBOL-STRING
ELSE IF ASCII-LETE THEN
MOVE "E" TO COBOL-STRING
ELSE IF ASCII-LETF THEN
MOVE "F" TO COBOL-STRING
ELSE IF ASCII-LETG THEN
MOVE "G" TO COBOL-STRING
ELSE IF ASCII-LETH THEN
MOVE "H" TO COBOL-STRING
ELSE IF ASCII-LETI THEN
MOVE "I" TO COBOL-STRING
ELSE IF ASCII-LETJ THEN
MOVE "J" TO COBOL-STRING
ELSE IF ASCII-LETK THEN
MOVE "K" TO COBOL-STRING
ELSE IF ASCII-LETL THEN
MOVE "L" TO COBOL-STRING
ELSE IF ASCII-LETM THEN
MOVE "M" TO COBOL-STRING
ELSE IF ASCII-LETN THEN
MOVE "N" TO COBOL-STRING
ELSE IF ASCII-LETO THEN
MOVE "O" TO COBOL-STRING
ELSE IF ASCII-LETP THEN
MOVE "P" TO COBOL-STRING
ELSE IF ASCII-LETQ THEN
MOVE "Q" TO COBOL-STRING
ELSE IF ASCII-LETR THEN
MOVE "R" TO COBOL-STRING
ELSE IF ASCII-LETS THEN
MOVE "S" TO COBOL-STRING
ELSE IF ASCII-LETT THEN
MOVE "T" TO COBOL-STRING
ELSE IF ASCII-LETU THEN
MOVE "U" TO COBOL-STRING
ELSE IF ASCII-LETV THEN
MOVE "V" TO COBOL-STRING
ELSE IF ASCII-LETW THEN
MOVE "W" TO COBOL-STRING
ELSE IF ASCII-LETX THEN
MOVE "X" TO COBOL-STRING
ELSE IF ASCII-LETY THEN
MOVE "Y" TO COBOL-STRING
ELSE IF ASCII-LETZ THEN
MOVE "Z" TO COBOL-STRING
ELSE IF ASCII-LSQB THEN
MOVE "<LSQB>" TO COBOL-STRING
ELSE IF ASCII-BKSL THEN
MOVE "<BKSL>" TO COBOL-STRING
ELSE IF ASCII-RSQB THEN
MOVE "<RSQB>" TO COBOL-STRING
ELSE IF ASCII-CRT THEN
MOVE "<CRT>" TO COBOL-STRING
ELSE IF ASCII-UNDS THEN
MOVE "<UNDS>" TO COBOL-STRING
ELSE IF ASCII-BKTK THEN
MOVE "<BKTK>" TO COBOL-STRING
ELSE IF ASCII-LCRB THEN
MOVE "<LCRB>" TO COBOL-STRING
ELSE IF ASCII-PIPE THEN
MOVE "<PIPE>" TO COBOL-STRING
ELSE IF ASCII-RCRB THEN
MOVE "<RCRB>" TO COBOL-STRING
ELSE IF ASCII-TLDE THEN
MOVE "<TLDE>" TO COBOL-STRING
ELSE IF ASCII-DEL THEN
MOVE "<DEL>" TO COBOL-STRING
ELSE STRING "<", CHAR-CODE, ">" INTO COBOL-STRING.
EXIT PROGRAM.