diff --git a/DECSTR.COB b/DECSTR.COB new file mode 100644 index 0000000..8aaaf69 --- /dev/null +++ b/DECSTR.COB @@ -0,0 +1,38 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. "DECODE-STRING". + + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 STATE. + 03 LOOP-STATE PIC 99. + 88 DONE VALUE 99. + 03 STRING-POINTER PIC 999 USAGE COMPUTATIONAL. + 03 TABLE-INDEX USAGE INDEX. + + 01 ASCII-CHARACTER. + 03 CHAR-CODE PIC 999. + 03 COBOL-STRING PIC X(6). + + LINKAGE SECTION. + 01 ASCII-STRING. + 03 MSG-BODY PIC X(999). + 03 ASCII-TABLE PIC 999 OCCURS 999 TIMES. + + PROCEDURE DIVISION USING ASCII-STRING. + MOVE 0 TO LOOP-STATE. + MOVE 1 TO STRING-POINTER. + PERFORM DECODE-CHARACTER VARYING TABLE-INDEX + FROM 1, BY 1, + UNTIL DONE. + EXIT PROGRAM. + + DECODE-CHARACTER. + MOVE ASCII-TABLE(TABLE-INDEX) TO CHAR-CODE + IF STRING-POINTER IS GREATER THAN OR EQUAL TO 999 THEN + MOVE 99 TO LOOP-STATE + ELSE + STRING COBOL-STRING DELIMITED BY SPACES + INTO MSG-BODY + WITH POINTER STRING-POINTER. + + diff --git a/ENCSTR.COB b/ENCSTR.COB new file mode 100644 index 0000000..06b5507 --- /dev/null +++ b/ENCSTR.COB @@ -0,0 +1,52 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. "ENCODE-STRING". + + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 STATE. + 03 LOOP-STATE PIC 99. + 88 DONE VALUE 99. + 03 STRING-POINTER PIC 999 USAGE COMPUTATIONAL. + 03 TABLE-INDEX USAGE INDEX. + + 01 ASCII-CHARACTER. + 03 CHAR-CODE PIC 999. + 03 COBOL-STRING PIC X(6). + 03 CURRENT-CHARACTER REDEFINES COBOL-STRING PIC X. + 88 ESCAPE-CHAR VALUE "$". + + LINKAGE SECTION. + 01 ASCII-STRING. + 03 MSG-BODY PIC X(999). + 03 ASCII-TABLE PIC 999 OCCURS 999 TIMES. + + PROCEDURE DIVISION USING ASCII-STRING. + MOVE 0 TO LOOP-STATE, STRING-POINTER. + PERFORM ENCODE-CHARACTER + VARYING TABLE-INDEX FROM 1, BY 1 + UNTIL DONE. + EXIT PROGRAM. + + ENCODE-CHARACTER. + MOVE SPACES TO COBOL-STRING. + UNSTRING MSG-BODY + INTO CURRENT-CHARACTER + WITH POINTER STRING-POINTER. + IF ESCAPE-CHAR THEN + MOVE SPACES TO COBOL-STRING + IF STRING-POINTER < 993 THEN + UNSTRING MSG-BODY DELIMITED BY "$" + INTO COBOL-STRING + WITH POINTER STRING-POINTER + IF COBOL-STRING IS EQUAL TO SPACES THEN + MOVE "$" TO COBOL-STRING + ELSE + NEXT SENTENCE + ELSE + MOVE "NUL" TO COBOL-STRING. + IF COBOL-STRING IS EQUAL TO "NUL" THEN + MOVE 99 TO LOOP-STATE. + IF TABLE-INDEX IS GREATER THAN 998 THEN + MOVE 99 TO LOOP-STATE. + CALL "ENCODE-ASCII" USING ASCII-STRING. + MOVE CHAR-CODE TO ASCII-TABLE(TABLE-INDEX). diff --git a/WOPO.COB b/WOPO.COB index 2e48095..0147bf5 100644 --- a/WOPO.COB +++ b/WOPO.COB @@ -33,7 +33,7 @@ 01 STATE PIC 9(2). 88 SUCCESS VALUE 0. 88 DONE VALUE 99. - 01 BUFFER. + 01 ASCII-MSG. 03 MSG-BODY PIC X(999). 03 ASCII-TABLE PIC 999 OCCURS 999 TIMES. 01 WOPO. @@ -55,9 +55,9 @@ 01 PARAMS. 03 WORK PIC X(480). - 03 WORK-PTR PIC 999 USAGE COMPUTATION. 03 WORK-PREFIX REDEFINES WORK PIC X. 88 IS-COMMAND VALUE "$". + 03 WORK-PTR PIC 999 USAGE COMPUTATIONAL. 03 PARAM PIC X(480) OCCURS 5 TIMES. 03 REG PIC X(480) OCCURS 5 TIMES. @@ -85,7 +85,8 @@ CONFIG-VALUE, DELIMITED BY SPACE, "$NUL$" INTO MSG-BODY, - CALL "CHANNEL-OPEN" USING MSG-BODY, STATE. + CALL "ENCODE-STRING" USING ASCII-MSG. + CALL "CHANNEL-OPEN" USING ASCII-MSG, STATE. IF NOT SUCCESS THEN DISPLAY MSG-BODY GO TO DIE. MOVE "PASS" TO CONFIG-KEY. @@ -151,12 +152,14 @@ GO TO DIE. SEND-LINE. - CALL "CHANNEL-SEND" USING MSG-BODY, STATE. + CALL "ENCODE-STRING" USING ASCII-MSG + CALL "CHANNEL-SEND" USING ASCII-MSG, STATE. IF NOT SUCCESS THEN DISPLAY MSG-BODY GO TO DIE. RECEIVE-LINE. - CALL "CHANNEL-RECV" USING MSG-BODY, STATE. + CALL "CHANNEL-RECV" USING ASCII-MSG, STATE. + CALL "DECODE-STRING" USING ASCII-MSG IF NOT SUCCESS THEN GO TO DIE. CALL "IRC-MSG" USING MSG-BODY, IRC-MESSAGE. @@ -482,7 +485,7 @@ UNSTRING REST DELIMITED BY SPACE INTO PARAM(1), WITH POINTER WORK-PTR - UNSTRING REST DELIMITED BY SIZE + UNSTRING REST INTO REG(1) WITH POINTER WORK-PTR * PRESERVE VARIABLES FOR REPLY.