Adapt WOPO to use new PARSE-IRC-MESSAGE.

This commit is contained in:
Quinn Evans 2015-10-03 20:20:19 -06:00
parent a857d0b8e6
commit db8f2611f7
1 changed files with 76 additions and 43 deletions

119
WOPO.COB
View File

@ -42,22 +42,6 @@
05 ASCII-CELL PIC 999 OCCURS 999 TIMES. 05 ASCII-CELL PIC 999 OCCURS 999 TIMES.
01 WOPO. 01 WOPO.
03 WOPO-NICK PIC X(16). 03 WOPO-NICK PIC X(16).
01 IRC-MESSAGE.
03 PREFIX.
05 NICK PIC X(16).
05 IDENT PIC X(16).
05 HOST PIC X(64).
03 COMMAND PIC X(16).
88 KICK VALUE "KICK".
88 PING VALUE "PING".
88 PRIVMSG VALUE "PRIVMSG".
88 NOTICE VALUE "NOTICE".
03 PARAMETERS.
05 TARGET PIC X(50).
05 REST PIC X(480).
01 WAITING-COMMAND PIC X(16).
01 PARAMS.
03 WORK PIC X(480). 03 WORK PIC X(480).
03 WORK-PREFIX REDEFINES WORK PIC XX. 03 WORK-PREFIX REDEFINES WORK PIC XX.
88 IS-COMMAND VALUE "$$". 88 IS-COMMAND VALUE "$$".
@ -65,6 +49,27 @@
03 PARAM PIC X(480) OCCURS 5 TIMES. 03 PARAM PIC X(480) OCCURS 5 TIMES.
03 REG PIC X(480) OCCURS 5 TIMES. 03 REG PIC X(480) OCCURS 5 TIMES.
01 IRC-PARAMETERS.
03 NUM-PARAMS PIC 99.
03 PREFIX.
05 MSG-SRC PIC 999.
88 GOT-PREFIX VALUES 1 THROUGH 999.
05 IDENT PIC 999.
05 HOST PIC 999.
03 COMMAND PIC 999.
03 PARAMS.
05 PARAM-PTR PIC 999 OCCURS 15 TIMES.
01 IRC-STATE.
03 NICK PIC X(16).
03 COMMAND PIC X(16).
88 KICK VALUE "KICK".
88 PING VALUE "PING".
88 PRIVMSG VALUE "PRIVMSG".
88 NOTICE VALUE "NOTICE".
03 TARGET PIC X(50).
03 WAITING-COMMAND PIC X(16).
01 BF-I-O. 01 BF-I-O.
03 BF-INPUT PIC X(999) 03 BF-INPUT PIC X(999)
VALUE "$NUL$". VALUE "$NUL$".
@ -170,13 +175,38 @@
CALL "DECODE-STRING" USING ASCII-MSG. CALL "DECODE-STRING" USING ASCII-MSG.
IF NOT SUCCESS THEN DISPLAY MSG-BODY IF NOT SUCCESS THEN DISPLAY MSG-BODY
GO TO DIE. GO TO DIE.
CALL "IRC-MSG" USING MSG-BODY, IRC-MESSAGE. CALL "PARSE-IRC-MSG" USING MSG-BODY, IRC-PARAMETERS.
IF GOT-PREFIX THEN
MOVE MSG-SRC TO WORK-PTR
UNSTRING MSG-BODY
DELIMITED BY "$EXC$" OR "$AT$" OR SPACES
INTO NICK
WITH POINTER WORK-PTR.
MOVE COMMAND OF IRC-PARAMETERS TO WORK-PTR.
UNSTRING MSG-BODY
DELIMITED BY SPACES
INTO COMMAND OF IRC-STATE
WITH POINTER WORK-PTR.
IF NUM-PARAMS IS NOT LESS THAN 1 THEN
MOVE PARAM-PTR(1) TO WORK-PTR
UNSTRING MSG-BODY
DELIMITED BY SPACES
INTO TARGET
WITH POINTER WORK-PTR
ELSE
MOVE SPACES TO TARGET.
WAIT-FOR-COMMAND. WAIT-FOR-COMMAND.
PERFORM RECEIVE-LINE UNTIL COMMAND EQUALS WAITING-COMMAND. PERFORM RECEIVE-LINE UNTIL
COMMAND OF IRC-STATE EQUALS WAITING-COMMAND.
GET-PARAMS. GET-PARAMS.
UNSTRING REST DELIMITED BY SPACE INTO MOVE PARAM-PTR(NUM-PARAMS) TO WORK-PTR.
UNSTRING MSG-BODY DELIMITED BY "$NUL$"
INTO WORK
WITH POINTER WORK-PTR.
UNSTRING WORK DELIMITED BY SPACE
INTO
PARAM(1) PARAM(1)
PARAM(2) PARAM(2)
PARAM(3) PARAM(3)
@ -214,10 +244,13 @@
IF PARAM(3) IS NOT EQUAL TO "3" THEN IF PARAM(3) IS NOT EQUAL TO "3" THEN
MOVE 0 TO USER-LEVEL MOVE 0 TO USER-LEVEL
ELSE NEXT SENTENCE ELSE NEXT SENTENCE
ELSE MOVE SPACES TO COMMAND. ELSE MOVE SPACES TO COMMAND OF IRC-STATE.
MAIN. MAIN.
PERFORM RECEIVE-LINE. PERFORM RECEIVE-LINE.
D DISPLAY "NICK. ", NICK,
D "COMMAND. ", COMMAND OF IRC-STATE,
D "TARGET. ", TARGET.
IF PING THEN IF PING THEN
PERFORM PONG PERFORM PONG
ELSE IF PRIVMSG THEN ELSE IF PRIVMSG THEN
@ -234,7 +267,7 @@
BEGIN-REPLY. BEGIN-REPLY.
MOVE SPACES TO MSG-BODY. MOVE SPACES TO MSG-BODY.
MOVE 1 TO WORK-PTR. MOVE 1 TO WORK-PTR.
STRING COMMAND DELIMITED BY SPACES STRING COMMAND OF IRC-STATE DELIMITED BY SPACES
INTO MSG-BODY INTO MSG-BODY
WITH POINTER WORK-PTR. WITH POINTER WORK-PTR.
ADD 1 TO WORK-PTR. ADD 1 TO WORK-PTR.
@ -277,11 +310,11 @@
"$NUL$" "$NUL$"
INTO MSG-BODY INTO MSG-BODY
PERFORM SEND-LINE PERFORM SEND-LINE
MOVE 1 TO WORK-PTR MOVE PARAM-PTR(NUM-PARAMS) TO WORK-PTR
UNSTRING REST DELIMITED BY "$COLN$" UNSTRING MSG-BODY DELIMITED BY "$COLN$"
INTO WORK INTO WORK
WITH POINTER WORK-PTR WITH POINTER WORK-PTR
UNSTRING REST UNSTRING MSG-BODY
INTO WORK INTO WORK
WITH POINTER WORK-PTR WITH POINTER WORK-PTR
IF WORK IS NOT EQUAL TO WOPO-NICK THEN IF WORK IS NOT EQUAL TO WOPO-NICK THEN
@ -370,7 +403,7 @@
MOVE PARAM(2) TO REG(1). MOVE PARAM(2) TO REG(1).
* PRESERVE VARIABLES FOR REPLY * PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(2). MOVE NICK TO REG(2).
MOVE COMMAND TO REG(3). MOVE COMMAND OF IRC-STATE TO REG(3).
MOVE TARGET TO REG(4). MOVE TARGET TO REG(4).
PERFORM VALIDATE-USER. PERFORM VALIDATE-USER.
IF USER-LEVEL IS GREATER THAN 80 AND IF USER-LEVEL IS GREATER THAN 80 AND
@ -383,7 +416,7 @@
PERFORM SEND-LINE PERFORM SEND-LINE
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND MOVE REG(3) TO COMMAND OF IRC-STATE
MOVE REG(4) TO TARGET MOVE REG(4) TO TARGET
PERFORM REPLY-ACK. PERFORM REPLY-ACK.
@ -391,7 +424,7 @@
MOVE PARAM(2) TO REG(1). MOVE PARAM(2) TO REG(1).
* PRESERVE VARIABLES FOR REPLY * PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(2). MOVE NICK TO REG(2).
MOVE COMMAND TO REG(3). MOVE COMMAND OF IRC-STATE TO REG(3).
MOVE TARGET TO REG(4). MOVE TARGET TO REG(4).
IF REG(1) EQUALS SPACES THEN IF REG(1) EQUALS SPACES THEN
MOVE TARGET TO REG(1). MOVE TARGET TO REG(1).
@ -399,7 +432,7 @@
IF USER-LEVEL IS GREATER THAN 80 THEN IF USER-LEVEL IS GREATER THAN 80 THEN
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND MOVE REG(3) TO COMMAND OF IRC-STATE
MOVE REG(4) TO TARGET MOVE REG(4) TO TARGET
PERFORM REPLY-ACK PERFORM REPLY-ACK
MOVE SPACES TO MSG-BODY MOVE SPACES TO MSG-BODY
@ -412,7 +445,7 @@
HANDLE-QUIT. HANDLE-QUIT.
* PRESERVE VARIABLES FOR REPLY * PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(1). MOVE NICK TO REG(1).
MOVE COMMAND TO REG(2). MOVE COMMAND OF IRC-STATE TO REG(2).
MOVE TARGET TO REG(3). MOVE TARGET TO REG(3).
MOVE "QUIT-MESSAGE" TO CONFIG-KEY. MOVE "QUIT-MESSAGE" TO CONFIG-KEY.
READ CONFIG RECORD READ CONFIG RECORD
@ -421,7 +454,7 @@
IF USER-LEVEL IS GREATER THAN 90 THEN IF USER-LEVEL IS GREATER THAN 90 THEN
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(1) TO NICK MOVE REG(1) TO NICK
MOVE REG(2) TO COMMAND MOVE REG(2) TO COMMAND OF IRC-STATE
MOVE REG(3) TO TARGET MOVE REG(3) TO TARGET
PERFORM REPLY-ACK PERFORM REPLY-ACK
MOVE SPACES TO MSG-BODY MOVE SPACES TO MSG-BODY
@ -436,7 +469,7 @@
MOVE PARAM(3) TO REG(2). MOVE PARAM(3) TO REG(2).
* PRESERVE VARIABLES FOR REPLY * PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(3). MOVE NICK TO REG(3).
MOVE COMMAND TO REG(4). MOVE COMMAND OF IRC-STATE TO REG(4).
MOVE TARGET TO REG(5). MOVE TARGET TO REG(5).
PERFORM VALIDATE-USER. PERFORM VALIDATE-USER.
MOVE REG(1) TO USER-NAME. MOVE REG(1) TO USER-NAME.
@ -448,7 +481,7 @@
INVALID KEY MOVE 0 TO USER-LEVEL. INVALID KEY MOVE 0 TO USER-LEVEL.
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(3) TO NICK. MOVE REG(3) TO NICK.
MOVE REG(4) TO COMMAND. MOVE REG(4) TO COMMAND OF IRC-STATE.
MOVE REG(5) TO TARGET. MOVE REG(5) TO TARGET.
PERFORM BEGIN-REPLY. PERFORM BEGIN-REPLY.
STRING USER-RECORD STRING USER-RECORD
@ -470,13 +503,13 @@
MOVE PARAM(2) TO REG(1) MOVE PARAM(2) TO REG(1)
* PRESERVE VARIABLES FOR REPLY. * PRESERVE VARIABLES FOR REPLY.
MOVE NICK TO REG(2) MOVE NICK TO REG(2)
MOVE COMMAND TO REG(3) MOVE COMMAND OF IRC-STATE TO REG(3)
MOVE TARGET TO REG(4) MOVE TARGET TO REG(4)
PERFORM VALIDATE-USER PERFORM VALIDATE-USER
IF USER-LEVEL > 60 THEN IF USER-LEVEL > 60 THEN
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND MOVE REG(3) TO COMMAND OF IRC-STATE
MOVE REG(4) TO TARGET MOVE REG(4) TO TARGET
MOVE SPACES TO BF-CODE MOVE SPACES TO BF-CODE
MOVE REG(1) TO BF-CODE MOVE REG(1) TO BF-CODE
@ -493,22 +526,22 @@
D DISPLAY "MSG-BODY. ", MSG-BODY D DISPLAY "MSG-BODY. ", MSG-BODY
PERFORM SEND-LINE PERFORM SEND-LINE
ELSE ELSE
MOVE 1 TO WORK-PTR MOVE PARAM-PTR(NUM-PARAMS) TO WORK-PTR
UNSTRING REST DELIMITED BY SPACE UNSTRING MSG-BODY DELIMITED BY SPACE
INTO PARAM(1), INTO PARAM(1),
WITH POINTER WORK-PTR WITH POINTER WORK-PTR
UNSTRING REST UNSTRING MSG-BODY
INTO REG(1) INTO REG(1)
WITH POINTER WORK-PTR WITH POINTER WORK-PTR
* PRESERVE VARIABLES FOR REPLY. * PRESERVE VARIABLES FOR REPLY.
MOVE NICK TO REG(2) MOVE NICK TO REG(2)
MOVE COMMAND TO REG(3) MOVE COMMAND OF IRC-STATE TO REG(3)
MOVE TARGET TO REG(4) MOVE TARGET TO REG(4)
PERFORM VALIDATE-USER PERFORM VALIDATE-USER
IF USER-LEVEL > 50 THEN IF USER-LEVEL > 50 THEN
* RESTORE NICK AND TARGET, THEN REPLY * RESTORE NICK AND TARGET, THEN REPLY
MOVE REG(2) TO NICK MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND MOVE REG(3) TO COMMAND OF IRC-STATE
MOVE REG(4) TO TARGET MOVE REG(4) TO TARGET
MOVE REG(1) TO BF-INPUT MOVE REG(1) TO BF-INPUT
PERFORM REPLY-ACK. PERFORM REPLY-ACK.
@ -530,7 +563,7 @@
MOVE PARAM(2) TO REG(1). MOVE PARAM(2) TO REG(1).
* PRESERVE VARIABLES FOR REPLY * PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(2). MOVE NICK TO REG(2).
MOVE COMMAND TO REG(3). MOVE COMMAND OF IRC-STATE TO REG(3).
MOVE TARGET TO REG(4). MOVE TARGET TO REG(4).
PERFORM VALIDATE-USER. PERFORM VALIDATE-USER.
IF REG(1) IS EQUAL TO SPACES THEN IF REG(1) IS EQUAL TO SPACES THEN
@ -540,7 +573,7 @@
D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT. D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT.
* RESTORE NICK AND TARGET, THEN REPLY. * RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND MOVE REG(3) TO COMMAND OF IRC-STATE
MOVE REG(4) TO TARGET MOVE REG(4) TO TARGET
IF USER-LEVEL > 50 THEN IF USER-LEVEL > 50 THEN
PERFORM REPLY-ACK PERFORM REPLY-ACK