Rewrite IRC-MSG to return string pointers.
This commit is contained in:
parent
d8ceb17fe4
commit
06ded93ce6
1 changed files with 54 additions and 37 deletions
91
IRC-MSG.COB
91
IRC-MSG.COB
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue