-
Notifications
You must be signed in to change notification settings - Fork 6
/
IRC-MSG.COB
80 lines (74 loc) · 2.72 KB
/
IRC-MSG.COB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
IDENTIFICATION DIVISION.
PROGRAM-ID. "PARSE-IRC-MSG".
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 "$EXC$".
88 HOST-SPEC VALUE "$AT$".
88 PREFIX-END VALUE ALL SPACES.
01 MSG-POINTER PIC 999.
01 LOOP-STATE PIC 99.
88 DONE VALUE 99.
LINKAGE SECTION.
01 BUFFER.
03 MSG-BODY PIC X(999).
03 MSG-BODY-1 REDEFINES MSG-BODY PIC X(6).
88 HAS-PREFIX VALUE "$COLN$".
01 IRC-PARAMS.
03 NUM-PARAMS PIC 99.
03 PREFIX.
05 MSG-SRC PIC 999.
05 IDENT PIC 999.
05 HOST PIC 999.
03 COMMAND PIC 999.
03 PARAM PIC 999 OCCURS 15 TIMES.
PROCEDURE DIVISION USING BUFFER, IRC-PARAMS.
MOVE 0 TO IRC-PARAMS.
MOVE SPACES TO WORK.
MOVE 1 TO MSG-POINTER.
IF HAS-PREFIX THEN
PERFORM WITH-PREFIX
ELSE
MOVE 0 TO MSG-SRC
MOVE 1 TO MSG-POINTER.
MOVE MSG-POINTER TO COMMAND.
UNSTRING MSG-BODY DELIMITED BY SPACES
INTO WORK
WITH POINTER MSG-POINTER.
MOVE 0 TO LOOP-STATE.
PERFORM GET-PARAMETER
VARYING NUM-PARAMS FROM 1, BY 1
UNTIL DONE OR
NUM-PARAMS IS NOT LESS THAN 15.
SUBTRACT 1 FROM NUM-PARAMS.
EXIT PROGRAM.
GET-PARAMETER.
MOVE MSG-POINTER TO PARAM(NUM-PARAMS).
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-PARAMS
ELSE IF REST-PARAMETER THEN
ADD 6 TO PARAM(NUM-PARAMS).
WITH-PREFIX.
MOVE 7 TO MSG-POINTER, MSG-SRC.
MOVE 0 TO LOOP-STATE.
PERFORM GET-PREFIX-PART UNTIL DONE.
GET-PREFIX-PART.
MOVE SPACES TO WORK-DELIM.
UNSTRING MSG-BODY,
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.
IF PREFIX-END THEN MOVE 99 TO LOOP-STATE.