WOPO/IRC-MSG.COB

76 lines
2.5 KiB
COBOL
Raw Normal View History

2015-09-27 05:52:34 +00:00
IDENTIFICATION DIVISION.
PROGRAM-ID. "PARSE-IRC-MSG".
2015-09-27 05:52:34 +00:00
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORK-PARAMETER.
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.
2015-09-27 05:52:34 +00:00
LINKAGE SECTION.
01 BUFFER.
2015-10-02 20:31:29 +00:00
03 MSG-BODY PIC X(999).
03 MSG-BODY-1 REDEFINES MSG-BODY PIC X(6).
88 HAS-PREFIX VALUE "$COLN$".
01 IRC-PARAMETERS.
03 NUM-PARAMETERS PIC 99.
2015-09-27 05:52:34 +00:00
03 PREFIX.
05 MSG-SRC PIC 999.
05 IDENT PIC 999.
05 HOST PIC 999.
03 COMMAND PIC 999.
03 PARAMS.
05 PARAM PIC 999 OCCURS 15 TIMES.
2015-09-27 05:52:34 +00:00
PROCEDURE DIVISION USING BUFFER, IRC-PARAMETERS.
MOVE 0 TO LOOP-STATE.
MOVE 0 TO IRC-PARAMETERS.
MOVE SPACES TO WORK.
MOVE 1 TO MSG-POINTER.
2015-09-27 05:52:34 +00:00
IF HAS-PREFIX THEN
PERFORM WITH-PREFIX
ELSE
MOVE 1 TO MSG-POINTER.
MOVE MSG-POINTER TO COMMAND.
UNSTRING MSG-BODY DELIMITED BY SPACES
INTO WORK
WITH POINTER MSG-POINTER.
PERFORM GET-PARAMETER
VARYING NUM-PARAMETERS FROM 1, BY 1
UNTIL DONE OR
NUM-PARAMETERS IS GREATER THAN OR EQUAL TO 15.
EXIT PROGRAM.
2015-09-27 05:52:34 +00:00
GET-PARAMETER.
MOVE MSG-POINTER TO PARAM(NUM-PARAMETERS).
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.
MOVE 7 TO MSG-POINTER, MSG-SRC.
PERFORM GET-PREFIX-PART UNTIL END-PREFIX.
MOVE SPACES TO WORK-DELIM.
GET-PREFIX-PART.
UNSTRING WORK,
DELIMITED BY "$EXC$", OR "$AT$", OR SPACES,
INTO WORK, DELIMITER IN WORK-DELIM,
WITH POINTER MSG-POINTER.
IF IDENT-SPEC THEN MOVE MSG-POINTER TO IDENT.
IF HOST-SPEC THEN MOVE MSG-POINTER TO HOST.