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.