From 94f875eab1028d4b3de0a7a4c67d08f449d5dfc2 Mon Sep 17 00:00:00 2001 From: Quinn Evans Date: Tue, 21 Mar 2017 00:19:19 -0600 Subject: [PATCH] =?UTF-8?q?=C2=A1THE=20HORROR=E2=80=BC=20*Massive*=20refac?= =?UTF-8?q?tor.=20Use=20register=20file=20for=20everything.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was done as quickly as I could possibly do it. It is very rough around the edges. $SHOW-ESCAPES currently has no effect. There is no switch parsing yet, so input and output cannot be specified. These things should be simple to add now that the major rework is complete. --- WOPO.COB | 886 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 490 insertions(+), 396 deletions(-) diff --git a/WOPO.COB b/WOPO.COB index 4437e4d..f823dbf 100644 --- a/WOPO.COB +++ b/WOPO.COB @@ -44,29 +44,44 @@ 88 SUCCESS VALUE 0. 88 DONE VALUE 99. - 01 IRC-I-O. + 01 I-O-REGS. 03 INPUT-BUFFER. 05 MSG-BODY PIC X(999). 05 ASCII-TABLE. 07 ASCII-CELL PIC 999 OCCURS 999 TIMES. + 03 INPUT-SOURCE PIC 9. + 88 STANDARD-INPUT VALUE 0. 03 OUTPUT-BUFFER. 05 MSG-BODY PIC X(999). 05 ASCII-TABLE. 07 ASCII-CELL PIC 999 OCCURS 999 TIMES. + 03 OUTPUT-DEST PIC 9. + 88 STANDARD-OUTPUT VALUE 0. + 03 OUTPUT-SPEC. + 05 COMMAND PIC X(16). + 05 NICK PIC X(40). + 05 TARGET PIC X(50). 01 WOPO. - 03 WOPO-NICK PIC X(40). + 03 NICK PIC X(40). 03 REGISTER-FILE. 05 REGISTER OCCURS 8 TIMES. 07 R PIC X(999). - 07 R-COMMAND REDEFINES R PIC XX. - 88 IS-COMMAND VALUE "$$". - 07 R-CTCP REDEFINES R PIC X(5). - 88 IS-CTCP VALUE "$SOH$". + 07 R-COMMAND REDEFINES R. + 09 PREFIX PIC XX. + 88 IS-COMMAND VALUE "$$". + 09 COMMAND-BODY PIC X(997). + 07 R-CTCP REDEFINES R. + 09 CTCP-PREFIX PIC X(5). + 88 IS-CTCP VALUE "$SOH$". + 09 CTCP-BODY PIC X(994). + 07 R-SWITCH REDEFINES R. + 09 SWITCH PIC X. + 09 SWITCH-PARAM PIC X. 07 PTR PIC 999. 05 SRC PIC 9. 05 DEST PIC 9. - 03 PARAM PIC X(480) OCCURS 5 TIMES. + 03 PARAM PIC 999 OCCURS 9 TIMES. 03 NUM-PARAMS PIC 9. 03 WOPO-COUNTER PIC 9. 03 MSG-BODY-TMP PIC X(999). @@ -147,10 +162,10 @@ PERFORM SEND-LINE. MOVE "NICK" TO CONFIG-KEY. PERFORM READ-CONFIG-ENTRY. - MOVE CONFIG-VALUE TO WOPO-NICK. + MOVE CONFIG-VALUE TO NICK OF WOPO. MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER. STRING "NICK " DELIMITED BY SIZE, - WOPO-NICK DELIMITED BY SPACES, + NICK OF WOPO DELIMITED BY SPACES, "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER. PERFORM SEND-LINE. @@ -215,17 +230,16 @@ IF NOT SUCCESS THEN DISPLAY MSG-BODY OF INPUT-BUFFER GO TO DIE. PERFORM GET-IRC-STATE. - PERFORM GET-PARAMS. GET-IRC-STATE. CALL "PARSE-IRC-MSG" USING MSG-BODY OF INPUT-BUFFER, IRC-PARAMS. - MOVE SPACES TO NICK. + MOVE SPACES TO NICK OF IRC-STATE. IF GOT-PREFIX THEN MOVE MSG-SRC TO PTR(1) UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY "$EXC$" OR "$AT$" OR SPACES - INTO NICK + INTO NICK OF IRC-STATE WITH POINTER PTR(1). MOVE COMMAND OF IRC-PARAMS TO PTR(1). UNSTRING MSG-BODY OF INPUT-BUFFER @@ -236,144 +250,170 @@ MOVE PARAM OF IRC-PARAMS(1) TO PTR(1) UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY SPACES - INTO TARGET + INTO TARGET OF IRC-STATE WITH POINTER PTR(1) ELSE - MOVE SPACES TO TARGET. + MOVE SPACES TO TARGET OF IRC-STATE. + + GET-MSG-CONTENTS. + MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) + TO PTR(DEST). + UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY "$NUL$" + INTO R(DEST) + WITH POINTER PTR(DEST). + + INDEX-PARAMS. + MOVE 0 TO NUM-PARAMS OF WOPO, STATE. + MOVE 1 TO PTR(DEST) + PERFORM INDEX-PARAM UNTIL DONE. + + INDEX-PARAM. + ADD 1 TO NUM-PARAMS OF WOPO. + MOVE PTR(DEST) TO PARAM OF WOPO(NUM-PARAMS OF WOPO). + UNSTRING R(SRC) DELIMITED BY SPACE + INTO R(DEST) + WITH POINTER PTR(DEST). + IF R(DEST) IS EQUAL TO SPACES THEN + SUBTRACT 1 FROM NUM-PARAMS OF WOPO + MOVE 99 TO STATE + IF NUM-PARAMS OF WOPO IS NOT LESS THAN 9 THEN + MOVE 99 TO STATE. + + GET-PARAM. + MOVE PARAM OF WOPO(PTR(SRC)) TO PTR(DEST). + UNSTRING R(SRC) DELIMITED BY SPACES + INTO R(DEST) + WITH POINTER PTR(DEST). + + GET-REST. + MOVE PARAM OF WOPO(PTR(SRC)) TO PTR(DEST). + UNSTRING R(SRC) + INTO R(DEST) + WITH POINTER PTR(DEST). WAIT-FOR-COMMAND. + MOVE SPACES TO COMMAND OF IRC-STATE. PERFORM RECEIVE-LINE UNTIL COMMAND OF IRC-STATE EQUALS WAITING-COMMAND. - GET-PARAMS. - MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) - TO PTR(1). - UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY "$NUL$" - INTO R(1) - WITH POINTER PTR(1). - MOVE 1 TO PTR(1). - PERFORM BLANK-PARAM VARYING PTR(1) FROM 1, BY 1, - UNTIL PTR(1) IS NOT LESS THAN 5. - MOVE 0 TO NUM-PARAMS OF WOPO, STATE. - MOVE 1 TO PTR(1). - PERFORM UNSTRING-PARAM UNTIL DONE. - - UNSTRING-PARAM. - ADD 1 TO NUM-PARAMS OF WOPO. - UNSTRING R(1) DELIMITED BY SPACE - INTO PARAM OF WOPO(NUM-PARAMS OF WOPO) - WITH POINTER PTR(1). - IF PARAM OF WOPO(NUM-PARAMS OF WOPO) IS EQUAL TO SPACES THEN - SUBTRACT 1 FROM NUM-PARAMS OF WOPO - MOVE 99 TO STATE. - IF NUM-PARAMS OF WOPO IS NOT LESS THAN 5 THEN - MOVE 99 TO STATE. - - BLANK-PARAM. - MOVE SPACES TO PARAM OF WOPO(PTR(1)). - - PRESERVE-MESSAGE. - MOVE MSG-BODY OF INPUT-BUFFER TO MSG-BODY-TMP. - - RESTORE-MESSAGE. - MOVE MSG-BODY-TMP TO MSG-BODY OF INPUT-BUFFER. - VALIDATE-USER. D DISPLAY "ENTERED VALIDATE-USER". - PERFORM PRESERVE-MESSAGE. - MOVE NICK TO USER-NAME. - MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER + MOVE NICK OF IRC-STATE TO USER-NAME. + MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER. STRING "PRIVMSG NICKSERV $COLN$ACC " DELIMITED BY SIZE - NICK DELIMITED BY SPACE + NICK OF IRC-STATE DELIMITED BY SPACE " *$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - PERFORM SEND-LINE - MOVE "NOTICE" TO WAITING-COMMAND - MOVE 0 TO STATE + INTO MSG-BODY OF OUTPUT-BUFFER. + PERFORM SEND-LINE. + MOVE "NOTICE" TO WAITING-COMMAND. + MOVE 0 TO STATE. D DISPLAY "WAITING FOR ACC." - PERFORM WAIT-FOR-ACC UNTIL DONE - * RESTORE AND REPARSE MESSAGE. - PERFORM RESTORE-MESSAGE - PERFORM GET-IRC-STATE. - PERFORM GET-PARAMS. + PERFORM WAIT-FOR-ACC UNTIL DONE. WAIT-FOR-ACC. PERFORM WAIT-FOR-COMMAND. - IF PARAM OF WOPO(1) EQUALS USER-NAME AND - PARAM OF WOPO(4) EQUALS "ACC" THEN - MOVE 99 TO STATE - IF PARAM OF WOPO(5) IS NOT EQUAL TO "3" THEN - MOVE 0 TO USER-LEVEL - ELSE - MOVE PARAM OF WOPO(3) TO USER-NAME - READ USERS RECORD - INVALID KEY MOVE 0 TO USER-LEVEL - ELSE MOVE SPACES TO COMMAND OF IRC-STATE. + MOVE 2 TO DEST. + PERFORM GET-MSG-CONTENTS. + MOVE 2 TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + MOVE 1 TO PTR(2). + PERFORM GET-PARAM. + IF R(1) EQUALS USER-NAME THEN + MOVE 4 TO PTR(2) + PERFORM GET-PARAM + IF R(1) EQUALS "ACC" THEN + MOVE 99 TO STATE + MOVE 5 TO PTR(2) + PERFORM GET-PARAM + IF R(1) IS NOT EQUAL TO "3" THEN + MOVE 0 TO USER-LEVEL + ELSE + MOVE 3 TO PTR(2) + PERFORM GET-PARAM + MOVE R(1) TO USER-NAME + READ USERS RECORD + INVALID KEY MOVE 0 TO USER-LEVEL. MAIN. PERFORM RECEIVE-LINE. - D DISPLAY "NICK. ", NICK, + D DISPLAY "NICK. ", NICK OF IRC-STATE, D "COMMAND. ", COMMAND OF IRC-STATE, - D "TARGET. ", TARGET. + D "TARGET. ", TARGET OF IRC-STATE. IF PING THEN PERFORM PONG - ELSE IF PRIVMSG THEN - D DISPLAY "PROCESSING PRIVMSG" - PERFORM HANDLE-MESSAGE - ELSE IF NOTICE THEN - D DISPLAY "PROCESSING NOTICE" + ELSE IF PRIVMSG OR NOTICE THEN PERFORM HANDLE-MESSAGE ELSE IF KICK THEN D DISPLAY "PROCESSING KICK" PERFORM HANDLE-KICK. - *THE REPLY FUNCTIONS NEED NICK, COMMAND, AND TARGET PRESERVED. + INIT-REPLY. + MOVE COMMAND OF IRC-STATE TO COMMAND OF OUTPUT-SPEC. + MOVE NICK OF IRC-STATE TO NICK OF OUTPUT-SPEC. + IF TARGET OF IRC-STATE IS EQUAL TO NICK OF WOPO THEN + MOVE NICK OF IRC-STATE TO TARGET OF OUTPUT-SPEC + ELSE + MOVE TARGET OF IRC-STATE TO TARGET OF OUTPUT-SPEC. + BEGIN-REPLY. MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER. - MOVE 1 TO PTR(1). - STRING COMMAND OF IRC-STATE DELIMITED BY SPACES + MOVE 1 TO PTR(SRC). + STRING COMMAND OF OUTPUT-SPEC DELIMITED BY SPACES INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - ADD 1 TO PTR(1). - IF TARGET IS EQUAL TO WOPO-NICK THEN - STRING NICK DELIMITED BY SPACE - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) - ELSE - STRING TARGET DELIMITED BY SPACE - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(SRC). + ADD 1 TO PTR(SRC). + STRING TARGET OF OUTPUT-SPEC DELIMITED BY SPACES + INTO MSG-BODY OF OUTPUT-BUFFER + WITH POINTER PTR(SRC). STRING " $COLN$" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(SRC). BEGIN-STANDARD-REPLY. PERFORM BEGIN-REPLY. - STRING "$226$$128$$139$" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - IF TARGET IS NOT EQUAL TO WOPO-NICK THEN - STRING NICK DELIMITED BY SPACES + IF TARGET OF OUTPUT-SPEC IS NOT EQUAL TO NICK OF WOPO THEN + STRING "$226$$128$$139$" + INTO MSG-BODY OF OUTPUT-BUFFER + WITH POINTER PTR(SRC). + STRING NICK OF OUTPUT-SPEC DELIMITED BY SPACES ". " DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(SRC). + + USAGE-REPLY. + PERFORM BEGIN-STANDARD-REPLY. + STRING "USAGE. " DELIMITED BY SIZE, + R(SRC) DELIMITED BY "$NUL$", + "$NUL$" DELIMITED BY SIZE + INTO MSG-BODY OF OUTPUT-BUFFER + WITH POINTER PTR(SRC). + PERFORM SEND-LINE. REPLY-ACK. - PERFORM PRESERVE-MESSAGE. PERFORM BEGIN-STANDARD-REPLY. STRING "OK.$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(SRC). PERFORM SEND-LINE. - PERFORM RESTORE-MESSAGE. REPLY-NAK. PERFORM BEGIN-STANDARD-REPLY. STRING "ACCESS DENIED.$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(SRC). PERFORM SEND-LINE. + DO-OUTPUT. + IF STANDARD-OUTPUT THEN + STRING R(SRC) DELIMITED BY "$NUL$", + "$NUL$" + INTO MSG-BODY OF OUTPUT-BUFFER + WITH POINTER PTR(SRC) + PERFORM SEND-LINE + ELSE + MOVE R(SRC) TO R(OUTPUT-DEST). + PONG. STRING "PONG$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER. @@ -386,273 +426,306 @@ UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY SPACE INTO R(1) WITH POINTER PTR(1). - IF R(1) IS EQUAL TO WOPO-NICK THEN + IF R(1) IS EQUAL TO NICK OF WOPO THEN D DISPLAY "KICK WAS ME." MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER STRING "JOIN " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES + TARGET OF IRC-STATE DELIMITED BY SPACES "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER PERFORM SEND-LINE MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) - TO PTR(1) + TO PTR(1) UNSTRING MSG-BODY OF INPUT-BUFFER INTO R(1) WITH POINTER PTR(1) - IF R(1) IS NOT EQUAL TO WOPO-NICK THEN + D DISPLAY "KICK MESSAGE: ", R(1) + IF R(1) IS NOT EQUAL TO NICK OF WOPO THEN MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER STRING "PRIVMSG " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES, + TARGET OF IRC-STATE DELIMITED BY SPACES, " $COLN$" DELIMITED BY SIZE, - NICK DELIMITED BY SPACES, + NICK OF IRC-STATE DELIMITED BY SPACES, ". " DELIMITED BY SIZE, R(1) DELIMITED BY "$NUL$", "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER PERFORM SEND-LINE. - DDEBUG-PARAMS. - D DISPLAY "PARAMETER ", DEBUG-PTR, ": ", - D PARAM OF WOPO(DEBUG-PTR). - HANDLE-MESSAGE. D DISPLAY "HANDLING MESSAGE." - D PERFORM DEBUG-PARAMS - D VARYING DEBUG-PTR - D FROM 1, BY 1 - D UNTIL DEBUG-PTR IS GREATER THAN NUM-PARAMS OF WOPO - IF IS-CTCP(1) THEN + MOVE 2 TO DEST. + PERFORM GET-MSG-CONTENTS. + IF IS-CTCP(2) THEN PERFORM HANDLE-CTCP - ELSE IF IS-COMMAND(1) THEN - MOVE 3 TO PTR(1) - UNSTRING PARAM OF WOPO(1) INTO R(1) - WITH POINTER PTR(1) - MOVE R(1) TO PARAM OF WOPO(1) - D DISPLAY "COMMAND BODY ", PARAM OF WOPO(1) - IF PARAM OF WOPO(1) IS EQUAL TO "BF-CODE" THEN + ELSE IF IS-COMMAND(2) THEN + MOVE COMMAND-BODY(2) TO R(1) + D DISPLAY "COMMAND BODY ", R(1) + PERFORM INIT-REPLY + PERFORM HANDLE-COMMAND + ELSE IF TARGET OF IRC-STATE IS EQUAL TO NICK OF WOPO THEN + MOVE R(2) TO R(1) + PERFORM INIT-REPLY + PERFORM HANDLE-COMMAND + ELSE + MOVE 1 TO PTR(2) + UNSTRING R(2) DELIMITED BY ": " + INTO R(1) + WITH POINTER PTR(2) + IF R(1) IS EQUAL TO NICK OF WOPO THEN + UNSTRING R(2) + INTO R(1) + WITH POINTER PTR(2) + PERFORM INIT-REPLY + PERFORM HANDLE-COMMAND. + + HANDLE-COMMAND. + MOVE 0 TO INPUT-SOURCE, OUTPUT-DEST. + MOVE 1 TO SRC. + MOVE 2 TO DEST. + PERFORM INDEX-PARAMS. + MOVE 1 TO PTR(1). + PERFORM GET-PARAM. + D DISPLAY "COMMAND. ", R(2). + IF STANDARD-INPUT THEN + MOVE 2 TO PTR(1) + MOVE 8 TO DEST + PERFORM GET-REST + MOVE 8 TO INPUT-SOURCE. + *HERE GOES THE SWITCH LOGIC + MOVE R(2) TO R(1). + MOVE INPUT-SOURCE TO SRC. + IF R(1) IS EQUAL TO "BF-CODE" THEN PERFORM HANDLE-BF-CODE - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "BF-INPUT" THEN + ELSE IF R(1) IS EQUAL TO "BF-INPUT" THEN PERFORM HANDLE-BF-INPUT - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "BF-OUTPUT" THEN + ELSE IF R(1) IS EQUAL TO "BF-OUTPUT" THEN PERFORM HANDLE-BF-OUTPUT - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "BF-RUN" THEN + ELSE IF R(1) IS EQUAL TO "BF-RUN" THEN D DISPLAY "BF-RUN" PERFORM HANDLE-BF-RUN - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "DEOP" THEN + ELSE IF R(1) IS EQUAL TO "DEOP" THEN PERFORM HANDLE-DEOP - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "DEVOICE" THEN + ELSE IF R(1) IS EQUAL TO "DEVOICE" THEN PERFORM HANDLE-DEVOICE - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "HELP" THEN + ELSE IF R(1) IS EQUAL TO "HELP" THEN PERFORM HANDLE-HELP - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "JOIN" THEN + ELSE IF R(1) IS EQUAL TO "JOIN" THEN PERFORM HANDLE-JOIN - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "LEVEL" THEN + ELSE IF R(1) IS EQUAL TO "LEVEL" THEN PERFORM HANDLE-LEVEL - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "LICK" THEN + ELSE IF R(1) IS EQUAL TO "LICK" THEN PERFORM HANDLE-LICK - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "LIST-USERS" THEN + ELSE IF R(1) IS EQUAL TO "LIST-USERS" THEN PERFORM HANDLE-LIST-USERS - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "OP" THEN + ELSE IF R(1) IS EQUAL TO "OP" THEN PERFORM HANDLE-OP - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "PART" THEN + ELSE IF R(1) IS EQUAL TO "PART" THEN PERFORM HANDLE-PART - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "QUIT" THEN + ELSE IF R(1) IS EQUAL TO "QUIT" THEN PERFORM HANDLE-QUIT - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "RELEVEL" THEN + ELSE IF R(1) IS EQUAL TO "RELEVEL" THEN PERFORM HANDLE-RELEVEL - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "SHITFED" THEN + ELSE IF R(1) IS EQUAL TO "SHITFED" THEN PERFORM HANDLE-SHITFED - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "SHOW-ESCAPES" THEN + ELSE IF R(1) IS EQUAL TO "SHOW-ESCAPES" THEN PERFORM HANDLE-SHOW-ESCAPES - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "SOURCE" THEN + ELSE IF R(1) IS EQUAL TO "SOURCE" THEN PERFORM HANDLE-SOURCE - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "STRESS" THEN + ELSE IF R(1) IS EQUAL TO "STRESS" THEN PERFORM HANDLE-STRESS - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "VOICE" THEN + ELSE IF R(1) IS EQUAL TO "VOICE" THEN PERFORM HANDLE-VOICE. HANDLE-HELP. - PERFORM BEGIN-STANDARD-REPLY. - IF PARAM OF WOPO(2) IS EQUAL TO "ME" THEN - STRING "$240$$159$$142$$135$ " - - "GOD HELPS THOSE WHO HELP THEMSELVES, COMMIE. " - - "$240$$159$$142$$134" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS GREATER THAN 0 THEN + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + ELSE + MOVE SPACES TO R(1). + IF R(1) IS EQUAL TO "ME" THEN + STRING "$240$$159$$142$$135$ ", + "GOD HELPS THOSE WHO HELP THEMSELVES, COMMIE. ", + "$240$$159$$142$$134$$NUL$" + INTO R(1) ELSE STRING "COMMANDS$COLN$ " - - "$$BF-CODE $$BF-INPUT $$BF-OUTPUT $$BF-RUN " - - "$$DEOP $$DEVOICE $$HELP $$JOIN $$LEVEL $$LICK " - - "$$LIST-USERS $$OP $$PART $$RELEVEL $$SHITFED " - - "$$SHOW-ESCAPES $$SOURCE $$STRESS $$VOICE " - - "$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + "$$BF-CODE $$BF-INPUT $$BF-OUTPUT $$BF-RUN ", + "$$DEOP $$DEVOICE $$HELP $$JOIN $$LEVEL $$LICK ", + "$$LIST-USERS $$OP $$PART $$RELEVEL $$SHITFED ", + "$$SHOW-ESCAPES $$SOURCE $$STRESS $$VOICE ", + "$NUL$" + INTO R(1). + MOVE 1 TO SRC. + PERFORM BEGIN-STANDARD-REPLY. + PERFORM DO-OUTPUT. HANDLE-SHITFED. + STRING "$002$LEAVE MY CASE ALONE, ", + "$226$$156$$168$ASSHOL$LOWE$$226$$156$$168$.$NUL$" + INTO R(1). + MOVE 1 TO SRC. PERFORM BEGIN-STANDARD-REPLY. - STRING "$002$LEAVE MY CASE ALONE, " - - "$226$$156$$168$ASSHOL$LOWE$$226$$156$$168$." - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + PERFORM DO-OUTPUT. HANDLE-SOURCE. + MOVE "HTTPS$COLN$//GITHUB.COM/HEDDWCH/WOPO$NUL$" + TO R(1). + MOVE 1 TO SRC. PERFORM BEGIN-STANDARD-REPLY. - STRING "HTTPS$COLN$//GITHUB.COM/HEDDWCH/WOPO" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + PERFORM DO-OUTPUT. HANDLE-STRESS. - PERFORM BEGIN-REPLY. STRING "$SOH$ACTION PUNCHES A " - - "$226$$156$$168$BABY$226$$156$$168$.$SOH$$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + "$226$$156$$168$BABY$226$$156$$168$.$SOH$$NUL$" + INTO R(1). + MOVE 1 TO SRC. + PERFORM BEGIN-REPLY. + PERFORM DO-OUTPUT. HANDLE-LICK. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE NICK TO R(1) + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS EQUAL TO 0 THEN + MOVE NICK OF OUTPUT-SPEC TO R(1) ELSE - MOVE PARAM OF WOPO(2) TO R(1). - PERFORM BEGIN-REPLY. + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM. STRING "$SOH$ACTION VIGOROUSLY LICKS " DELIMITED BY SIZE, R(1) DELIMITED BY SPACES, ".$SOH$$NUL$" DELIMITED BY SIZE - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + INTO R(2). + MOVE 2 TO SRC. + PERFORM BEGIN-REPLY. + PERFORM DO-OUTPUT. HANDLE-LEVEL. - IF PARAM OF WOPO(2) IS NOT EQUAL TO SPACES THEN - MOVE PARAM OF WOPO(2) TO USER-NAME + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS GREATER THAN 0 THEN + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + MOVE R(1) TO USER-NAME ELSE - MOVE NICK TO USER-NAME. + PERFORM VALIDATE-USER. READ USERS RECORD INVALID KEY MOVE 0 TO USER-LEVEL. + STRING USER-RECORD, "$NUL$" INTO R(1). + MOVE 1 TO SRC. PERFORM BEGIN-STANDARD-REPLY. - MOVE 0 TO WOPO-COUNTER. - IF SHOULD-SHOW-ESCAPES THEN - D DISPLAY "USER NAME. ", USER-NAME - MOVE USER-NAME TO R(1) - CALL "RE-ESCAPE" USING R(1), WOPO-COUNTER - MOVE R(1) TO USER-NAME - D DISPLAY "USER NAME. ", USER-NAME - . - STRING USER-NAME - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - ADD WOPO-COUNTER TO PTR(1). - STRING USER-LEVEL - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + PERFORM DO-OUTPUT. HANDLE-LIST-USERS. CLOSE USERS. OPEN INPUT USERS. MOVE 0 TO STATE. + STRING USERS-HEADER, "$NUL$" INTO R(1). + MOVE 1 TO SRC. PERFORM BEGIN-STANDARD-REPLY. - STRING USERS-HEADER INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + PERFORM DO-OUTPUT. PERFORM LIST-USER-RECORD UNTIL DONE. CLOSE USERS. OPEN I-O USERS. LIST-USER-RECORD. READ USERS NEXT RECORD, AT END MOVE 99 TO STATE. - MOVE 0 TO WOPO-COUNTER. - IF SHOULD-SHOW-ESCAPES THEN - D DISPLAY "USER NAME. ", USER-NAME - MOVE USER-NAME TO R(1) - CALL "RE-ESCAPE" USING R(1), WOPO-COUNTER - MOVE R(1) TO USER-NAME - D DISPLAY "USER NAME. ", USER-NAME - . IF NOT DONE THEN + STRING USER-RECORD, "$NUL$" INTO R(1) . PERFORM BEGIN-STANDARD-REPLY - STRING USER-NAME - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) - ADD WOPO-COUNTER TO PTR(1) - STRING USER-LEVEL - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) - PERFORM SEND-LINE. + PERFORM DO-OUTPUT. HANDLE-JOIN. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. IF USER-LEVEL IS NOT LESS THAN 80 AND - PARAM OF WOPO(2) IS NOT EQUAL TO "0" THEN - MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - STRING "JOIN ", DELIMITED BY SIZE, - PARAM OF WOPO(2), DELIMITED BY SPACES, - "$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - PERFORM SEND-LINE + NUM-PARAMS OF WOPO IS GREATER THAN 0 THEN + MOVE 1 TO DEST + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + IF R(1) IS NOT EQUAL TO "0" THEN + MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER + STRING "JOIN ", DELIMITED BY SIZE, + R(1), DELIMITED BY SPACES, + "$NUL$" + INTO MSG-BODY OF OUTPUT-BUFFER + PERFORM SEND-LINE + ELSE + NEXT SENTENCE ELSE PERFORM REPLY-NAK. HANDLE-PART. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE TARGET TO R(1) + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS GREATER THAN 0 THEN + MOVE 1 TO DEST + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM ELSE - MOVE PARAM OF WOPO(2) TO R(1) + MOVE TARGET OF OUTPUT-SPEC TO R(1). IF USER-LEVEL IS NOT LESS THAN 80 THEN - MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - STRING "PART " DELIMITED BY SIZE, - R(1) DELIMITED BY SPACES, - "$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - PERFORM SEND-LINE + IF R(1) IS NOT EQUAL TO "0" THEN + MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER + STRING "PART ", DELIMITED BY SIZE, + R(1), DELIMITED BY SPACES, + "$NUL$" + INTO MSG-BODY OF OUTPUT-BUFFER + PERFORM SEND-LINE + ELSE + NEXT SENTENCE ELSE PERFORM REPLY-NAK. STRING-LOWVS. STRING "$LOWV$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(2). STRING-PARAMS. - STRING PARAM OF WOPO(WOPO-COUNTER) DELIMITED BY SPACES + PERFORM GET-PARAM. + ADD 1 TO PTR(2). + STRING R(1) DELIMITED BY SPACES INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - ADD 1 TO PTR(1). + WITH POINTER PTR(2). HANDLE-VOICE. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE NICK TO PARAM OF WOPO(2) - MOVE 2 TO NUM-PARAMS OF WOPO. + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN + MOVE NICK OF OUTPUT-SPEC TO R(3) + MOVE 3 TO SRC, INPUT-SOURCE + PERFORM INDEX-PARAMS. IF USER-LEVEL IS NOT LESS THAN 60 THEN MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - MOVE 1 TO PTR(1) + MOVE 1 TO PTR(2) STRING "MODE " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES, + TARGET OF OUTPUT-SPEC DELIMITED BY SPACES, " +" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM STRING-LOWVS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO - ADD 1 TO PTR(1) + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO PERFORM STRING-PARAMS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO STRING "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM SEND-LINE ELSE PERFORM REPLY-NAK. @@ -660,67 +733,73 @@ HANDLE-DEVOICE. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE NICK TO PARAM OF WOPO(2) - MOVE 2 TO NUM-PARAMS OF WOPO. + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN + MOVE NICK OF OUTPUT-SPEC TO R(3) + MOVE 3 TO SRC, INPUT-SOURCE + PERFORM INDEX-PARAMS. IF USER-LEVEL IS NOT LESS THAN 60 THEN MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - MOVE 1 TO PTR(1) + MOVE 1 TO PTR(2) STRING "MODE " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES, + TARGET OF OUTPUT-SPEC DELIMITED BY SPACES, " -" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM STRING-LOWVS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO - ADD 1 TO PTR(1) + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO PERFORM STRING-PARAMS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO STRING "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM SEND-LINE ELSE PERFORM REPLY-NAK. STRING-LOWOS. STRING "$LOWO$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). + WITH POINTER PTR(2). HANDLE-OP. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE NICK TO PARAM OF WOPO(2) - MOVE 2 TO NUM-PARAMS OF WOPO. + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN + MOVE NICK OF OUTPUT-SPEC TO R(3) + MOVE 3 TO SRC, INPUT-SOURCE + PERFORM INDEX-PARAMS. IF USER-LEVEL IS NOT LESS THAN 70 THEN MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - MOVE 1 TO PTR(1) + MOVE 1 TO PTR(2) STRING "MODE " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES, + TARGET OF OUTPUT-SPEC DELIMITED BY SPACES, " +" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM STRING-LOWOS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO - ADD 1 TO PTR(1) + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO PERFORM STRING-PARAMS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO STRING "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM SEND-LINE ELSE PERFORM REPLY-NAK. @@ -728,31 +807,34 @@ HANDLE-DEOP. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE NICK TO PARAM OF WOPO(2) - MOVE 2 TO NUM-PARAMS OF WOPO. + MOVE INPUT-SOURCE TO SRC. + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN + MOVE NICK OF OUTPUT-SPEC TO R(3) + MOVE 3 TO SRC, INPUT-SOURCE + PERFORM INDEX-PARAMS. IF USER-LEVEL IS NOT LESS THAN 70 THEN MOVE SPACES TO MSG-BODY OF OUTPUT-BUFFER - MOVE 1 TO PTR(1) + MOVE 1 TO PTR(2) STRING "MODE " DELIMITED BY SIZE, - TARGET DELIMITED BY SPACES, + TARGET OF OUTPUT-SPEC DELIMITED BY SPACES, " -" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM STRING-LOWOS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO - ADD 1 TO PTR(1) + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO PERFORM STRING-PARAMS - VARYING WOPO-COUNTER - FROM 2, BY 1 - UNTIL WOPO-COUNTER IS GREATER THAN - NUM-PARAMS OF WOPO + VARYING PTR(SRC) + FROM 1, BY 1 + UNTIL PTR(SRC) IS GREATER THAN + NUM-PARAMS OF WOPO STRING "$NUL$" INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + WITH POINTER PTR(2) PERFORM SEND-LINE ELSE PERFORM REPLY-NAK. @@ -777,10 +859,15 @@ PERFORM REPLY-ACK. PERFORM VALIDATE-USER. IF USER-LEVEL IS NOT LESS THAN 90 THEN - IF PARAM OF WOPO(2) IS NOT EQUAL TO SPACES THEN - IF PARAM OF WOPO(2) IS EQUAL TO "ON" THEN + MOVE INPUT-SOURCE TO SRC + MOVE 1 TO DEST + PERFORM INDEX-PARAMS + IF NUM-PARAMS OF WOPO IS GREATER THAN 0 THEN + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + IF R(1) IS EQUAL TO "ON" THEN SET SHOW-ESCAPES TO ON - ELSE IF PARAM OF WOPO(2) IS EQUAL TO "OFF" THEN + ELSE IF R(1) IS EQUAL TO "OFF" THEN SET SHOW-ESCAPES TO OFF ELSE NEXT SENTENCE ELSE IF SHOULD-SHOW-ESCAPES THEN @@ -788,123 +875,135 @@ ELSE SET SHOW-ESCAPES TO ON ELSE PERFORM REPLY-NAK. - PERFORM BEGIN-STANDARD-REPLY. - STRING "SHOW-ESCAPES " INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). IF SHOULD-SHOW-ESCAPES THEN - STRING "ON." INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) - ELSE STRING "OFF." INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + MOVE "SHOW-ESCAPES ON.$NUL$" TO R(1) + ELSE + MOVE "SHOW-ESCAPES OFF.$NUL$" TO R(1). + MOVE 1 TO SRC. + PERFORM BEGIN-STANDARD-REPLY. + PERFORM DO-OUTPUT. HANDLE-RELEVEL. PERFORM REPLY-ACK. PERFORM VALIDATE-USER. - MOVE PARAM OF WOPO(2) TO USER-NAME. IF USER-LEVEL IS NOT LESS THAN 99 THEN - MOVE PARAM OF WOPO(3) TO USER-LEVEL - IF USER-LEVEL IS NOT GREATER THAN ZERO THEN - DELETE USERS RECORD - INVALID KEY NEXT SENTENCE + MOVE INPUT-SOURCE TO SRC + MOVE 1 TO DEST + PERFORM INDEX-PARAMS + IF NUM-PARAMS OF WOPO IS EQUAL TO 2 THEN + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + MOVE R(1) TO USER-NAME + MOVE 2 TO PTR(SRC) + PERFORM GET-PARAM + MOVE R(1) TO USER-LEVEL + IF USER-LEVEL IS NOT GREATER THAN ZERO THEN + DELETE USERS RECORD + INVALID KEY NEXT SENTENCE + ELSE + REWRITE USER-RECORD + INVALID KEY WRITE USER-RECORD ELSE - REWRITE USER-RECORD - INVALID KEY WRITE USER-RECORD + MOVE " $NUL$" TO R(1) + MOVE 1 TO SRC + PERFORM USAGE-REPLY ELSE PERFORM REPLY-NAK. READ USERS RECORD INVALID KEY MOVE 0 TO USER-LEVEL. PERFORM BEGIN-STANDARD-REPLY. - STRING USER-RECORD - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + STRING USER-RECORD, "$NUL$" INTO R(1). + MOVE 1 TO SRC. + PERFORM DO-OUTPUT. HANDLE-BF-CODE. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - PERFORM BEGIN-STANDARD-REPLY + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN STRING "CODE. ", BF-CODE, "$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) + INTO R(1) D DISPLAY "BF-CODE. ", BF-CODE + MOVE 1 TO SRC + PERFORM BEGIN-STANDARD-REPLY PERFORM SEND-LINE ELSE PERFORM REPLY-ACK PERFORM VALIDATE-USER - MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) - TO PTR(1) - UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY SPACE - INTO R(1), - WITH POINTER PTR(1) - UNSTRING MSG-BODY OF INPUT-BUFFER - INTO R(1) - WITH POINTER PTR(1) IF USER-LEVEL IS NOT LESS THAN 60 THEN + MOVE INPUT-SOURCE TO SRC + MOVE 1 TO DEST + PERFORM INDEX-PARAMS + MOVE 1 TO PTR(SRC) + PERFORM GET-REST MOVE R(1) TO BF-CODE ELSE PERFORM REPLY-NAK. HANDLE-BF-INPUT. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - PERFORM BEGIN-STANDARD-REPLY + MOVE 1 TO DEST. + PERFORM INDEX-PARAMS. + IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN STRING "INPUT. ", - BF-INPUT - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1) - D DISPLAY "INPUT. ", BF-INPUT - D DISPLAY "MSG-BODY. ", MSG-BODY OF OUTPUT-BUFFER + BF-CODE, + "$NUL$" + INTO R(1) + D DISPLAY "BF-INPUT. ", BF-CODE + MOVE 1 TO SRC + PERFORM BEGIN-STANDARD-REPLY PERFORM SEND-LINE ELSE PERFORM REPLY-ACK PERFORM VALIDATE-USER - MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) - TO PTR(1) - UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY SPACE - INTO R(1), - WITH POINTER PTR(1) - UNSTRING MSG-BODY OF INPUT-BUFFER - INTO R(1) - WITH POINTER PTR(1) IF USER-LEVEL IS NOT LESS THAN 50 THEN + MOVE INPUT-SOURCE TO SRC + MOVE 1 TO DEST + PERFORM INDEX-PARAMS + MOVE 1 TO PTR(SRC) + PERFORM GET-REST MOVE R(1) TO BF-INPUT ELSE PERFORM REPLY-NAK. HANDLE-BF-OUTPUT. - PERFORM BEGIN-STANDARD-REPLY. D DISPLAY "BF OUTPUT. ", BF-OUTPUT. - D DISPLAY "STRINGING BF OUTPUT". - IF SHOULD-SHOW-ESCAPES THEN - CALL "RE-ESCAPE" USING BF-OUTPUT, WOPO-COUNTER. STRING "OUTPUT. " DELIMITED BY SIZE, - BF-OUTPUT DELIMITED BY "$NUL$" - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - D DISPLAY "SENDING LINE". - PERFORM SEND-LINE. - D DISPLAY "SENT LINE". + BF-OUTPUT DELIMITED BY "$NUL$", + "$NUL$" + INTO R(1). + MOVE 1 TO SRC. + PERFORM BEGIN-STANDARD-REPLY. + PERFORM DO-OUTPUT. HANDLE-BF-RUN. D DISPLAY "HANDLING BF-RUN". PERFORM REPLY-ACK PERFORM VALIDATE-USER. - IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN - MOVE 999 TO MAYBE-CYCLE-LIMIT - ELSE - UNSTRING PARAM OF WOPO(2) INTO MAYBE-CYCLE-LIMIT. - D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT. IF USER-LEVEL IS NOT LESS THAN 50 THEN - 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 + MOVE INPUT-SOURCE TO SRC + MOVE 1 TO DEST + PERFORM INDEX-PARAMS + IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN + PERFORM BF-LIMIT-CYCLES + D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT + CALL "BF-RUN" USING BF-I-O + D DISPLAY "BF RAN" + PERFORM HANDLE-BF-OUTPUT + ELSE + MOVE "" TO R(1) + MOVE 1 TO SRC + PERFORM USAGE-REPLY ELSE PERFORM REPLY-NAK. BF-LIMIT-CYCLES. + IF NUM-PARAMS OF WOPO IS EQUAL TO 0 THEN + MOVE 999 TO CYCLE-LIMIT + ELSE + MOVE 1 TO PTR(SRC) + PERFORM GET-PARAM + MOVE R(1) TO CYCLE-LIMIT. IF CYCLE-LIMIT > 999 THEN IF USER-LEVEL < 90 THEN IF USER-LEVEL < 70 THEN @@ -915,43 +1014,38 @@ PERFORM BF-CYCLES-LIMITED. BF-CYCLES-LIMITED. - PERFORM BEGIN-STANDARD-REPLY. - STRING "INSUFFICIENT LEVEL FOR REQUESTED CYCLE LIMIT. " - - "ACTUAL LIMIT WILL BE " - CYCLE-LIMIT + STRING "INSUFFICIENT LEVEL FOR REQUESTED CYCLE LIMIT. ", + "ACTUAL LIMIT WILL BE ", + CYCLE-LIMIT, "." - INTO MSG-BODY OF OUTPUT-BUFFER - WITH POINTER PTR(1). - PERFORM SEND-LINE. + INTO R(1). + MOVE 1 TO SRC. + PERFORM BEGIN-STANDARD-REPLY. + PERFORM DO-OUTPUT. HANDLE-CTCP. D DISPLAY "HANDLING CTCP.". - IF NOTICE AND TARGET IS NOT EQUAL TO WOPO-NICK THEN + IF NOTICE AND + TARGET OF IRC-STATE IS NOT EQUAL TO NICK OF WOPO THEN NEXT SENTENCE ELSE - MOVE 6 TO PTR(1) - UNSTRING PARAM OF WOPO(1) DELIMITED BY SPACE OR "$SOH$" - INTO R(1) - WITH POINTER PTR(1) - D DISPLAY "CTCP PARAM. ", R(1) - MOVE R(1) TO PARAM OF WOPO(1) - IF PARAM OF WOPO(1) IS EQUAL TO "PING" THEN + MOVE CTCP-BODY(2) TO R(1) + MOVE 1 TO SRC + PERFORM INDEX-PARAMS + MOVE 1 TO PTR(1) + PERFORM GET-PARAM + D DISPLAY "CTCP PARAM. ", R(2) + IF R(2) IS EQUAL TO "PING" THEN PERFORM HANDLE-PING - ELSE IF PARAM OF WOPO(1) IS EQUAL TO "VERSION" THEN + ELSE IF R(2) IS EQUAL TO "VERSION" THEN PERFORM HANDLE-VERSION - * ELSE IF PARAM OF WOPO(1) IS EQUAL TO "TIME" THEN + * ELSE IF R(2) IS EQUAL TO "TIME" THEN * PERFORM HANDLE-TIME ELSE NEXT SENTENCE. HANDLE-PING. - MOVE PARAM OF IRC-PARAMS(NUM-PARAMS OF IRC-PARAMS) - TO PTR(1). - ADD 5 TO PTR(1) - UNSTRING MSG-BODY OF INPUT-BUFFER DELIMITED BY "$NUL$" - INTO R(1) - WITH POINTER PTR(1). STRING "NOTICE " DELIMITED BY SIZE, - NICK DELIMITED BY SPACES, + NICK OF IRC-STATE DELIMITED BY SPACES, " $COLN$$SOH$" DELIMITED BY SIZE, R(1) DELIMITED BY "$SOH$", "$SOH$$NUL$" DELIMITED BY SIZE @@ -962,9 +1056,9 @@ HANDLE-VERSION. D DISPLAY "HANDLING VERSION." STRING "NOTICE " DELIMITED BY SIZE, - NICK DELIMITED BY SPACES, + NICK OF IRC-STATE DELIMITED BY SPACES, " $COLN$$SOH$VERSION WOPO THE COBOL-74 BOT. " - - "VERSION WHATEVER. RUNNING ON " DELIMITED BY SIZE + "VERSION WHATEVER. RUNNING ON " DELIMITED BY SIZE PLATFORM DELIMITED BY SPACES ".$SOH$$NUL$" DELIMITED BY SIZE INTO MSG-BODY OF OUTPUT-BUFFER.