From b947bd68057bdc34413dfd92d2797edf3cc06f6d Mon Sep 17 00:00:00 2001 From: Quinn Evans Date: Sun, 26 Mar 2017 16:24:51 -0600 Subject: [PATCH] Make $SHOW-ESCAPES non-destructive to the source register. --- REESCAPE.COB | 60 +++++++++++++++++++++++++++++++++++++++++++--------- WOPO.COB | 9 +++++++- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/REESCAPE.COB b/REESCAPE.COB index e5c7495..61a376d 100644 --- a/REESCAPE.COB +++ b/REESCAPE.COB @@ -3,35 +3,75 @@ DATA DIVISION. WORKING-STORAGE SECTION. - 01 ESCAPED PIC X(999). 01 PTRS. 03 IN-PTR PIC 999. 03 OUT-PTR PIC 999. + 03 TEMP-PTR PIC 999. 01 CURRENT-CHAR PIC X. 88 ESCAPE-CHAR VALUE "$". + 01 ESCAPE-TEMP PIC XXX. + 88 STRING-TERMINATED VALUE "NUL". 01 LOOP-STATE PIC 99. 88 DONE VALUE 99. LINKAGE SECTION. - 01 BUFFER PIC X(999). + 01 INPUT-BUFFER PIC X(999). + 01 OUTPUT-BUFFER PIC X(999). - PROCEDURE DIVISION USING BUFFER. + PROCEDURE DIVISION USING INPUT-BUFFER, OUTPUT-BUFFER. MOVE 0 TO LOOP-STATE. MOVE 1 TO IN-PTR, OUT-PTR. - MOVE SPACES TO ESCAPED. PERFORM MAYBE-ESCAPE-CHAR UNTIL DONE. - MOVE ESCAPED TO BUFFER. + * IF THE STRING WAS UNTERMINATED, THE POINTER WILL HAVE WRAPPED + IF OUT-PTR IS GREATER THAN 0 THEN + MOVE 0 TO LOOP-STATE + PERFORM BLANK-REST UNTIL DONE. EXIT PROGRAM. MAYBE-ESCAPE-CHAR. IF IN-PTR IS LESS THAN 999 AND OUT-PTR IS LESS THAN 999 THEN - UNSTRING BUFFER INTO CURRENT-CHAR WITH POINTER IN-PTR + UNSTRING INPUT-BUFFER + INTO CURRENT-CHAR + WITH POINTER IN-PTR IF ESCAPE-CHAR THEN - IF OUT-PTR IS LESS THAN 998 THEN - STRING "$$" INTO ESCAPED WITH POINTER OUT-PTR - ELSE MOVE 99 TO LOOP-STATE + MOVE IN-PTR TO TEMP-PTR + UNSTRING INPUT-BUFFER DELIMITED BY "$" + INTO ESCAPE-TEMP + WITH POINTER TEMP-PTR + IF STRING-TERMINATED THEN + MOVE 99 TO LOOP-STATE + IF OUT-PTR IS LESS THAN 995 THEN + STRING "$NUL$" + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR + ELSE + NEXT SENTENCE + ELSE + STRING "$$" + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR ELSE - STRING CURRENT-CHAR INTO ESCAPED WITH POINTER OUT-PTR + STRING CURRENT-CHAR + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR ELSE + MOVE 99 TO LOOP-STATE + UNSTRING INPUT-BUFFER + INTO CURRENT-CHAR + WITH POINTER IN-PTR + IF ESCAPE-CHAR THEN + STRING SPACE + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR + ELSE + STRING CURRENT-CHAR + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR. + + BLANK-REST. + IF OUT-PTR IS EQUAL TO 999 THEN MOVE 99 TO LOOP-STATE. + STRING SPACE + INTO OUTPUT-BUFFER + WITH POINTER OUT-PTR. diff --git a/WOPO.COB b/WOPO.COB index cf7642f..1aaf19b 100644 --- a/WOPO.COB +++ b/WOPO.COB @@ -414,7 +414,14 @@ MAYBE-SHOW-ESCAPES. IF SHOULD-SHOW-ESCAPES THEN - CALL "RE-ESCAPE" USING R(SRC). + IF SRC IS EQUAL TO 1 THEN + CALL "RE-ESCAPE" USING R(SRC), R(2) + MOVE PTR(SRC) TO PTR(2) + MOVE 2 TO SRC + ELSE + CALL "RE-ESCAPE" USING R(SRC), R(1) + MOVE PTR(SRC) TO PTR(1) + MOVE 1 TO SRC. DO-OUTPUT. IF STANDARD-OUTPUT THEN