TITLE LYNX - TYPE OUT ALL SYSTEM TLINKS SUBTTL P. BUDNE @DEC SEARCH MONSYM,MACSYM .REQUIRE SYS:MACREL SALL T1==1 T2==2 T3==3 T4==4 P==17 EV: JRST ST JRST ST ST: RESET MOVE P,[IOWD PDLSIZ,PDL] MOVEI T1,.FHSLF SETO T3, EPCAP CALL INIT CALL WORKER HALTF JRST ST INIT: MOVEI T1,.SNPSY MOVE T2,[RADIX50 0,TTACTL] MOVE T3,[RADIX50 0,STG] SNOOP JSHLT HRLI T2,1 MOVEM T2,TTACTL# MOVE T2,[RADIX50 0,TTLINK] MOVE T3,[RADIX50 0,TTYSRV] SNOOP JSHLT HRLI T2,1 MOVEM T2,TTLINK# RET WORKER: ACVAR MOVE T1,[SIXBIT /TTYJOB/] SYSGT HLLZ P2,T2 TOP: MOVEI T1,(P2) CALL DOIT NOP BOT: AOBJN P2,TOP RET ENDAV. ; Print all links for a given terminal ; Call with terminal number in T1, and TTY ; Returns +2 on win, +1 on error DOIT: ACVAR ;Save away P1 MOVE P1,T1 ;Save argument CALL GETLNK ;Get link information RET ;Loss- return MOVE T5,[POINT 9,T4] ;Load out 4 9-bit bytes TMSG ;Print luser's (Lunkee's) tty number MOVEI T1,.PRIOU ;Onto the tty MOVE T2,P1 ;get tty number again MOVEI T3,10 ;print in octal NOUT ;type it out JSHLT ; CALL PRTUSR ;type associated user name ;< HRROI T1,[ASCIZ / ==> TTY/] ;type out lunkers PSOUT LOOP: ILDB T2,T5 ;fetch first 9 bit byte CAIN T2,777 ;-1? JRST LOOP ;yes, ignore JRST LOOP2 ;no, go type it LOOP1: ILDB T2,T5 ;load next byte CAIN T2,777 ;-1? JRST ELOOP ;yes, check for end TMSG <, TTY> ;no, type next lunker LOOP2: MOVEI T3,10 ;Here to type out link-er MOVEI T1,.PRIOU ;on tty NOUT ;in octal JSHLT CALL PRTUSR ;type user name ELOOP: TLNE T5,770000 ;end of word? JRST LOOP1 ;no, keep looking TMSG < > AOS (P) ;we won (didn't lose) RET ENDAV. ; PEEK link information for tty in T1 ; returns +2 with TTLINK word in T4 ; returns +1 on error GETLNK: ADD T1,TTACTL MOVEI T2,T4 PEEK ;GET TTACTL ENTRY JSHLT JUMPLE T4,.POPJ ;NOT ACTIVE TTY MOVE T1,TTLINK ADD T1,T4 ;ADD TTACTL ENTRY MOVEI T2,T4 ;RESULT TO T4 CALL .PEEK JSHLT CAME T4,[-1] AOS (P) .POPJ: RET .PEEK: TLNE T1,^-<1> ;EXTENDED ADDR?? JRST [ MOVEM T1, PEKMON ; STORE MONITOR ADDRESS MOVEM T2, PEKADR ; SAVE MOVEI T1, PEKBLK ; GET ARG BLOCK XPEEK% ; GO-FOR-IT! ERJMP R RETSKP ] PEEK RET RETSKP ; Type user on a given tty ; Takes TTY in T2 ; Returns +1 allways PRTUSR: ACVAR MOVE TT,T2 ;Save TTY MOVEI T1,.TTDES(TT) ; Make 'terminal designator' MOVE T2,[-3,,GJIBLK] ;Get info SETZ T3, ;Start at top GETJI ;Get job info JFCL TMSG <: (> ;Type : for TTY MOVEI T1,.TTDES(TT) ;Make 'terminal designator' DVCHR ERJMP PRTU.0 HLRE T2,T3 ;Get assigner JUMPL T2,PRTU.0 ;None CAMN T2,GJIBLK+.JIJNO ;Same as job's controller? JRST PRTU.1 ; yes, normal MOVEI T1,"*" ;Otherwise say assigned PBOUT SKIPA T1,T2 PRTU.0: MOVEI T1,.TTDES(TT) ; Make 'terminal designator' MOVE T2,[-3,,GJIBLK] ;Get info SETZ T3, ;Start at top GETJI ;Get job info IFJER. TMSG RET ENDIF. PRTU.1: SKIPE T2,GJIBLK+.JIUNO IFSKP. TMSG ELSE. MOVEI T1,.PRIOU ;Get I/O designator DIRST IFJER. TMSG ENDIF. ENDIF. SKIPG GJIBLK+.JIJNO IFSKP. MOVEI T1,.PRIOU MOVEI T2,"#" BOUT MOVE T2,GJIBLK+.JIJNO MOVEI T3,^D10 NOUT TRN ENDIF. MOVEI T1,")" PBOUT RET ENDAV. PDL: BLOCK GJIBLK: BLOCK 3 PEKBLK: PEKLEN ;*** XPEEK% BLOCK **** .XPPEK ;FUNCTION PEKCNT: 1 ;COUNT 0 ;WORDS XFERED PEKMON: 0 ;MONITOR ADDR PEKADR: 0 ;USER ADDR PEKLEN==.-PEKBLK ;*** END OF XPEEK BLOCK *** JUNK: END <2,,EV>