.TITLE FINGER Finger program .NLIST BEX .ENABL LC ; ; Finger program - lists users from login.dat file ; ; External symbols ; ; Entry symbols ; .GLOBL PRBYT,RDBYT ;i/o entries ; ; System definitions ; .ASECT .MCALL .LGD ;dcnlib definitions .MCALL .EXIT,.PURGE,.LOOKU,.READW,.TTYOU ;rt-11 macroni .MCALL FORMAT ;netlib definitions .LGD ;define login file entry ; ; Module definitions ; CHN = 14. ;login.dat channel ; ; Procedure segment ; .PSECT $BOSI,RO,I ; ; Finger program ; FINGER: .PURGE #CHN ;open login file .LOOKU #ARGBLK,#CHN,#LOGFIL BCS 9$ ;branch if error CLR FILBLK ;scan login file FORMAT #COM11 FORMAT #COM11A 1$: .READW #ARGBLK,#CHN,#FILBUF,#256.,FILBLK ;read next block BCS 9$ ;branch if error INC FILBLK ;scan buffer for entry MOV #FILBUF,R1 MOV #8.,R2 2$: TSTB @R1 ;is this last entry BEQ 10$ ;branch if yes CLR COLCNT ;no. display entry FORMAT #COM12A ;userid 3$: CMP COLCNT,#16. BHIS 4$ MOV #<' >,R0 JSR PC,PRBYT BR 3$ ; 4$: FORMAT #COM12B ;directory 5$: CMP COLCNT,#32. BHIS 6$ MOV #<' >,R0 JSR PC,PRBYT BR 5$ ; 6$: FORMAT #COM12D ;last login 8$: ADD #LF.LEN,R1 ;advance to next entry SOB R2,2$ BR 1$ ; 9$: FORMAT #COM10 ;login file error 10$: .PURGE #CHN ;don't leave channel lying around .EXIT ; ; I/o subroutines called by format interpreter ; PRBYT: .TTYOU ;output byte INC COLCNT RDBYT: RTS PC ; ; Data segments ; .PSECT $BOSD,RO,D ;read-only data ; LOGFIL: .RAD50 'SY LOGIN DAT' ;name of login file COM10: .ASCIZ '?FINGER-F-Login file error' COM11: .ASCIZ 'Userid Directory Flags Last login' COM11A: .ASCIZ '----------------------------------------------------------' COM12A: .ASCIZ '^A''^+' COM12B: .ASCIZ '^F''^+' COM12D: .ASCIZ '^K'' ^D'' ^T' .EVEN ; .PSECT $DATA,RW,I ;read/write data ; COLCNT: .BLKW 1 ;column counter FILBLK: .BLKW 1 ;current login file block ARGBLK: .BLKW 5 ;rt-11 argument block FILBUF: .BLKW 256. ;login file buffer ; .END FINGER