Actually added WOPO changes.

This commit is contained in:
Quinn Evans 2015-09-29 22:47:36 -06:00
parent 468ec84a9e
commit fbbc7068eb
1 changed files with 147 additions and 18 deletions

165
WOPO.COB
View File

@ -52,14 +52,28 @@
05 REST PIC X(480).
01 WAITING-COMMAND PIC X(16).
01 PARAMS.
03 WORK PIC X(50).
03 WORK PIC X(480).
03 WORK-PREFIX REDEFINES WORK PIC X.
88 IS-COMMAND VALUE "$".
03 PARAM PIC X(50) OCCURS 5 TIMES.
03 REG PIC X(50) OCCURS 5 TIMES.
03 PARAM PIC X(480) OCCURS 5 TIMES.
03 REG PIC X(480) OCCURS 5 TIMES.
01 BF-I-O.
03 BF-INPUT PIC X(512)
VALUE "$NUL$".
03 BF-CODE PIC X(512)
VALUE ",(.,).$".
03 BF-OUTPUT PIC X(512)
VALUE SPACES.
03 CYCLE-LIMIT PIC 9(5)
VALUE 0.
01 BF-STATE.
03 MAYBE-CYCLE-LIMIT PIC 9(5)
VALUE 0.
PROCEDURE DIVISION.
DISPLAY "CONFIGURATION FOLLOWS:".
DISPLAY "CONFIGURATION FOLLOWS.".
CALL "PRINT-CONFIG".
MOVE LENGTH OF MSG-BODY TO MSG-LENGTH.
CALL "CHANNEL-INIT"
@ -113,7 +127,7 @@
ADD 1 TO MSG-LENGTH.
MOVE "REAL-NAME" TO CONFIG-KEY.
PERFORM READ-CONFIG-ENTRY.
STRING "BOGUS HOST :" DELIMITED BY SIZE,
STRING "BOGUS HOST; " DELIMITED BY SIZE,
CONFIG-VALUE DELIMITED BY " ",
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
@ -141,7 +155,7 @@
READ-CONFIG-ENTRY.
READ CONFIG RECORD
INVALID KEY DISPLAY "REQUIRED KEY UNSPECIFIED:"
INVALID KEY DISPLAY "REQUIRED KEY UNSPECIFIED."
DISPLAY CONFIG-KEY
GO TO DIE.
@ -169,13 +183,15 @@
MOVE PARAM(1) TO WORK.
VALIDATE-USER.
D DISPLAY "ENTERED VALIDATE-USER".
MOVE NICK TO USER-NAME.
READ USERS RECORD
INVALID KEY MOVE 0 TO USER-LEVEL.
D DISPLAY "SUPPOSED USER LEVEL ", USER-LEVEL.
IF USER-LEVEL IS GREATER THAN 0 THEN
MOVE SPACES TO MSG-BODY.
MOVE SPACES TO MSG-BODY
MOVE 1 TO MSG-LENGTH
STRING "PRIVMSG NICKSERV :ACC"
STRING "PRIVMSG NICKSERV ;ACC"
INTO MSG-BODY
WITH POINTER MSG-LENGTH
ADD 1 TO MSG-LENGTH
@ -185,7 +201,12 @@
PERFORM SEND-LINE
MOVE "NOTICE" TO WAITING-COMMAND
MOVE 0 TO STATE
PERFORM WAIT-FOR-ACC UNTIL DONE.
D DISPLAY "WAITING FOR ACC."
PERFORM WAIT-FOR-ACC UNTIL DONE
D DISPLAY "USER VALIDATED."
D ELSE
D DISPLAY "USER NOT VALIDATED."
.
WAIT-FOR-ACC.
PERFORM WAIT-FOR-COMMAND.
@ -199,12 +220,13 @@
MAIN.
PERFORM RECEIVE-LINE.
MOVE 1 TO MSG-LENGTH.
IF PING THEN
PERFORM PONG
ELSE IF PRIVMSG THEN
D DISPLAY "PROCESSING PRIVMSG"
PERFORM HANDLE-MESSAGE
ELSE IF NOTICE THEN
D DISPLAY "PROCESSING NOTICE"
PERFORM HANDLE-MESSAGE.
*THE REPLY FUNCTIONS NEED NICK, COMMAND, AND TARGET PRESERVED.
@ -224,12 +246,12 @@
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
ADD 1 TO MSG-LENGTH.
STRING ":"
STRING ";"
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
IF TARGET IS NOT EQUAL TO WOPO-NICK THEN
STRING NICK DELIMITED BY SPACES
": " DELIMITED BY SIZE
". " DELIMITED BY SIZE
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
@ -248,13 +270,24 @@
HANDLE-MESSAGE.
PERFORM GET-PARAMS.
MOVE PARAM(1) TO WORK.
IF IS-COMMAND THEN
UNSTRING WORK DELIMITED BY "$" INTO PARAM(1), PARAM(1)
MOVE 2 TO MSG-LENGTH
UNSTRING WORK INTO PARAM(1)
WITH POINTER MSG-LENGTH
D DISPLAY "COMMAND BODY ", PARAM(1)
IF PARAM(1) IS EQUAL TO "HELP" THEN
PERFORM HANDLE-HELP
ELSE IF PARAM(1) IS EQUAL TO "SOURCE" THEN
PERFORM HANDLE-SOURCE
ELSE IF PARAM(1) IS EQUAL TO "BF-INPUT" THEN
PERFORM HANDLE-BF-INPUT
ELSE IF PARAM(1) IS EQUAL TO "BF-CODE" THEN
PERFORM HANDLE-BF-CODE
ELSE IF PARAM(1) IS EQUAL TO "BF-OUTPUT" THEN
PERFORM HANDLE-BF-OUTPUT
ELSE IF PARAM(1) IS EQUAL TO "BF-RUN" THEN
D DISPLAY "BF-RUN"
PERFORM HANDLE-BF-RUN
ELSE IF PARAM(1) IS EQUAL TO "SHITFED" THEN
PERFORM HANDLE-SHITFED
ELSE IF PARAM(1) IS EQUAL TO "LEVEL" THEN
@ -270,7 +303,8 @@
HANDLE-HELP.
PERFORM BEGIN-REPLY.
STRING "$HELP $LEVEL $JOIN $PART $QUIT $RELEVEL $SHITFED "
STRING "$BF-INPUT $BF-CODE $BF-OUTPUT $BF-RUN "
- "$HELP $LEVEL $JOIN $PART $QUIT $RELEVEL $SHITFED "
- "$SOURCE"
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
@ -285,7 +319,7 @@
HANDLE-SOURCE.
PERFORM BEGIN-REPLY.
STRING "HTTPS://GITHUB.COM/HEDDWCH/WOPO"
STRING "HTTPS;//GITHUB.COM/HEDDWCH/WOPO"
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
PERFORM SEND-LINE.
@ -362,7 +396,7 @@
PERFORM REPLY-ACK
MOVE SPACES TO MSG-BODY
MOVE 1 TO MSG-LENGTH
STRING "QUIT :", CONFIG-VALUE
STRING "QUIT ;", CONFIG-VALUE
INTO MSG-BODY
WITH POINTER MSG-LENGTH
PERFORM SEND-LINE
@ -393,9 +427,104 @@
WITH POINTER MSG-LENGTH.
PERFORM SEND-LINE.
HANDLE-BF-CODE.
IF PARAM(2) IS EQUAL TO SPACES THEN
PERFORM BEGIN-REPLY
STRING "CODE. " DELIMITED BY SIZE,
BF-CODE DELIMITED BY " "
INTO MSG-BODY
WITH POINTER MSG-LENGTH
PERFORM SEND-LINE
ELSE
MOVE PARAM(2) TO REG(1)
* PRESERVE VARIABLES FOR REPLY.
MOVE NICK TO REG(2)
MOVE COMMAND TO REG(3)
MOVE TARGET TO REG(4)
PERFORM VALIDATE-USER
IF USER-LEVEL > 60 THEN
* RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND
MOVE REG(4) TO TARGET
MOVE SPACES TO BF-CODE
MOVE REG(1) TO BF-CODE
PERFORM REPLY-ACK.
HANDLE-BF-INPUT.
IF PARAM(2) IS EQUAL TO SPACES THEN
PERFORM BEGIN-REPLY
STRING "INPUT. " DELIMITED BY SIZE,
BF-INPUT DELIMITED BY " "
INTO MSG-BODY
WITH POINTER MSG-LENGTH
PERFORM SEND-LINE
ELSE
MOVE PARAM(2) TO REG(1)
* PRESERVE VARIABLES FOR REPL
MOVE NICK TO REG(2)
MOVE COMMAND TO REG(3)
MOVE TARGET TO REG(4)
PERFORM VALIDATE-USER
IF USER-LEVEL > 50 THEN
* RESTORE NICK AND TARGET, THEN REPLY
MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND
MOVE REG(4) TO TARGET
MOVE SPACES TO BF-INPUT
MOVE REG(1) TO BF-INPUT
PERFORM REPLY-ACK.
HANDLE-BF-OUTPUT.
PERFORM BEGIN-REPLY.
D DISPLAY "STRINGING BF OUTPUT".
STRING "OUTPUT. " DELIMITED BY SIZE,
BF-OUTPUT DELIMITED BY "$NUL$"
DELIMITED BY "$LF$"
DELIMITED BY "$SUB$"
INTO MSG-BODY
WITH POINTER MSG-LENGTH.
D DISPLAY "SENDING LINE".
PERFORM SEND-LINE.
D DISPLAY "SENT LINE".
HANDLE-BF-RUN.
D DISPLAY "HANDLING BF-RUN".
MOVE PARAM(2) TO REG(1).
* PRESERVE VARIABLES FOR REPLY
MOVE NICK TO REG(2).
MOVE COMMAND TO REG(3).
MOVE TARGET TO REG(4).
PERFORM VALIDATE-USER.
IF REG(1) IS EQUAL TO SPACES THEN
MOVE 999 TO MAYBE-CYCLE-LIMIT
ELSE
UNSTRING REG(1) INTO
MAYBE-CYCLE-LIMIT.
D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT.
* RESTORE NICK AND TARGET, THEN REPLY.
MOVE REG(2) TO NICK
MOVE REG(3) TO COMMAND
MOVE REG(4) TO TARGET
IF USER-LEVEL > 50 THEN
MOVE 1 TO MSG-LENGTH
PERFORM REPLY-ACK
MOVE MAYBE-CYCLE-LIMIT TO CYCLE-LIMIT
PERFORM BF-LIMIT-CYCLES
CALL "BF-RUN" USING BF-I-O
D DISPLAY "BF RAN"
PERFORM HANDLE-BF-OUTPUT.
BF-LIMIT-CYCLES.
IF CYCLE-LIMIT > 999 THEN
IF USER-LEVEL < 90 THEN
IF USER-LEVEL < 70 THEN
MOVE 999 TO CYCLE-LIMIT
ELSE IF CYCLE-LIMIT > 9999 THEN
MOVE 9999 TO CYCLE-LIMIT.
QUIT.
CALL "CHANNEL-CLOSE".
CLOSE CONFIG.
CLOSE USERS.
STOP RUN.