324 lines
11 KiB
COBOL
324 lines
11 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. "DECODE-ASCII".
|
|
|
|
DATA DIVISION.
|
|
LINKAGE SECTION.
|
|
01 ASCII-CHARACTER.
|
|
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 ASCII-CHARACTER.
|
|
MOVE SPACES TO COBOL-STRING.
|
|
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-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.
|