/DECNET/8 V1A NETWORK INFORMATION PROGRAM / / / / / / / / / / / /COPYRIGHT (C) 1976,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / / APRIL, 1976 STANLEY RABINOWITZ /JR 12-JAN-77 ADDED NSP CYCLE2 COMPATIBLILTY / / DECNET/8 RELEASE VERSION 1 / DECNET/8 PATCH LEVEL A / APRIL 8,1977 / VERSION=1 PATCH="A / / / SYMBOLIC OFFSETS INTO ERRTAB / ERRTAB IS A TABLE WHICH OCCURS IN EACH LINE DRIVER / THIS TABLE CONTAINS 14. 12 BIT CUMULATIVE ERROR COUNTS LINTYP= 0 /LINE TYPE LINVER= LINTYP+1 /VERSION NUMBER OF DRIVER LINPAT= LINVER+1 /PATCH LEVEL OF DRIVER NAKHCRC=LINPAT+1 /NAK WITH HEADER CRC ERROR NAKDCRC=NAKHCRC+1 /NAK WITH DATA CRC ERROR NAKREP= NAKDCRC+1 /NAK WITH REP RESPONSE ERROR NAKDO= NAKREP+1 /NAK WITH DATA OVERRUN ERROR NAKBU= NAKDO+1 /NAK WITH BUFFER UNAVAILABLE ERROR NAKHFE= NAKBU+1 /NAK WITH HEADER FORMAT ERROR NAKMTL= NAKHFE+1 /NAK WITH MESSAGE TOO LONG MSGHCRC=NAKMTL+1 /MESSAGE WITH HEADER CRC ERROR MSGDCRC=MSGHCRC+1 /MESSAGE WITH DATA CRC ERROR MSGREP= MSGDCRC+1 /REP RESPONSE TIMEOUT ERROR MSGDO= MSGREP+1 /MESSAGE WITH DATA OVERRUN ERROR MSGBU= MSGDO+1 /MESSAGE WITH BUFFER UNAVAILABLE ERROR MSGHFE= MSGBU+1 /MESSAGE WITH HEADER FORMAT ERROR MSGMTL= MSGHFE+1 /MESSAGE TOO LONG ERROR ONLINL= MSGMTL+1 /TIME OF DAY NODE WENT ON-LINE LAST (LOW ORDER) ONLINH= ONLINL+1 /HIGH ORDER ONLIND= ONLINH+1 /DATE NODE WENT ON-LINE LAST (OS/8 FORMAT) MSGSNDS=ONLIND+1 /# OF MESSAGES SENT SINCE ONLINE (DBL WORD) MSGRCVS=MSGSNDS+2 /# OF MSGS RCVD SINCE ONLINE (DBL WORD) RSTSUC= MSGRCVS+2 /# OF TIMES RESTARTED SUCCESSFULLY RSTUNS= RSTSUC+1 /# OF TIMES RESTART ATTEMPTED ERRLEN=RSTUNS+1 /NEED TIME AND DATE LAST ZEROED /ERROR TRIPLETS HAVE THE FOLLOWING FORM: /WORD 0: CUMULATIVE COUNT SINCE LAST CLEARED THRESH= 1 /WORD 1: THRESHOLD COUNTER THRESR= 2 /WORD 2: THRESHOLD RESET VALUE /LINE TYPES: KL8JTYP=1 /KL8J-A SERIAL ASYNCHRONOUS KL8ETYP=2 /KL8E " KL8MTYP=3 /KL8M " KL8ATYP=4 /KL8A " DP8ETYP=20 /DP8E SERIAL SYNCHRONOUS DKC8TYP=40 /DKC8-A PARALLEL INERFACE LOCLTYP=100 /LOCAL CONNECT /DUMMY SECTION TO DEFINE CCB OFFSETS NOPUNCH *0 CCBSTA, 0 /STATE WORD CCBDOT, 0 /DEST OBJECT TYPE CCBDN1, 0 /DEST NAME CCBDN2, 0 /(SIXBIT) CCBDN3, 0 CCBDN4, 0 CCBDN5, 0 CCBDN6, 0 CCBDG, 0 /DEST GROUP CCBDU, 0 /DEST USER CCBSOT, 0 /* SOURCE OBJECT TYPE CCBSN1, 0 /* SOURCE NAME CCBSN2, 0 /* CCBSN3, 0 /* CCBSN4, 0 CCBSN5, 0 CCBSN6, 0 CCBSG, 0 /* SOURCE GROUP CCBSU, 0 /* SOURCE USER [P,PN]... CCBTSK, 0 /* TASK BOUND TO THIS CCB CCBDNO, 0 /DEST NODE (RESERVED) CCBLIN, 0 /PHYSICAL LINK NUMBER (DDCMP LINE) CCBND1, 0 /NODE NAME FOR THIS CONNECTION CCBND2, 0 CCBND3, 0 CCBDST, 0 /DSTADR THIS CONNECTION CCBDS2, 0 CCBSRC, 0 /SRCADR THIS CONNECTION CCBSR2, 0 CCBPH, 0 /HEAD OF TRANS REQS WAITING FOR POST CCBTH, 0 /HEAD OF TRANS REQS WAITING FOR TRANS CCBTT, 0 /TAIL OF TRANS/POST QUEUE (NEWEST REQST) CCBRH, 0 /HEAD RECV Q CCBRT, 0 /TAIL RECV Q CCBTRQ, 0 /TRANSMIT REQCNT (FROM USER RECEIVES) CCBTSG, 0 CCBRRQ, 0 /RECEIVED REQCNT (FROM LINE) CCBRSG, 0 CCBCON, 0 /POINTS TO CONNECT PACKET CCBDIS, 0 /POINTS TO DISCONNECT PACKET CCBINT, 0 /POINTS TO INTERRUPT PACKET (ONLY 1 ALLOWED) CCBIH, 0 /INTERRUPT Q HEAD CCBIT, 0 /INTERRUPT Q TAIL CCBIC, 0 CCBRSN, 0 /GETS REASON CODE FOR INTERRUPT CCBDRL, 0 /* DERAIL ADDR (PSEUDO AST) CCBXIT, 0 /NON REENTRANT EXIT CODE CCBAST, 0 /CHECK IF SHOULD RESCHEDULE CCBAS2, 0 CCBAS3, 0 CCBAS4, 0 CCBCDF, 0 /USERS MAINLINE CDF CCBGLK, 0 /SETS USERS MAINLINE LINK CCBEXI, 0 /DISPATCH ON EXIT PC CCBXPC, 0 /AST DE-QUEUE EXIT PC CCBPC, 0 /USERS MAINLINE PC CCBAC, 0 /USERS MAINLINE AC CCBTSW, 0 /POINTER TO TASK SW INHIBIT FLAG CCBRTN, 0 CCBDXT, 0 CCBCHN, 0 CCBOPL, 0 /BYTE COUNT IN OPTDATA AREA CCBOPT, 0 CCBSIZ= CCBOPL+11-CCBSTA /TALLY ALL WORDS IN ACTUAL CCB ENPUNCH / LINK TABLE (LNKTAB) (LOCATED AT AN ADDRESS .GT. 100) IN NSPFLD / INDEXED BY LOGICAL LINK NUMBER STARTING WITH 1 / ENTRY .LT. 100 - REPRESENTS CHANNEL NUMBER USING THIS LOGICAL LINK / ENTRY .GT. 100 - POINTER TO NEXT AVAILABLE LOGICAL LINK # / ENTRY = 0 - LAST AVAILABLE LOGICAL LINK # IN CHAIN / CONNECT CONTROL BLOCK TABLE (CCBTAB) / LOCATED IN NSPFLD / TWO WORD ENTRIES / INDEXED BY CHANNEL NUMBER (BEGINNING WITH 1) /0. CDF TSKFLD /CDF TO FIELD CONTAING CCB FOR THIS CHANNEL /1. CCBADR /ADDRESS OF CCB CCBLEN=2 / CCBCDF=0 CCBADR=1 / NODE TABLE (NODTAB) / LOCATED IN NSPFLD / FIVE WORD ENTRIES /0-2 NODE NAME /3. PHYSICAL LINE NUMBER /4. NODE NUMBER (BITS 4-11) / BIT 0=1 IF THIS IS AN ADJACENT NODE NODLEN=5 NODNAM=0 NODLIN=3 NODNUM=4 /DDCMP STATE WORD: / 0 DOWN / 1 STARTING PHASE 1 / 2 STARTING PHASE 2 / 3 UP / LINE CONTROL BLOCK TABLE (LCBTAB) / LOCATED IN DDCFLD / 'LCBLEN'=NUMBER OF WORDS PER ENTRY / INDEXED BY LINE NUMBER (BEGINNING AT 0) /0. CDF INTFLD /CDF TO FIELD CONTAING INTERRUPT SERVICE ROUTINE /1. ERRPTR /POINTER TO ERRTAB FOR THIS DRIVER /4 STATE WORD FOR LINE LCBFLD=0 ERRTAB=1 LSTATE=4 / LINE CONTROL BLOCK / /0 CDF TO INTERRUPT SERVICE ROUTINE /1 ADDRESS OF ERROR TABLE /4 STATE OF LINE / BIT 0 SET IF START RECEIVED / BIT 1 SET IF CURRENTLY SENDING MESSAGE / BITS 10-11 CONTAIN DDCMP STATE WORD / MAXLIN /NUMBER OF LINES [0 ORIGIN] / MAXCCB /NUMBER OF CHANNELS [1 ORIGIN] / MAXLNK /NUMBER OF LOGICAL LINK NUMBERS [YY ORIGIN] / UTILITY ROUTINES / JMS OUT /SENDS LINE TO LOG DEVICE WITH CR/LF / /RESETS POINTERS / JMS ASSIG /ASSIGNS LOG DEVICE / JMS DASSIG /DEASSSIGNS LOG DEVICE / JMS LIST /MOVES SIXBIT MESSAGE POINTED TO / PTR TO MSG /TO OUTPUT LINE BUFFER [I.E. PRINTS IT] / /"$" PRINTS AS CHAR IN SFLAG OR IGNORED IF / /SFLAG CONTAINS A 0 / TAD (CHAR /PRINTS CHARACTER / JMS PRINT / TAD (NUM /PRINTS 4-DIGIT OCTAL NUMBER WITHOUT LEADING 0'S / JMS NPRINT /PADS ON LEFT WITH CONTENTS OF PAD (OR NOTHING / /IF PAD CONTAINS A 0). NUMBER OF LEADING / /0'S LEFT IN 'DISCARD' / TAD (NUM /PRINTS 4-DIGIT OCTAL NUMBER / JMS OPRINT /WITH LEADING 0'S / TAD (NUM /SAME AS NPRINT, BUT IN DECIMAL / JMS DPRINT / JMS TPRINT /PRINTS TIME OF DAY AND OPTIONAL DATE / JMS SPACE /PRINTS N SPACES / N / JMS PPN /PRINTS NAME AND PPN POINTED TO / PTR TO NAME /FOLLOWED BY SPACES. TOTAL WIDTH=18 CHARS / JMS PNAME /PRINTS 1-6 CHAR NAME POINTED TO / PTR TO NAME /SETS DISCARD / JMS SKIPF /SKIP IF BRIEF / JMS SKIPE /SKIP IF DETAILED / JMS LISTER /COMBINATION OF LIST FOLLOWED BY OUT / JMS CRLF /PRINTS A BLANK LINE ON LOG DEVICE / JMS TIME /PRINTS TIME LOCATED IN ACL,ACH / /DESTROYING THESE 2 WORDS IN PROCESS / TAD (ADDR /ADDS DOUBLE WORD (LOW,HIGH) POINTED TO BY AC / JMS DBLADD /TO DOUBLE WORD IN ACL,ACH / TAD (ADDR /SUBTRACTS DOUBLE WORD (LOW,HIGH) POINTED TO BY AC / JMS DBLSUB /FROM DOUBLE WORD IN ACL,ACH / TAD (ENTRY NO /SETS UP 'GET' FOR LATER USE / JMS SET /ENTRIES START AT 0 / TABLE BASE / CDF TO TABLE FIELD / TABLE WIDTH / JMS GET /GETS A WORD FROM AN ENTRY IN A TABLE / ENTRY OFFSET /ITEM WITHIN ENTRY (STARTS AT 0) / JMS SPPAD /PRINTS NUMBER OF SPACES PREV NUMBER HAD LEADING 0'S / FUTURE PLANS FOR NIPSET COMMANDS /HELP PRINTS LIST OF NIPSET COMMANDS /NIP RUNS NIP /NIP/SW/SW... RUNS NIP WITH CERTAIN SWITCHES /SET/SW/SW.. SETS DEFAULT SWITCHES FOR NIP /II INHIBIT INCOMING CONNECTIONS /IE ENABLE INCOMING CONNECTIONS / RERUNS NIPSET / PUTS NIPSET IN RUNWAIT / NIP SWITCHES / /SET MAKES REMAINING SWITCHES DEFAULT / /PHYS PRINT PHYSICAL LINE INFO / /LOG PRINT LOGICAL LINK INFO / /ERR PRINT ERROR INFO / /THR PRINT THRESHOLD COUNTERS / /RESET CLEARS ERROR COUNTERS/ /BRIEF SUMMARY INFORMATION / /DETAIL DETAILED INFORMATION /SWITCHES FOR COMPATIBILITY / /F SAME AS /BRIEF / /E SAME AS /DETAIL / /NP SAME AS /PHYS / /NE SAME AS /ERR / /NC SAME AS /ERR/RESET / /LP SAME AS /LOG /PHYS:N /LOG:N /ERR:N /TASK:N IFNDEF NIPFLD IFNDEF NIPLOC IFNDEF LPT IFDEF LPT IFNDEF NIPLOG LOG=NIPLOG CUR=NIPFLD INIWT=RUNWT TASK=NIP FIELD CUR%10 IFDEF NIPART< PARTNO=NIPART WRITE=1 CPABLE= 0 > IFNDEF NIPRES IFNDEF NIPART <*NIPLOC> IFDEF NIPART <*NIPRES> /RESIDENT PORTION OF THIS TASK: OUTBUF, ZBLOCK 130 ASGMSG, ZBLOCK 3 ASSGN+TASK 0;0 DASMSG, ZBLOCK 3 ASSGN+0 0;0 OUTMSG, ZBLOCK 3 NOPACK+IND 0 OUTBUF IFNDEF SKIMP < DFLAG, 0 /NON-0 FOR DETAILED PRINTOUT PFLAG, 0 /NEG FOR ALL PHYSICAL LINE INFO /0- NO INFO /POS - INFO FOR THAT LINE ONLY CFLAG, 0 /0 - NO INFO ON LOGICAL CHANNELS /NEG - ALL INFO /POS - INFO ON PARTICULAR CHANNEL /LFLAG, 0 /POS - INFO WANTED ON LOGICAL LINK SPECIFIED /TFLAG, 0 /POS - INFO WANTED ON LOGICAL LINK STUFF FOR THIS TASK # EFLAG, 0 /NEG - ALL ERROR INFO /0 - NO ERROR INFO /POS - ERROR INFO FOR LINE SPECIFIED ONLY /DEFAULTS: DFLAGD, -1 PFLAGD, -1 CFLAGD, -1 /LFLAGD, 0 /TFLAGD, 0 EFLAGD, -1 > IFNDEF SKIMP < RESET, 0 /PUT BACK DEFAULT VALUES TO SWITCHES TAD DFLAGD DCA DFLAG TAD PFLAGD DCA PFLAG TAD CFLAGD DCA CFLAG / TAD LFLAGD / DCA LFLAG / TAD TFLAGD / DCA TFLAG TAD EFLAGD DCA EFLAG JMP I RESET > PAGE IFDEF NIPART <*NIPLOC> START, IFNDEF SKIMP < JMS I (RESET > JMS I (GETLINE /GET INPUT FROM OPERATOR JMS I (ASSIG /ASSIGN LOG DEVICE JMS I (SET /GET READY TO ACCESS 'NETTAB' NETTAB CDF NSPFLD 10 /*** JMS I (GET /GET NSP VERSION # 0 DCA NSPV JMS I (GET /GET NSP PATCH LEVEL 1 DCA NSPPAT JMS I (GET /GET DDCMP VERSION # 2 DCA DDCV JMS I (GET /GET DDCMP PATCH LEVEL 3 DCA DDCPAT JMS I (GET /GET OUR NODE NUMBER 4 DCA OURNOD JMS I (GET /GET OUR NODE NAME 5 JMS I (FIXNUL DCA OURNAM JMS I (GET 6 JMS I (FIXNUL DCA OURNAM+1 JMS I (GET 7 JMS I (FIXNUL DCA OURNAM+2 IFNDEF SKIMP < CDF 0 TAD I (DATE /GET TODAY'S DATE DCA TODAY TAD I (TODL /AND TIME DCA TIMEL TAD I (TODH DCA TIMEH CDF CUR JMS I (SKIPE JMP TA JMS I (LIST TTLMSG /PRINT TITLE JMP TB > TA, JMS I (LIST /PRINT BRIEF TITLE TTLMSF TB, JMS I (LIST /PRINT NIP VERSION # VERMSG /*** PRINT OUR NODE NAME AND NUMBER JMS I (OUT JMS I (CRLF /PRINT BLANK LINE IFNDEF SKIMP < TAD I (PFLAG SZA CLA /DO WE WANT PHYSICAL INFORMATION? > JMS I (PHYINF /YES IFNDEF SKIMP < TAD I (CFLAG /NO SZA CLA /DO WE WANT CHANNEL INFORMATION? > JMS I (LOGINF /YES IFNDEF SKIMP < TAD I (EFLAG /NO SZA CLA /DO WE WANT ERROR INFORMATION? > JMS I (ERRINF /YES IFDEF LPT < IFZERO LOG-LPT < TAD (14 /FORMFEED JMS I (PRINT JMS I (OUT > > JMS I (DASSIG /NO CAL SUSPND+FREE JMP START NSPV, 0 /NSP VERSION # NSPPAT, 0 /NSP PATCH LEVEL DDCV, 0 /DDCMP VERSION # DDCPAT, 0 /DDCMP PATCH LEVEL OURNOD, 0 /OUR NODE NUMBER OURNAM, ZBLOCK 3;4000 /OUR NODE NAME IFNDEF SKIMP < TODAY, 0 /TODAY'S DATE TIMEL, 0 /TIME NIP INVOKED TIMEH, 0 PAGE > PHYINF,0 /PRINT PHYSICAL LINE INFORMATION JMS I (LIST /YES PHYMSG /PRINT TITLE FOR PHYSICAL INFO IFNDEF SKIMP < JMS I (SKIPE JMP TC JMS I (LIST /PRINT DDCMP'S VERSION # DDCVER DCA I (PAD TAD I (DDCV JMS I (DPRINT TAD (40 DCA I (PAD TAD I (DDCPAT /AND PATCH LEVEL JMS I (PRINT TAD ("] JMS I (PRINT > TC, JMS I (OUT JMS I (CRLF /SKIP A LINE TAD (-MAXLIN DCA COUNT /MAXLIN LINES DCA LINENO /START AT LINE 0 JMS I (LIST /PRINT PART 1 OF HEADING PHYHED IFNDEF SKIMP < JMS I (SKIPE JMP TD JMS I (LIST /PRINT PART 2 PH2HED > TD, JMS I (OUT JMS I (CRLF IFNDEF SKIMP < TAD I (PFLAG /DO WE WANT EVERYTHING? SPA JMP PHYLUP /HE WANTS ALL THE INFO DCA LINENO /HE WANTS INFO FOR JUST THIS LINE STA DCA COUNT /IN THAT CASE, GIVE HIM JUST 1 DATUM > PHYLUP, CLA TAD LINENO /PRINT INFO FOR PHYSICAL LINE 'LINENO' JMS I (SET LCBTAB CDF DDCFLD LCBSIZ IFNDEF SKIMP < JMS I (GET /GET FIELD OF ERROR TABLE LCBFLD DCA ERFLD JMS I (GET /GET LOCATION OF ERROR TABLE ERRTAB DCA ERRLOC > JMS I (GET /GET STATE OF THIS LINE LSTATE AND (3 /JR MASK ONLY PROTOCOL STATE BITS DCA LINST TAD LINENO JMS I (PRINT2 /PRINT LINE NUMBER JMS I (PRNDNM /PRINT NODE NAME ON OTHER SIDE OF THIS LINE TAD LINST /LOOK AT LINE STATUS CLL RTL TAD LINST /INDEX INTO STATUS TABLE TAD (STATAB JMS I (LIST /PRINT STATE OF LINE IFNDEF SKIMP < JMS I (SKIPE JMP PHYND JMS I (SET /FOR MORE DETAILED INFORMATION ... ERRLOC, 0 /GET SET TO EXAMINE ERROR TABLE ERFLD, HLT ERRLEN JMS I (PTYPE /PRINT LINE TYPE JMS I (GET LINVER JMS I (DPRINT /PRINT LINE VERSION NUMBER JMS I (GET LINPAT JMS I (PRINT /PRINT PATCH LEVEL OF LINE CLL STA RTL /-3 TAD LINST SZA CLA JMP PHYND /LINE NOT ACTIVE JMS I (SPACE /LINE ACTIVE 1 JMS I (GET ONLINL DCA I (ACL /GET TIME LINE CAME UP JMS I (GET ONLINH DCA I (ACH JMS I (GET ONLIND DCA I (ACDATE JMS I (TPRINT /PRINT TIME AND DATE > PHYND, JMS I (OUT ISZ LINENO /GO ON TO NEXT LINE ISZ COUNT JMP PHYLUP JMP I PHYINF /RETURN LINST, 0 /STATE OF LINE COUNT, 0 LINENO, 0 PAGE LISTER, 0 /PRINT SIXBIT LINE WITH CRLF TAD I LISTER JMS LIST JMS OUT ISZ LISTER JMP I LISTER LIST, 0 /PRINT SIXBIT LINE WITH NO CRLF SZA JMP .+3 /ARG MAY BE IN AC OR IN NEXT LOC TAD I LIST ISZ LIST DCA PTR LSTLUP, TAD I PTR RTR RTR RTR JMS SIXLST /PRINT LEFT HALF TAD I PTR JMS SIXLST /PRINT RIGHT HALF ISZ PTR JMP LSTLUP SIXLST, 0 /PRINT SIXBIT CHAR AND (77 SNA JMP I LIST /0 DENOTES END OF STRING TAD (40 AND (77 /CONVER TO 7-BIT ASCII TAD (40-44 /CHECK FOR $ SNA JMP DOLLAR TAD (44 /RESTORE CHARACTER JMP SIX2 DOLLAR, TAD I (SFLAG SNA CLA TAD (40-"S TAD ("S SIX2, JMS PRINT JMP I SIXLST SFLAG, 0 /NON-0 IF WANT "S" PTR, 0 CRLF, OUT, 0 /PRINT CRLF AND OUTPUT LINE TO LOG DEVICE JMS PRINT /PUT 0 AT END CAL SENDW+FREE LOG OUTMSG TAD (OUTBUF DCA LPTR JMP I OUT LPTR, OUTBUF /POINTS INTO OUTPUT LINE BUFFER PRINT, 0 AND (377 DCA I LPTR TAD LPTR /CHECK END OF LINE CLL TAD (-OUTBUF-130 SNL CLA /DON'T INCREMENT IF LINE FULL ISZ LPTR /MORE ROOM JMP I PRINT /SET UP TABLE AND TABFLD /GET WORD FROM TABLE, OFFSET FOLLOWS GET, 0 TAD I GET /GET OFFSET ISZ GET TAD TABLE DCA PTR TABCDF, HLT /SET TO CDF TO TABLE FIELD TAD I PTR CDF CUR JMP I GET TABLE, 0 /SET TO TABLE ADDRESS (OFFSET 0) /SET UP INFO FOR GET / TAD (ENTRY NO /DEFAULT IS 0 / JMS SET / TABLE BASE / TABLE CDF / TABLE WIDTH TEM, 0 BASE, 0 CNT, 0 SET, 0 DCA TEM TAD I SET /GET TABLE BASE DCA BASE ISZ SET TAD I SET /GET CDF JMS I (CHKCDF /CHECK THAT IT'S REALLY A CDF DCA TABCDF ISZ SET TAD I SET /GET WIDTH CIA DCA CNT ISZ SET TAD TEM ISZ CNT JMP .-2 TAD BASE DCA TABLE JMP I SET SPACE, 0 TAD I SPACE CIA DCA CNT ISZ SPACE TAD (40 JMS I (PRINT ISZ CNT JMP .-3 JMP I SPACE /TAKES 2 SIXBIT CHARS AND CHANGES NULLS TO SPACES FIXNUL, 0 SNA JMP ALL0 /TWO NULLS DCA FTEM TAD FTEM AND (77 /LOOK AT RIGHTMOST BYTE SNA CLA TAD (40 /CHANGE NULL TO SPACE TAD FTEM JMP I FIXNUL /LEAVE IT IN AC ALL0, TAD (4040 /RETURN TWO SPACES JMP I FIXNUL FTEM, 0 PAGE IFNDEF SKIMP < /ROUTINE TO PRINT RTS-8 TIME SPECIFIED /IN LOCATIONS ACL, ACH (DESTROYING THEM) /THEN PRINTS DATE IN ACDATE IF NON-ZERO TPRINT, 0 DCA HRS DCA MINS DCA SECS TAD (FUDGE JMS DBLSUB /TAKE OFF MIDNIGHT FUDGE TO GET /NUMBER OF TICKS AFTER MIDNIGHT CLL STA RTL /3 NUMBERS TO PRINT DCA TKNT / HH:MM:SS TAD (HRCON /SET UP DCA CON TAD (HRS-1 DCA TIMPTR TAD (40-"0 TIMLUP, TAD ("0 DCA I (PAD /"0" PAD EXCEPT FIRST TIME SPACE PAD TAD I TIMPTR /GET DELIM CHARACTER JMS I (PRINT /PRINT IT ISZ TIMPTR TLOOP, TAD CON JMS DBLSUB /SUBTRACT # OF TICKS IN HR/MIN/SEC ISZ I TIMPTR /INCREMENT # OF HRS/MINS/SECS TAD ACH SMA CLA /AC GOES NEG ON OVERFLOW JMP TLOOP TAD CON JMS DBLADD /PUT BACK IN AMOUNT WHICH CAUSED OVERFLOW ISZ CON /GET READY FOR NEXT PART ISZ CON STA TAD I TIMPTR JMS PRINT2 /PRINT THIS PART ISZ TIMPTR ISZ TKNT JMP TIMLUP JMS I (SPACE 2 TAD (40 DCA I (PAD JMS I (DATEPR JMP I TPRINT CON, HRCON /POINTS TO CONVERSION # TIMPTR, .+1 /PTS TO 'HRS', 'MINS', OR 'SECS' 40 HRS, 0 /THESE MUST BE CONSECUTIVE ": MINS, 0 ": SECS, 0 TKNT, 0 TEMPH=3^SHERTZ%40 FUDGE, -600^SHERTZ;-25^SHERTZ-TEMPH-1 /NUMBER OF TICKS IN A DAY HRCTEM=SHERTZ%40 HRCON, 7020^SHERTZ;7^SHERTZ+HRCTEM%10 /NUMBER OF TICKS IN AN HOUR MINCON, 74^SHERTZ;17^SHERTZ%2000 /NUMBER OF TICKS IN A MINUTE SECCON, SHERTZ;0 /NUMBER OF TICKS IN A SECOND /THE ABOVE 3 CONVERSION FACTORS MUST BE CONSECUTIVE DBLADD, 0 DCA Q CLL TAD I Q TAD ACL DCA ACL ISZ Q RAL TAD I Q TAD ACH DCA ACH JMP I DBLADD Q, 0 ACL, 0 /TIME TO BE PRINTED ACH, 0 /GETS DESTROYED ACDATE, 0 /DATE TO BE PRINTED DBLSUB, 0 DCA Q TAD I Q CIA CLL TAD ACL DCA ACL ISZ Q CML RAL TAD I Q CIA TAD ACH DCA ACH JMP I DBLSUB > PRINT2, 0 /PRINT TWO DIGITS DCA PRTEMP DCA TENS TAD PRTEMP TENLUP, ISZ TENS TAD (-12 /SUBTRACT 10 SMA JMP TENLUP TAD (12+60 /CONVERT TO CHARACTER DCA PRTEMP /SAVE LOW ORDER STA TAD TENS SNA JMP .+3 TAD ("0 SKP TAD I (PAD JMS I (PRINT /PRINT HIGH ORDER DIGIT TAD PRTEMP JMS I (PRINT /PRINT LOW ORDER DIGIT JMP I PRINT2 PRTEMP, 0 TENS, 0 IFNDEF SKIMP DPRINT, 0 DCA NUM TAD (DTABLE JMS KPRINT JMP I DPRINT NPRINT, 0 DCA NUM TAD (OTABLE JMS KPRINT JMP I NPRINT NUM, 0 KPRINT, 0 /LINK ON MEANS PRINT LEADING 0'S DCA NPTR DCA DISCARD NPR1, DCA QUOT /ZERO QUOTIENT JMP NPLOOP /JUMP INTO LOOP NPR2, DCA NUM /UPDATE REMAINDER ISZ QUOT /BUMP QUOTIENT BY 1 NPLOOP, TAD I NPTR /SUBTRACT 1000, 100, OR 10 SNA /ARE WE AT END OF TABLE? JMP NPR3 /YES, SAW 0. CLL TAD NUM /SUBTRACT FROM 'NUM' SZL /HAVE WE GONE NEGATIVE? JMP NPR2 /NO, KEEP SUBTRACTING CLA /YES, THIS DIGIT DONE ISZ NPTR /POINT TO NEXT DIVISOR IN LIST TAD QUOT /LOOK AT NEW DIGIT SNA /IS IT 0? JMP LEAD0 /YES, IGNORE LEADING 0'S TAD ("0 /NO, CONVERT TO ASCII JMS I (PRINT /OUTPUT DIGIT STL CLA RAR /4000 JMP NPR1 /FORCE ZEROES TO PRINT NPR3, TAD NUM /GET REMAINDER (UNIT'S DIGIT) TAD ("0 /CONVERT TO ASCII JMS I (PRINT /ALWAYS PRINT IT JMP I KPRINT /RETURN LEAD0, ISZ DISCARD /COUNT NUMBER OF LEADING ZEROES TAD PAD /PRINT LEADING 0 AS A SPACE OR "0" SNA JMP NPLOOP /IGNORE NULLS JMS I (PRINT JMP NPLOOP NPTR, 0 QUOT, 0 PAD, 40 /NORMALLY ALWAYS SET TO 40 DECIMAL DTABLE, -1000;-100;-10;0 OCTAL OTABLE, -1000;-100;-10;0 SPPAD, 0 /PAD WITH NUMBER OF SPACES EQUAL TO JMS I (SPACE /NUMBER OF LEADING ZEROES PREVIOUS NUMBER HAD DISCARD,0 JMP I SPPAD IFNDEF SKIMP < DATEPR, 0 TAD I (ACDATE /GET DATE SNA CLA JMP I DATEPR /DO NOTHING IF WORD WAS 0 (I.E. NO DATE) TAD I (ACDATE CLL RTL RTL RAL AND (17 /ISOLATE MONTH IN BITS 8-11 OF AC DCA MONTH /SAVE MONTH TAD I (ACDATE /LOOK AT INTERNAL REPRESENTATION AGAIN AND (7 /ISOLATE YEAR DCA YEAR /SAVE IT TAD ("0 DCA PAD TAD I (ACDATE /GET BACK INTERNAL REPRESENTATION CLL RTR RAR AND (37 /ISOLATE DAY OF MONTH JMS I (PRINT2 /OUTPUT IT INTO BUFFER AS TWO DECIMAL DIGITS TAD ("- JMS I (PRINT /THEN PUT OUT A HYPHEN TAD MONTH CLL RAL /MULTIPLY MONTH NUMBER BY 3 TAD (MONLST-2 /GET PTR TO 3-CHAR ABBREVIATION OF MONTH JMS I (LIST /PRINT IT TAD ("- JMS I (PRINT /PUT ANOTHER HYPHEN AFTER IT TAD YEAR /GET BACK YEAR TAD (106 /ADD 70 (DECIMAL) TO IT JMS I (PRINT2 /CONVERT TO TWO DECIMAL DIGITS AND PUT IN BUFFER TAD (40 DCA PAD JMP I DATEPR /RETURN YEAR, 0 MONTH, 0 /PRINT DECIMAL NUMBER OF MESSAGES SENT AND RECEIVED PRTNM, 0 JMS I (CRLF /SPACE DOWN PAGE TAD (MSGSND /INIT POINTER INTO ERRTAB DCA I (GETCPT /IN THE ROUTINE JMS I (PRTNMS /PRINT DOUBLEWORD COUNT SNTTXT /TEXT "MESSAGES TRANSMITTED" JMS I (PRTNMS /PRINT ANOTHER RCVTXT /TEXT "MESSAGES RECEIVED" JMP I PRTNM /DONE PAGE > GETLINE,0 NOP JMP I GETLINE ASSIG, 0 CAL SENDW+FREE LOG ASGMSG JMP I ASSIG DASSIG, 0 CAL SENDW+FREE LOG DASMSG JMP I DASSIG CHKCDF, 0 /VERIFY AC CONTAINS A CDF DCA CHTEM TAD CHTEM AND (7700 TAD (-6200 SZA CLA JMP . /INTERNAL ERROR TAD CHTEM JMP I CHKCDF CHTEM, 0 IFNDEF SKIMP < SKIPE, 0 /SKIP IF DETAILED TAD I (DFLAG SZA CLA ISZ SKIPE JMP I SKIPE > /PRINT DOUBLEWORD MESSAGES SENT COUNT /CALL+1 = TEXT TO FOLLOW NUMBER PRTNMS, 0 TAD I PRTNMS ISZ PRTNMS DCA SRTXT DCA I (SFLAG JMS GETCNT DCA WDL /GET LOW ORDER COUNT STA TAD WDL SZA CLA ISZ I (SFLAG JMS GETCNT SZA ISZ I (SFLAG DCA WDH JMS P2WDS /UNPACK 24 BIT NUMBER JMS I (SPACE 2 JMS I (LIST MESGS /"MESSAGE(S)" JMS I (LIST SRTXT, 0 /GETS POINTER TO "TRANSMITTED" OR "RECEIVED" JMS I (OUT /LIST ON PRINTER JMP I PRTNMS /DONE GETCNT, 0 JMS I (GET GETCPT, 0 /GETS OFFSET TO COUNT ISZ GETCPT /POINT AT NEXT ONE JMP I GETCNT P2WDS, 0 TAD (-20 DCA PFLG TAD (TABL-1 DCA PTRL TAD (TABH-1 DCA PTRH DIGLP, ISZ PTRL ISZ PTRH DCA DIGIT JMP DIVGO DIVLP, ISZ DIGIT DCA PFLG DIVGO, TAD I PTRL SNA JMP DONE STL CIA TAD WDL DCA WDL RAL TAD I PTRH CIA TAD WDH DCA WDH SZL JMP DIVLP TAD WDL TAD I PTRL DCA WDL RAL TAD WDH TAD I PTRH DCA WDH TAD DIGIT TAD PFLG TAD (60 /ASCIIZE IT JMS I (PRINT JMP DIGLP DONE, TAD WDL TAD (60 JMS I (PRINT JMP I P2WDS PFLG, 0 PTRL, 0 PTRH, 0 WDL, 0 WDH, 0 DIGIT, 0 PAGE LOGINF, 0 /PRINT CHANNEL INFORMATION JMS I (CRLF /BLANK LINE JMS I (CRLF JMS I (LIST LOGMSG /PRINT TITLE IFNDEF SKIMP < JMS I (SKIPE SKP JMS I (NSPVM /PRINT NSP VERSION # > JMS I (OUT JMS I (CRLF JMS I (LIST /PRINT PART 1 OF HEADING LOGHED IFNDEF SKIMP < JMS I (SKIPE JMP G2 JMS I (LIST LG2HED /PRINT PART 2 IF /DETAILED > G2, JMS I (OUT JMS I (CRLF /'NOTHER BLANK LINE TAD (-MAXCCB DCA KOUNT CLA IAC DCA CHNLNO /CHANNEL NUMBERS START AT 1 CHNLUP, STA TAD CHNLNO /INDEXING STARTS AT 1 JMS I (SET CCBTAB CDF NSPFLD CCBLEN JMS I (GET 0 /CCBCDF SNA JMP CHNFIN DCA CCCDF JMS I (GET CCBADR /GET FIELD AND LOC OF THIS CCB DCA CCLOC JMS I (SET CCLOC, 0 CCCDF, HLT CCBSIZ IFNDEF SKIMP < TAD I (CFLAG SPA JMP G3 /ALL CHANNELS CIA TAD CHNLNO SZA CLA JMP CHNEND /NOT THIS CHANNEL G3, CLA > TAD CHNLNO /PRINT CHANNEL NUMBER JMS I (PRINT2 JMS I (PCSTAT /PRINT CHANNEL STATUS JMS I (GET CCBLIN JMS I (NPRINT /PRINT LINE # IFNDEF SKIMP < JMS I (SKIPE JMP CHNEND /THAT'S IT FOR BRIEF LISTING JMS I (SPACE 1 JMS I (GET CCBTSK JMS I (NPRINT /PRINT TASK NUMBER JMS I (GETSN /GET SOURCE NAME JMS I (GET CCBSU /AND SOURCE USER # DCA USER JMS I (GET CCBSG DCA GRP /AND OF COURSE HIS GROUP JMS I (PUTNUG /PRINT NAME, USER, GROUP JMS I (GET CCBSOT JMS I (PRINT2 /PRINT SOURCE OBJECT TYPE JMS I (GET CCBSRC JMS I (NPRINT /PRINT LOGICAL LINK # OF SOURCE TAD I (USEFLG SNA CLA JMP CHNEND /PRINT NO MORE IF CHANNEL AIN'T IN USE JMS I (GETDN /GET DESTINATION NAME JMS I (GET CCBDU DCA USER /GET DEST USER JMS I (GET CCBDG DCA GRP /DON'T FORGET HIS GROUP JMS I (PUTNUG /PRINT NAME, USER, GROUP JMS I (GET CCBDOT JMS I (PRINT2 /PRINT HIS OBJECT TYPE TOO JMS I (GET CCBDST JMS I (NPRINT /AND HIS LOG LINK NO. > CHNEND, JMS I (OUT CHNFIN, ISZ CHNLNO ISZ KOUNT JMP CHNLUP JMP I LOGINF CHNLNO, 0 /CHANNEL NUMBER KOUNT, 0 IFNDEF SKIMP < GRP, 0 USER, 0 PAGE > PRNDNM, 0 JMS I (SPACE 4 /FOLLOWED BY 4 SPACES DCA NODN TAD (-MAXLIN DCA KONT NDLUP, TAD NODN /SEARCH NODE TABLE FOR THIS LINE NUMBER JMS I (SET /'NODN' IS THE ENTRY NUMBER WE ARE LOOKING AT NODTAB CDF NSPFLD NODLEN JMS I (GET NODNAM /GET NAME FROM NODE TABLE JMS I (FIXNUL DCA NAM JMS I (GET NODNAM+1 JMS I (FIXNUL DCA NAM+1 JMS I (GET NODNAM+2 JMS I (FIXNUL DCA NAM+2 /MAYBE THIS SHOULD BE A SUBROUTINE JMS I (GET /GET LINE NUMBER ASSOCIATED WITH THIS NAME NODLIN AND (377 /SAFETY CIA TAD I (LINENO SZA CLA JMP NDLEND /WRONG LINE JMS I (GET NODNUM SPA /ADJACENT? JMP GOTNAM /YES NDLEND, CLA /NO ISZ NODN /POINT TO NEXT ENTRY IN NODTAB ISZ KONT JMP NDLUP /KEEP LOOKING JMS I (LIST /COULDN'T FIND THIS LINE UNKNOWN JMP TE /REJOIN PROCESSING AFTER TELLING GUY GOTNAM, AND (377 /ISOLATE NODE NUMBER DCA NODEN JMS I (LIST NAM /PRINT NAME TAD ("( JMS I (PRINT DCA I (PAD TAD NODEN JMS I (NPRINT TAD (40 DCA I (PAD TAD (") JMS I (PRINT JMS I (SPPAD /PAD WITH SPACES ON RIGHT TE, JMS I (SPACE 1 JMP I PRNDNM NAM, ZBLOCK 3;4000 IFNDEF SKIMP < KONT, 0 NODN, 0 NODEN, 0 /NODE NUMBER > IFDEF SKIMP < KONT=KOUNT NODN=CHNLNO NODEN=LOGINF > IFNDEF SKIMP < PTYPE, 0 JMS I (SPACE 4 JMS I (GET LINTYP /GET TYPE OF LINE TAD (-20 SNA /IS IT 20? TAD (5-20 /YES, MAKE 5 TAD (20-40 /NO SNA /IS IT 40? TAD (6-40 /YES, MAKE 6 TAD (40 /NO, RESTORE NUMBER AND (7 /CONVERT 100 TO 0 DCA TM /NOW IN RANGE 0-6 TAD TM /MULTIPLY BY 3 TAD TM TAD TM TAD (TYPTAB /INDEX INTO TYPE TABLE JMS I (LIST /PRINT LINE TYPE JMS I (SPACE 1 JMP I PTYPE TM, 0 > PAGE ERRINF, 0 JMS I (CRLF /2 BLANK LINES JMS I (CRLF JMS I (LISTER /PRINT TITLE ERRMSG TAD (-MAXLIN DCA KON /WANT TO LOOK AT EACH LINE DCA LINENU /STARTING AT LINE 0 IFNDEF SKIMP < TAD I (EFLAG /EVERYTHING? SPA JMP ERRLUP /YES DCA LINENU /NO, JUST THIS LINE STA DCA KON > ERRLUP, CLA TAD LINENU JMS I (SET LCBTAB CDF DDCFLD LCBSIZ JMS I (CRLF JMS I (GET /GET FIELD OF ERROR TABLE LCBFLD DCA ORFLD JMS I (GET /GET ITS LOCATION ERRTAB DCA ORRLOC JMS I (LIST LINMSG TAD LINENU JMS I (PRINT2 TAD (": JMS I (PRINT JMS I (SPACE 3 TAD (-16 /14 ERROR COUNTERS DCA KON1 TAD (-7 /7 OF EACH TYPE DCA KON2 TAD (NAKHCRC DCA ERTY /POINT AT FIRST ERROR COUNTER TAD (EMTB DCA EMG /POINT AT FIRST ERROR MESSAGE TAD (NAKM DCA PROLOG /INITIAL PROLOG IS "NAKS" JMS I (SET ORRLOC, 0 ORFLD, HLT ERRLEN DCA TOTAL ERLP, JMS I (GET /GET NEXT ERROR TRIPLET, FIRST WORD ERTY, 0 SNA JMP NXTERR /NONE OF THESE DCA NUMERS /SAVE NUMBER OF ERRORS JMS I (CRLF JMS I (SPACE 4 /ALIGN WITH NUMBER OF MESSAGES TO FOLLOW JR TAD NUMERS JMS I (DPRINT JMS I (SPACE 2 STA TAD NUMERS DCA I (SFLAG ISZ TOTAL JMS I (LIST PROLOG, 0 TAD I EMG /GET AND PRINT APPROPRIATE ERROR MSG JMS I (LIST NXTERR, CLA IAC DCA I (SFLAG ISZ ERTY /POINT TO NEXT ERROR COUNTER ISZ EMG /POINT TO NEXT ERROR MESSAGE ISZ KON2 JMP .+3 TAD (MSGM /PROLOGUE CHANGES AFTER 7 MESSAGES DCA PROLOG /TO "MSGS" ISZ KON1 JMP ERLP TAD TOTAL SNA CLA /ANY ERRORS ON THIS LINE? JMS NOER /NO JMS I (OUT /YES JMS I (PRTNM /DO MESSAGE COUNTS NOW ISZ LINENU /GO TO NEXT LINE ISZ KON JMP ERRLUP JMP I ERRINF NOER, 0 JMS I (LIST NOERMS JMP I NOER TOTAL, 0 /NON-0 MEANS HAD ERRORS EMG, 0 /PTS TO APPROPRIATE ERROR MESSAGE NUMERS, 0 /NUMBER OF THESE TYPES OF ERRORS LINENU, 0 /LINE NUMBER KON, 0 KON1, 0 KON2, 0 PAGE EMTB, EM1;EM2;EM3;EM4;EM5;EM6;EM7 EM1;EM2;EM3;EM4;EM5;EM6;EM7 MESGS, TEXT /MESSAGE$/ SNTTXT, TEXT / TRANSMITTED/ RCVTXT, TEXT / RECEIVED/ TABL, 3200;1100;3240;3420;1750;144;12;0 TABH, 4611;364;30;2;0;0;0 NAKM, TEXT /NAK$ WITH / MSGM, TEXT /MSG$ WITH / NOERMS, TEXT /NO ERRORS/ LINMSG, TEXT /LINE / IFNDEF SKIMP < PH2HED, TEXT / DRIVER VRSN UP SINCE/ TYPTAB, TEXT /LOCAL/ TEXT /KL8J / TEXT /KL8A / TEXT /KL8M / TEXT /DP8E / TEXT /DKC8 / LG2HED, TEXT / TASK SRCE-NAME[PPN] TYPE LINK DEST-NAME[PPN] TYPE LINK/ MONLST, TEXT /JAN/ TEXT /FEB/ TEXT /MAR/ TEXT /APR/ TEXT /MAY/ TEXT /JUN/ TEXT /JUL/ TEXT /AUG/ TEXT /SEP/ TEXT /OCT/ TEXT /NOV/ TEXT /DEC/ TTLMSG, TEXT /NETWORK INFORMATION PROGRAM/ > TTLMSF, TEXT /NIP/ PATCHM=PATCH-300 PVERS=VERSION^100 VERMSG, 4026 / " V" PVERS+6000+PATCHM / "1A" 0 PHYMSG, TEXT /PHYSICAL LINE STATUS/ DDCVER, TEXT / [DDCMP V/ LOGMSG, TEXT /LOGICAL LINK STATUS/ NSPVER, TEXT / [NSP V/ ERRMSG, TEXT /PHYSICAL LINE ERROR STATUS/ STATAB, TEXT /OFF-LINE/ TEXT /STARTING/ TEXT /STARTING/ TEXT / ON-LINE/ UNKNOWN,TEXT /UNKNOWN*****/ PHYHED, TEXT /LINE NODNAM (#) STATE/ EM1, TEXT /HEADER CRC ERROR$/ EM2, TEXT /DATA CRC ERROR$/ EM3, TEXT /REP ERROR$/ EM4, TEXT /BUFFER$ UNAVAILABLE/ EM5, TEXT /DATA OVERRUN$/ EM6, TEXT /MESSAGE$ TOO LONG/ EM7, TEXT /HEADER FORMAT ERROR$/ LOGHED, TEXT /CHAN STATE LINE/ BOTMOD, TEXT / BOOT / NOTMOD, TEXT /UNUSED / USEMOD, TEXT /IN-USE / STRMOD, TEXT /WAKING / IFNDEF SKIMP< PAGE > IFNDEF SKIMP < GETSN, 0 /GET SOURCE NAME JMS I (GET CCBSN1 JMS I (FIXNUL DCA NAME1 JMS I (GET CCBSN2 JMS I (FIXNUL DCA NAME2 JMS I (GET CCBSN3 JMS I (FIXNUL DCA NAME3 JMP I GETSN GETDN, 0 /GET DESTINATION NAME JMS I (GET CCBDN1 JMS I (FIXNUL DCA NAME1 JMS I (GET CCBDN2 JMS I (FIXNUL DCA NAME2 JMS I (GET CCBDN3 JMS I (FIXNUL DCA NAME3 JMP I GETDN NAME1, 0 NAME2, 0 NAME3, 0 3300 /[ PUTNUG, 0 /PRINT NAME, USER, GROUP JMS I (SPACE 2 JMS I (LIST NAME1 DCA I (PAD TAD I (GRP JMS I (NPRINT TAD I (DISCARD DCA DISTEM TAD (", JMS I (PRINT /COMMA BETWEEN USER AND GROUP TAD I (USER JMS I (NPRINT /PRINT GROUP TAD ("] JMS I (PRINT /] AT END TAD I (DISCARD TAD DISTEM DCA I (DISCARD /COMBINE NUMBER OF LEADING 0'S DISCARDED JMS I (SPPAD /AND PRINT SPACES ON RIGHT TAD (40 DCA I (PAD JMP I PUTNUG DISTEM, 0 NSPVM, 0 /PRINT NSP VERSION # JMS I (LIST /PRINT NSP'S VERSION NUMBER NSPVER DCA I (PAD TAD I (NSPV JMS I (DPRINT TAD (40 DCA I (PAD TAD I (NSPPAT /AND PATCH LEVEL JMS I (PRINT TAD ("] JMS I (PRINT JMP I NSPVM > PCSTAT, 0 /PRINT CHANNEL STATE JMS I (SPACE 2 DCA USEFLG JMS I (GET CCBSTA /GET STATE WORD FROM CCB SNA JMP G4 /NOT IN USE RAL SPA JMP G5 /IN USE RTR RTR SNL CLA JMP G6 /STARTING UP JMS I (LIST /BOOT MODE BOTMOD /PRINT MESSAGE / ISZ USEFLG /*** CHECK WITH JIM JMP I PCSTAT G4, JMS I (LIST /NOT IN USE MESSAGE NOTMOD JMP I PCSTAT G5, CLA JMS I (LIST /PRINT IN-USE MESSAGE USEMOD ISZ USEFLG /NOTE FACT THAT CCB IS IN USE JMP I PCSTAT G6, JMS I (LIST STRMOD /PRINT "STARTING" JMP I PCSTAT USEFLG, 0 /1 IF CHANNEL IS IN USE PAGE $