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.