Make $SHOW-ESCAPES non-destructive to the source register.

This commit is contained in:
Quinn Evans 2017-03-26 16:24:51 -06:00
parent ef8b996b8d
commit b947bd6805
2 changed files with 58 additions and 11 deletions

View File

@ -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.

View File

@ -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