.TITLE PAGOVR .IDENT /V7.04/ ;**************************************************************** ; ; PAGES PRINTED ACCUMULATION OVERLAY ; ; THIS MODULE RECEIVES COMMANDS FROM THE SPOOLER TASK LPP ; (WHEN SUITABLY MODIFIED) TO INCREMENT THE NUMBER OF PAGES ; PRINTED FOR A USER. IF THE USER IS NOT LOGGED ON, THE ; REQUEST IS QUEUED TO THE AUXILIARY LOGGING TASK IF IT IS ; SUPPORTED. ; ; VERSION: V7 JULY 1981 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA ; NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT723 27 JULY 1981 ADDED CODE TO SEARCH ALL LOGON UIC'S ; TO GET TERMINAL TO CHARGE TO IF THE ; INITIAL SEARCH FAILS. THIS IS NORMALLY ; ONLY NECESSARY FOR PRIVILEGED USERS, SINCE ; NON-PRIVILEGED USERS CANNOT CHANGE THEIR ; LOGON UIC. ; ; SMT752 29 SEPT 1981 ADDED DISPLAY OF PAGES PRINTED IF CPU /ON ; (PRINCIPALLY FOR SYSTEM USE) ; ; SMT753 7 OCT 1981 CHANGED NAMES OF CONDITIONAL ASSEMBLY ; PARAMETERS; SEE THE FILES MODIFY.TXT AND ; CONDEF.MAC FOR DETAILS. ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;***************************************************************** .MCALL GTIM$S .MCALL DCBDF$ DCBDF$ ; DEFINE DCB OFFSETS SPA = 40 .ENABL LC .NLIST BEX PAGES: .ASCIZ / pages printed by / FOR: .ASCIZ / for / .EVEN .IF DF AA$ALT AUXLOG: .RAD50 /ALT.../ ; NAME OF AUXILIARY LOGGING TASK .IFTF UCB: .BLKW 1 ; UCB OF TT: FOR PRINT MESSAGE $PAGEP:: ; OVERLAY TRANSFER ADDRESS MOV B.UIC(R5),R0 ; GET UIC OF THE USER MOV $BKBUF,R1 ; GET ADDRESS OF USER BUFFERS ADD #,R1 ; SET UP TO SEARCH FOR UIC CALL $LUAB1 ; LOOK FOR UIC BCS 10$ ; IF CS, TRY TERMINAL SEARCH ADD #,R1 ; POINT TO START OF UAB ADD B.PAGE(R5),L$PAGE(R1) ; ; INCREMENT PRINTED PAGE TOTAL ; (NB R1 DOES NOT POINT TO START OF UAB) BR 55$ ; DEALLOCATE PACKET AND RETURN, AFTER ; DISPLAYING MESSAGE IF REQUIRED 10$: MOV #$DEVHD,R4 ; GET DEVICE LISTHEAD ADDRESS 20$: MOV (R4),R4 ; GET NEXT DCB ADDRESS .IFT BEQ 50$ ; IF EQ, END OF LIST, TRY USING ALT... .IFF BEQ 60$ ; IF EQ, END OF LIST SO FORGET IT .IFTF CMP D.NAM(R4),#"TT ; TERMINAL? BNE 20$ ; NO, LOOP MOV D.UCB(R4),R0 ; GET FIRST UCB ADDRESS CLR R2 ; GET LAST UNIT NUMBER BISB D.UNIT+1(R4),R2 ; CLR R3 ; GET FIRST UNIT NUMBER BISB D.UNIT(R4),R3 ; SUB R3,R2 ; CALCULATE NUMBER OF UNITS ON THIS UCB INC R2 ; 30$: CMP B.UIC(R5),U.LUIC(R0) ; THIS TERMINAL? (THE MATCH WILL ; ALWAYS FAIL IF TERMINAL IS LOGGED OFF) BEQ 40$ ; IF EQ YES ADD D.UCBL(R4),R0 ; NO, POINT TO NEXT UCB DEC R2 ; ANY MORE? BGT 30$ ; IF GT YES, LOOP BR 20$ ; TRY NEXT DCB 40$: CALL $LUAB ; SEE IF THIS UCB IS LOGGED ON .IFT BCS 50$ ; IF CS NO, TRY USING ALT... .IFF BCS 60$ ; IF CS NO, FORGET IT .IFTF ADD B.PAGE(R5),L$PAGE(R1) ; INCREMENT PAGE COUNT BR 55$ ; DEALLOCATE PACKET AND RETURN .IFT 50$: MOV #AUXLOG,R3 ; GET NAME OF AUXILIARY LOGGING TASK CALL $SRSTD ; SEARCH STD FOR IT BCS 60$ ; IF CS, FORGET THIS REQUEST MOV R5,R1 ; COPY PACKET ADDRESS CALL $SWSTK,70$ ; SWITCH STACKS CALLR $EXRQF ;; QUEUE PACKET AND START ALT... ;; THEN RETURN TO DISPATCHER .ENDC ; DF AA$ALT 55$: BIT #AC.RPT,L$OPT(R1) ; REPORTING REQUIRED? BEQ 60$ ; IF EQ NO CALL PAGMSG ; YES, SEND MESSAGE TO TERMINAL 60$: MOV #B.LPAG,R1 ; SET LENGTH TO DEALLOCATE CALLR $DEALL ; DO IT AND... 70$: RETURN ; GO BACK TO DISPATCHER ;+ ; *** PAGMSG ; ; THIS ROUTINE IS CALLED TO PRINT A MESSAGE ON WHATEVER TERMINAL A ; PAGE COUNT IS BEING CHARGED TO IF CPU /ON IS IN EFFECT AT THAT ; TERMINAL. ; ; INPUTS: ; R1 UAB ADDRESS (CONTAINS UIC AND UCB ADDRESS) ; R5 ADDRESS OF DATA PACKET FROM DESPOOLER TASK ; ; *NOTE* THIS ROUTINE DEPENDS ON THE OFFSET L$UCB BEING ZERO. ;- PAGMSG: MOV R1,-(SP) ; SAVE UAB ADDRESS MOV (R1),-(SP) ; SAVE UCB ADDRESS (NB. L$UCB=0) .IF DF AA$FRM GTIM$S #<$BUF+20> ; GET TIME PARAMETERS .IFTF MOV #$BUF,R0 ; GET BUFFER ADDRESS MOVB #CR,(R0)+ ; START WITH A CARRIAGE RETURN .IFT MOV #<$BUF+26>,R1 ; POINT TO TIME OF DAY MOV #AA$FRM,R2 ; SET TIME FORMAT CALL $TIM ; FORMAT THE TIME MOVB #SPA,(R0)+ ; ADD A SPACE .ENDC ; DF AA$FRM MOV B.PAGE(R5),R1 ; GET PAGE COUNT CALL DE.CML ; FORMAT AS ASCII DECIMAL MOVSTR #PAGES ; INSERT "PAGES PRINTED BY" MESSAGE MOV B.SPNM(R5),R1 ; GET FIRST HALF OF DESPOOLER NAME CALL $C5TA ; CONVERT TO ASCII MOV B.SPNM+2(R5),R1 ; GET SECOND HALF OF DESPOOLER NAME BEQ 15$ ; IF EQ, IT WAS ALL SPACES CALL $C5TA ; CONVERT TO ASCII 15$: CMPB -(R0),#SPA ; LAST CHARACTER A SPACE? BEQ 15$ ; IF EQ YES, REMOVE IT AND LOOP INC R0 ; STEP PAST LAST CHARACTER MOVSTR #FOR ; INSERT " FOR " TEXT MOV B.UIC(R5),R3 ; GET UIC OF PRINTER CALL FM.UIC ; FORMAT AS [G,M] SUB #$BUF,R0 ; CALCULATE STRING LENGTH MOV #$BUF,$QIO+Q.IOPL ; SET MESSAGE LENGTH IN DPB MOV R0,$QIO+Q.IOPL+2 ; AND MESSAGE LENGTH MOV (SP)+,R0 ; RESTORE UCB ADDRESS CALL $SWSTK,30$ ; SWITCH STACKS MOV $HEADR,R1 ;; GET OUR HEADER ADDRESS MOV R0,H.LUN+<*4>(R1) ;; SET LUN TO RIGHT TT: RETURN ;; 30$: CALL $PRINT ; SEND OUT THE MESSAGE CALL $ASGCO ; ASSIGN LUN BACK TO CO: 40$: MOV (SP)+,R1 ; RESTORE UAB ADDRESS .IF DF AA$QIO & AA$TCQ ADD #1,L$QIO+2(R1) ; COUNT THE QIO WE JUST DID... ADC L$QIO(R1) ; TO THIS USER'S TOTAL .ENDC ; DF AA$QIO & AA$TCQ 50$: RETURN ; .END