.NF;.UC .CW; ^&NETWORK SUBROUTINE LIBRARY\& .TITLE NETWORK SUBROUTINE LIBRARY .AP;.AC;.FLAG CAPITAlIZE ";.NUMBER 1 .TP 8;.B 2;.CW; ^&^^RDBUF (READ A BUFFER)\& .FILL;.P SUBROUTINE TO READ A LINE FROM THE TERMINAL AND BUFFER IT. RESPONDS TO "CTRL/U" AND RUBOUT. THE DELETED CHARACTERS ARE ECHOED, FOR CONVENIENCE OF USER. TYPING A CARRIAGE RETURN ENDS ROUTINE AND SENDS CONTROL BACK TO THE CALLING MODULE (SEE CALLING SEQUENCE BELOW). THERE ARE TWO SUPPLEMENTARY ROUTINES WHICH CAN BE USED IN PROCESSING YOUR BUFFER: FNDNB (FIND THE NEXT NON-BLANK CHAR) AND KNUM (CREATE OCTAL EQUIVALENT OF DECIMAL NUMBER). THE USER NEEDS TO INITIALIZE TWO VARIABLES: "IKBUF"---ADDRESS TO START OF BUFFER AREA FAILURE TO INITIALIZE THIS VARIABLE WILL WIPE OUT PAGE ZERO. "KBUFL"---BUFFER LENGTH, A POSITIVE OCTAL VALUE FAILURE TO INITIALIZE WILL DEFAULT BUFFER LENGTH TO 10000 (OCTAL). THIS, TOO, WOULD PROBABLY BE CATASTROPHIC FOR THE USER. .B 2;.NF;^^CALLING SEQUENCE: RDBUF /RDBUF= JMS I XRDBUF JMP AGN /LINE DELETE "OR" BUFFER OVERFLOW - RETYPE INTRO JMP NUL /ONLY TYPED ... /NORMAL EXIT, XR1 POINTS TO BEGINNING OF BUFFER, /i.e. XR1 POINTS TO FIRST NON-BLANK CHAR IN BUFFER. /COUNT= # OF CHARACTERS READ. EXAMPLE: READ, RDBUF /READ STRING FROM TTY JMP READ /USER KILLED LINE, OR HAS OVERFLOWN /BUFFER, ALLOW RE-ENTRY JMP READ /USER ENTERED ONLY , ALLOW /ENTRY OF ANOTHER LINE. ... /PROCESS THE ENTERED LINE NORMALLY, BEFORE RETURNING TO ALLOW THE USER TO ENTER ANOTHER LINE, YOU MIGHT WANT TO DEFAULT SOME MESSAGES TO LET USER KNOW WHAT HAS HAPPENED, SO THAT MAYBE IT WILL NOT BE REPEATED. GLOBAL VARIABLES: CHAR COUNT IKBUF KBUFL XPONT LOCATIONS USED: 90 ROUTINES USED: MSG CRLF TYPE FNDNB .TP 8;.B 2;.CW; ^&^^CONMSG (PRINT A CONDITIONAL MESSAGE)\& .FILL;.P THIS ROUTINE WILL MATCH A VALUE IN THE "AC" AGAINST A TABLE GIVING POSSIBLE VALUES AND THEIR CORRESPONDING MESSAGE POINTERS. IF THE VALUE IS NOT FOUND IN THE LIST, THE MESSAGE POINTED TO BY "WHAT" IS PRINTED. IT IS UP TO THE USER TO SUPPLY THIS MESSAGE. IF NOT SUPPLIED, IT IS DEFAULTED TO BE "ERROR". THIS ROUTINE IS VERY USEFUL FOR ERROR MESSAGE PRINTOUT, OR OTHER HELPFUL MESSAGES. NOTE: NO CARRIAGE RETURN - LINE FEED IS PRINTED. .B 2;.NF;^^CALLING SEQUENCE: TAD VALUE TO BE SEARCHED JMS TEST TABLE /ADDRESS OF TABLE ... /RETURNS HERE TABLE, -V1; MSG1 /IF AC=V1, PRINT MSG1 -V2; MSG2 /IF AC=V2, PRINT MSG2 ... / ETC. 0; MSGN /END OF LIST /USE ".-1" FOR MSGN FOR NO ZERO MESSAGE LOCATIONS USED: 50 ROUTINES USED: MSG .TP 8;.B 2;.CW; ^&^^KNUM (GET A NUMBER)\& .FILL;.P GETS A DECIMAL NUMBER FROM THE INPUT BUFFER. ASSUMES THAT "RDBUF" OR SOME SIMILAR ROUTINE WAS CALLED BEFORE COMING HERE. ALL BUFFER POINTERS AND COUNTERS MUST BE SETUP IN "RDBUF" FASHION. "XR1" SHOULD BE A PAGE ZERO POINTER TO THE BEGINNING OF THE BUFFER, I.E. IT SHOULD POINT TO THE FIRST NUMBER IN THE SEQUENCE. THE VARIABLE "NUM" IS SET TO THE NUMBER, AND "CHAR" IS SET TO THE FINAL CHARACTER CHECKED. IF "CHAR=0" THEN THERE WERE NO ILLEGAL CHARACTERS, I.E. THE END OF THE BUFFER WAS FOUND FOLLOWING THE NUMBER. .B 2;.NF;^^CALLING SEQUENCE: JMS KNUM /KNUM CALLED ... /NUMBER IN AC /NO ERROR RETURN /STOPS ON FIRST NON-NUMERIC CHAR GLOBAL VARIABLES: NUM CHAR XPONT LOCATIONS USED: 32 .TP 8;.B 2;.CW; ^&^^KTST (TEST THE KEYBOARD)\& .FILL;.P THIS ROUTINE WILL CHECK FOR A POSSIBLE RESPONSE FROM KEYBOARD. THE COMMON APPLICATION OF THIS ROUTINE IS TO PERIODICALLY CHECK FOR INTERRUPT CHARACTERS, LIKE CONTROL "C". IF NO CHARACTER HAS BEEN TYPED, THE ROUTINE EXITS NORMALLY. IF ANYTHING HAS BEEN TYPED, HOWEVER, THE CHARACTER IS READ, WHICH CLEARS THE FLAG, AND CHECKED AGAINST THE TABLE. TABLE FORMAT IS OUTLINED IN DOCUMENTATION OF "TEST" .B 2;.NF;^^CALLING SEQUENCE: KTST TABLE /POINTER TO TABLE ... /RETURNS HERE ON NO RESPONSE ROUTINES USED: TEST LOCATIONS USED: 10 .TP 8;.B 2;.CW; ^&^^MSGC (PRINT A MESSAGE FOLLOWED BY CR-LF)\& .FILL;.P TYPE THE STRING OF SIX BIT PACKED CHARACTERS POINTED TO BY THE PARAMETER AND FOLLOW IT WITH A CARRIAGE RETURN/LINE FEED. USES THE SAME FORMAT FOR MESSAGES AS "MSG" (THE "PAL8" "TEXT" PSEUDO-OP). .B 2;.NF;^^CALLING SEQUENCE: MSGC POINTER TO STRING RETURNS HERE WITH THE AC CLEARED ROUTINES USED: MSG CRLF LOCATIONS USED: 9 .TP 8;.B 2;.CW; ^&^^MSG (PRINT A STRING)\& .FILL;.P PRINT A PACKED "ASCII" STRING. MESSAGES CAN BE PRODUCED USING THE TEXT PSEUDO-OP OF "PAL8". MESSAGES CAN BE ANYWHERE IN THE SAME FIELD, AND MAY EVEN CROSS PAGE BOUNDRIES. SEE THE DOCUMENTATION OF "CRACK" FOR MORE INFORMATION ON THE CODING METHOD. .B 2;.NF;^^CALLING SEQUENCE: MSG POINTER TO STRING ... /Return here with AC cleared POINTER, SIX BIT PACKED ASCII CHARACTERS . . . 0000 OR XX00 AS END OF LIST (Usually produced by doing the following:) POINTER, TEXT "'THIS IS PRINTED'" ROUTINES USED: CRACK TYPE LOCATIONS USED: 11 .TP 8;.B 2;.CW; ^&^^CLEAR (CLEAR THE SCREEN OF A CRT)\& .FILL;.P THIS SUBROUTINE OUTPUTS THE COMMON CHARACTERS NEEDED TO CLEAR THE SCREENS OF MOST CRT TERMINALS. CONTROL "L" AND CONTROL "Z" ARE TYPED WITH A DELAY AFTER THEM TO ALLOW THE SCREEN TO CLEAR ON SOME TERMINALS. .B 2;.NF;^^CALLING SEQUENCE: CLEAR /=JMS CLEAR ... /RETURN HERE,AC CLEARED /AFTER CLEARING SCREEN. ROUTINES CALLED: TYPE LOCATIONS USED: 20 .TP 8;.B 2;.CW; ^&^^CRACK (PRINT TWO CHARS)\& .FILL;.P CRACK AND PRINT THE TWO SIX BIT CHARACTERS IN THE "AC". THIS ROUTINE IS USEFUL TO PRINT PACKED SIX-BIT "ASCII", AS WELL AS PRINTING SOME TYPES OF FILE NAMES. THE METHOD OF CONVERSION IS: .B 2;.NF;^^ 0 = DONE (I.E. 0000 OR XX00) 1 - 37 = ADD 300 40 - 77 = ADD 200 CALLING SEQUENCE: TAD WORD TO CRACK CRACK ... /RETURN HERE IF A ZERO WAS FOUND (XX00 OR 0000) ... /NORMAL RETURN, TWO CHARACTERS PRINTED. IF USER DOES NOT WANT TO DISCRIMINATE BETWEEN FINDING A ZERO (IE END OF STRING TO BE PRINTED) THE CALL COULD BE SET UP AS THE FOLLOWING: TAD WORD TO CRACK CRACK NOP /DO NOTHING IF A ZERO IS FOUND ... /CONTINUE ON YOUR WAY ROUTINES CALLED: TYPE LOCATIONS USED: 31 .TP 8;.B 2;.CW; ^&^^CRLF (TYPE CARRIGE RETURN/LINE FEED AT TERMINAL)\& .FILL;.P ROUTINE TO TYPE A CARRIAGE RETURN CHARACTER (OCTAL 215), AND A LINE-FEED CHARACTER (OCTAL 212). .B 2;.NF;^^CALLING SEQUENCE: CRLF /=JMS CRLF ... /RETURN HERE, AC CLEARED ROUTINES CALLED: TYPE LOCATIONS USED: 9 .TP 8;.B 2;.CW; ^&^^O2D (OCTAL TO DECIMAL CONVERSION)\& .FILL;.P THIS ROUTINE WILL PRINT THE DECIMAL EQUIVALENT OF THE "AC". THE ROUTINE ALLOWS THE USER TO PASS A FLAG INDICATING IF HE WANTS THE CONTENTS OF THE "AC" PRINTED AS A SIGNED OR UNSIGNED NUMBER. IF THE FLAG IS GREATER THAN OR EQUAL TO ZERO (CONVENTIONALLY ZERO) THEN THE VALUE IS PRINTED AS A 12 BIT POSITIVE NUMBER. IF THE FLAG IS LESS THAN ZERO (CONVENTIONALLY -1) THEN THE VALUE IS PRINTED AS A 12 BIT SIGNED NUMBER. .B 2;.NF;^^"EXAMPLE": TAD NUM O2D 0 /FLAG FOR UNSIGNED NUM /IF NUM FOR EXAMPLE =7777 THEN 4095 /WOULD BE PRINTED. "EXAMPLE": TAD NUM O2D -1 /FLAG FOR SIGNED NUM /IF NUM FOR EXAMPLE =7777 THEN -0001 /WOULD BE PRINTED. CALLING SEQUENCE: TAD NUM /WHERE NUM IS VALUE TO BE CONVERTED O2D /CONVERT OCTAL TO DECIMAL. SIGNNUM /THIS IS A FLAG TO TELL IF YOU /WANT THE NUMBER TO BE PRINTED /AS A SIGNED OR UNSIGNED NUMBER. . . . /RETURNS HERE WITH "AC" CLEARED. ROUTINES CALLED: TYPE LOCATIONS USED: 50 .TP 8;.B 2;.CW; ^&^^QOP (QUICK OCTAL PRINT)\& .FILL;.P SUBROUTINE TO TYPE A 4-DIGIT OCTAL NUMBER. PRINTS THE 4 OCTAL DIGITS HELD IN THE "AC" AT TIME OF CALL RETURNS WITH CLEARED "AC". .B 2;.NF;^^CALLING SEQUENCE: TAD WORD TO PRINT QOP ... /RETURN AC = 0 ROUTINES USED: TYPE LOCATIONS USED: 25 .TP 8;.B 2;.CW; ^&^^SPACE (PRINT THE NUMBER OF SPACES CARRIED IN THE AC)\& .FILL;.P THIS IS A SIMPLE SUBROUTINE TO PRINT THE NUMBER OF SPACES CARRIED IN THE "AC". USED FOR FORMATTING OUTPUT, PUTTING TEXT IN COLUMNS, ETC. .B 2;.NF;^^CALLING SEQUENCE: TAD NUMBER SPACES SPACE ... /RETURNS WITH AC=0 ROUTINES CALLED: TYPE LOCATIONS USED: 10 .TP 8;.B 2;.CW; ^&^^TREAD (READ A NON-LEADER/TRAILER CHARACTER FROM THE TELETYPE)\& .FILL;.P READ A NONZERO, NONLEADER/TRAILER CHARACTER FROM THE TELETYPE CALLED BY "JMS TREAD". UPON RETURN, THE "AC" CONTAINS THE CHARACTER READ. LOWER CASE IS CONVERTED TO UPPER CASE. .B 2;.NF;^^CALLING SEQUENCE: TREAD ... /RETURN HERE AC=CHAR ROUTINES CALLED: TYPE GLOBAL VARIABLES: CHAR LOCATIONS USED: 48 .TP 8;.B 2;.CW; ^&^^FIND (13 BIT COMPARISON OF TEST VALUE AND CONTENTS OF AC)\& .FILL;.P A ROUTINE TO COMPARE TWO 12 BIT NUMBERS, AND TO BRANCH ON SUCCESS. THERE ARE FOUR POSSIBLE COMPARISONS, "EQ", "LE", "NE" ,AND "GT". .B 2;.NF;^^CALLING SEQUENCE: TAD VALUE TO COMPARE FIND TEST INSTRUCTION (I.E. GT...);TEST NUMBER;SUCCESS ADDRESS; 0 (A ZERO DENOTES END OF TEST "TABLE") THIS CALL PERFORMS: IF VALUE TO COMPARE MEETS REQUIREMENTS OF TEST INSTRUCTION WHEN MATCHED AGAINST THE TEST NUMBER THEN BRANCH TO THE SUCCESS ADDRESS, ELSE MOVE TO NEXT COMPARISON. ANY NUMBER OF SUCH ENTRIES IN THE TABLE MAY FOLLOW CALL. IF VALUE FAILS ALL COMPARISONS, RETURN TO LOCATION FOLLOWING TEST TABLE. UPON EXIT, CONTENTS OF AC=0 AN EXAMPLE TABLE AND USE OF THIS ROUTINE: FIND EQ;"A;FOUNDA EQ;203;7600 /FOUND "^C", RETURN TO MONITOR 0 /END OF TABLE LOCATIONS USED: 19 .TP 8;.B 2;.CW; ^&^^FNDNB (NEXT NON-BLANK CHARACTER)\& .FILL;.P ROUTINE TO SEARCH A BUFFER POINTED TO BY "XR1" FOR THE NEXT NON-BLANK CHARACTER. "XR1" IS SET UP AS A PAGE ZERO POINTER AND MUST BE ASSIGNED A VALUE. THIS IS CALLED ONLY AFTER THE BUFFER IS FILLED UP, USUALLY BY "RDBUF". .B 2;.NF;^^CALLING SEQUENCE: FNDNB JMP EOI /END-OF-IMAGE RETURN, AC IS CLEARED ... /NORMAL - AC = CHAR GLOBAL VARIABLES: CHAR COUNT XPONT LOCATIONS USED: 17 .TP 8;.B 2;.CW; ^&^^OCTP (GENERAL OCTAL PRINT)\& .FILL;.P THIS ROUTINE IS VERY "FORMAT" ORIENTED, AND IF USER JUST WANTS TO TYPE OUT AN OCTAL VALUE, USER MIGHT WANT TO CHECK OUT THE QUICK OCTAL ROUTINE. .B 2;.NF;^^CALLING SEQUENCE: TAD VALUE /GET THE NUMBER USER WISHES TO OUTPUT OCTP /=JMS OCTP N /N=NUMBER OF SPACES TO BE OUTPUT BY ROUTINE ... /RETURN HERE AFTER PERFORMING REQUESTED FORMAT. /IF N>0 THEN ROUTINE PRINTS NUMBER AS IS /IF N<0 THEN ROUTINE PRINTS NUMBER AS A SIGNED /VALUE "EXAMPLE": IF N<0 THEN 7777 IS PRINTED AS -1 IF N>4 THEN 7777 IS PRINTED AS 7777 NOTE: IF USER SPECIFIES THAT ONLY ONE SPACE IS TO BE USED AND ALSO SPECIFIES THAT THE MINUS SIGN MODE IS ON (REMEMBER, THIS IS DONE BY N<0 ), THEN IF THE NUMBER TO PRINTED IS LESS THAN ZERO, WE HAVE AN INDEFINITE FORM (IE SHOULD THE MINUS SIGN BE PRINTED, OR JUST ONE DIGIT). THE SITUATION IS RECTIFIED BY PRINTING AN I FOR INDEFINITE. NOTE: IF ABS(N) IS GREATER THAN 4, THEN ABS(N)-4 BLANKS ARE PRINTED BEFORE THE NUMBER ITSELF IS PRINTED. ALSO, ALL LEADING ZEROS ARE CHANGED TO BLANKS. LOCATIONS USED: 95 ROUTINES CALLED: TYPE .TP 8;.B 2;.CW; ^&^^RCHAR (READ A CHAR FROM THE KEYBOARD)\& .FILL;.P WAITS FOR USER TO STRIKE A KEY ON THE KEYBOARD, THEN RETURNS THE "ASCII" CODE IN THE ACCUMULATOR. .B 2;.NF;^^CALLING SEQUENCE: JMS RCHAR ... /RETURN HERE, AC=CHAR READ LOCATIONS USED: 6 .TP 8;.B 2;.CW; ^&^^TEST (TRANSFER TO ADDRESS BY CHARACTER)\& .FILL;.P GIVEN AN ADDRESS OF A TABLE, CHECKS IF THE CONTENTS OF "AC" IS IN THE TABLE, AND IF SO, TRANSFERS TO THE CORRECT ADDRESS. THIS ROUTINE IS MOST USEFUL TO SIMULATE A TYPE OF THE "CASE" STATEMENT. .B 2;.NF;^^CALLING SEQUENCE: TAD CHAR /GET TEST CHARACTER IN AC TEST /TEST IT ! TBLAD /ADDRESS OF TABLE ... /CHARACTER NOT IN TABLE /AC CLEARED UPON ANY RETURN TBLAD, -CHAR1; ADDR1 -CHAR2; ADDR2 ...; ... 0 /END OF LIST (ZERO) LOCATIONS USED: 19 .TP 8;.B 2;.CW; ^&^^TYPE (TYPE ONE CHARACTER ON THE TTY)\& .FILL;.P PRINT THE CONTENTS OF "AC" ON THE TELETYPE. CLEAR THE ACCUMULATOR BUT LEAVE THE LINK ALONE. THE LINK MAY BE USED BY PROGRAMS LIKE THE SIMPLE OCTAL PRINTING ROUTINE. THIS ROUTINE DOES THE "TLS" FIRST, AND WAITS ON THE FLAG, WHICH MAY BE SLIGHTLY SLOWER THAN THE METHOD OF USING ONE "TLS" AT THE BEGINING OF THE PROGRAM, AND THEN WAITING FOR THE PREVIOUS CHARACTER TO PRINT. TO BE SURE THAT THE FIRST CHARACTER IS NOT LOST, THE SEQUENCE "CMA;TYPE" COULD BE INSERTED AT THE BEGINING OF A PROGRAM TO INITIALIZE THINGS. .B 2;.NF;^^CALLING SEQUENCE: TAD CHAR /LOAD AC WITH CHAR TO PRINT JMS TYPE /PRINT IT. . . . . /RETURN HERE WITH AC CLEAR LOCATIONS USED: 6