Rewrite IRC-MSG to return string pointers.

This commit is contained in:
Quinn Evans 2015-10-03 15:30:50 -06:00
parent d8ceb17fe4
commit 06ded93ce6
1 changed files with 54 additions and 37 deletions

View File

@ -1,58 +1,75 @@
IDENTIFICATION DIVISION. IDENTIFICATION DIVISION.
PROGRAM-ID. "IRC-MSG". PROGRAM-ID. "PARSE-IRC-MSG".
DATA DIVISION. DATA DIVISION.
WORKING-STORAGE SECTION. WORKING-STORAGE SECTION.
01 WORK PIC X(480). 01 WORK-PARAMETER.
01 MSG-POINTER PIC 9(3). 03 WORK PIC X(999).
88 BLANK-PARAM VALUE SPACES.
03 WORK-1 REDEFINES WORK PIC X(6).
88 REST-PARAMETER VALUE "$COLN$".
03 WORK-DELIM PIC X(6).
88 IDENT-SPEC VALUE "!".
88 HOST-SPEC VALUE "@".
88 END-PREFIX VALUE SPACES.
01 MSG-POINTER PIC 999.
01 LOOP-STATE PIC 99.
88 DONE VALUE 99.
LINKAGE SECTION. LINKAGE SECTION.
01 BUFFER. 01 BUFFER.
03 MSG-BODY PIC X(999). 03 MSG-BODY PIC X(999).
03 MSG-BODY-1 REDEFINES MSG-BODY PIC X(6). 03 MSG-BODY-1 REDEFINES MSG-BODY PIC X(6).
88 HAS-PREFIX VALUE "$COLN$". 88 HAS-PREFIX VALUE "$COLN$".
01 IRC-MESSAGE. 01 IRC-PARAMETERS.
03 NUM-PARAMETERS PIC 99.
03 PREFIX. 03 PREFIX.
05 NICK PIC X(16). 05 MSG-SRC PIC 999.
05 IDENT PIC X(16). 05 IDENT PIC 999.
05 HOST PIC X(64). 05 HOST PIC 999.
03 COMMAND PIC X(16). 03 COMMAND PIC 999.
03 PARAMETERS. 03 PARAMS.
05 TARGET PIC X(50). 05 PARAM PIC 999 OCCURS 15 TIMES.
05 REST PIC X(480).
05 REST-PREFIX REDEFINES REST PIC X(6).
88 REST-PARAM VALUE "$COLN$".
PROCEDURE DIVISION USING BUFFER, IRC-MESSAGE. PROCEDURE DIVISION USING BUFFER, IRC-PARAMETERS.
MOVE SPACES TO IRC-MESSAGE. MOVE 0 TO LOOP-STATE.
MOVE 0 TO IRC-PARAMETERS.
MOVE SPACES TO WORK. MOVE SPACES TO WORK.
MOVE 1 TO MSG-POINTER. MOVE 1 TO MSG-POINTER.
IF HAS-PREFIX THEN IF HAS-PREFIX THEN
PERFORM WITH-PREFIX PERFORM WITH-PREFIX
ELSE ELSE
MOVE 1 TO MSG-POINTER. MOVE 1 TO MSG-POINTER.
UNSTRING MSG-BODY, MOVE MSG-POINTER TO COMMAND.
DELIMITED BY SPACES, UNSTRING MSG-BODY DELIMITED BY SPACES
INTO COMMAND, TARGET INTO WORK
WITH POINTER MSG-POINTER. WITH POINTER MSG-POINTER.
UNSTRING MSG-BODY DELIMITED BY "$NUL$", PERFORM GET-PARAMETER
INTO REST, VARYING NUM-PARAMETERS FROM 1, BY 1
WITH POINTER MSG-POINTER. UNTIL DONE OR
IF REST-PARAM THEN NUM-PARAMETERS IS GREATER THAN OR EQUAL TO 15.
MOVE REST TO WORK EXIT PROGRAM.
MOVE 7 TO MSG-POINTER
UNSTRING WORK GET-PARAMETER.
INTO REST MOVE MSG-POINTER TO PARAM(NUM-PARAMETERS).
WITH POINTER MSG-POINTER. MOVE SPACES TO WORK.
UNSTRING MSG-BODY DELIMITED BY SPACES
INTO WORK
WITH POINTER MSG-POINTER.
IF BLANK-PARAM OR REST-PARAMETER THEN
MOVE 99 TO LOOP-STATE.
IF BLANK-PARAM THEN
SUBTRACT 1 FROM NUM-PARAMETERS.
WITH-PREFIX. WITH-PREFIX.
MOVE 7 TO MSG-POINTER. MOVE 7 TO MSG-POINTER, MSG-SRC.
UNSTRING MSG-BODY, PERFORM GET-PREFIX-PART UNTIL END-PREFIX.
DELIMITED BY SPACES, MOVE SPACES TO WORK-DELIM.
INTO WORK,
WITH POINTER MSG-POINTER. GET-PREFIX-PART.
UNSTRING WORK, UNSTRING WORK,
DELIMITED BY "$EXC$" OR "$AT$", DELIMITED BY "$EXC$", OR "$AT$", OR SPACES,
INTO NICK, INTO WORK, DELIMITER IN WORK-DELIM,
IDENT, WITH POINTER MSG-POINTER.
HOST. IF IDENT-SPEC THEN MOVE MSG-POINTER TO IDENT.
IF HOST-SPEC THEN MOVE MSG-POINTER TO HOST.