.TITLE RUNT PATCHES FOR TASK ACCOUNTING .IDENT /V03.00/ .NLIST BEX ; ; ********************** ; * [311,77]MAEACT.MAC * ; ********************** ; ; COPYRIGHT (C) 1979 ; METCALF & EDDY, INC., BOSTON, MASS 02114 ; ; WHILE METCALF & EDDY, INC. BELIEVES THAT THIS SOFTWARE ; IS SUBSTANTIALLY FREE OF BUGS AND DEFECTS, NO WARRANTY, ; EXPRESSED OR IMPLIED, IS PROVIDED. THE SOFTWARE IS SUPPLIED ; ON AN "AS IS" BASIS. ; ; THIS SOFTWARE MAY BE COPIED AT WILL WITH THE INCLUSION ; OF THE ABOVE COPYRIGHT NOTICE. TITLE TO AND OWNERSHIP OF THE ; SOFTWARE SHALL AT ALL TIMES REMAIN IN METCALF & EDDY, INC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE ; WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT ; BY ANYONE. ; ; ; THIS MODULE CONTAINS THEN "HOOKS" AND PATCHES TO "RUNT". ; ; "RUNT" IS THE PDS ROUTINE THAT DOES ALL THE SUBTASKING ; FOR PDS; CONSEQUENTLY EVERY PDS COMMAND THAT DOES ANY ; WORK OTHER THAN TELL WHAT IS GOING ON WITHIN PDS PASSES ; THROUGH HERE. THIS SPECIAL ACCOUNTING ROUTINE REQUIRES THE ; PATCHING IN OF TWO "HOOKS" TO CAPTURE THE SUBTASKING STATISTICS. ; THEY ARE AS FOLLOWS: ; ; 1) 0666 -- PATCH TO SAVE COMMAND LINE ; 2) 1556 -- PATCH TO CAPTURE STATISTICS ; ; ADDITIONALLY THE NEW CODE REFERENCES BY CALL OR JUMP TWO ; LOCATIONS IN "RUNT". THESE LOCATIONS ARE: ; ; 1) 1602 -- PROCESS SUBTASKING LIMIT ERROR ; ENTERED VIA JMP LIMERR. ; 2) 2656 -- CLEAN UP AFTER SUBTASKING ; ENTERED VIA CALL RELESE. ; ; NOTE: ALL ORIGINAL CODE LINES IN THE PATCHES ARE ; MARKED WITH A COMMENT ";++++ ORIGINAL CODE" ; ; THIS ROUTINE MAY BE MODIFIED TO ACCOMPLISH MORE OR LESS THAN ; IT DOES NOW. THE CURRENT IMPLEMENTATION PERFORMS THE FOLLOWING: ; ; 1) CAPTURES THE TASK NAME (FILE SPECIFICATION FOR PDS ; "RUN" COMMANDS) AND THE KILO CORE TICKS USED BY ; THE TASK. ; ; 2) COMPARES THE CAPTURED TASK NAME ; TO A PREDEFINED LIST OF TASKS THAT SHOULD NOT ; BE ACCOUNTED FOR. ; .NLIST .SBTTL PATCH CODE .PAGE .LIST ; .PSECT RUNT,RO,I ; CODE=. ; RELESE=.+2656 ; ADDRESS OF ROUTINE TO "TIDY UP" ; AFTER SUBTASKING LIMERR=.+1602 ; ROUTINE TO INFORM USER OF SUBTASK ; LIMIT EXCEEDED ; ; THIS LOCATION IS THE LOGICAL END OF "RUNT". IT IS AT ; SYMBOL "FINIT". ; .=CODE+1556 ; CALL MAEACT ; CAPTURE TASK STATISTICS ; ; THIS LOCATION IS IMMEDIATELY AFTER THE COMMAND LINE INFORMATION ; HAS BEEN ENTERED IN THE TDB. .=CODE+666 CALL MAESAV ; SAVE THE COMMAND LINE NOP ; ORIGINAL CODE 3 WORDS ; .PSECT RUNTD,RW,D ; TDBADR=.+2 ; ADDRESS OF TDB CTFLG=.+6 ; FLAGS WORD FOR CURRENT SUBTASK ; .NLIST .SBTTL LOCAL MACROS .PAGE .LIST ; ; LOCAL MACROS -- COPIED FROM THE PREFIX FILE OF PDS ; .MACRO SAVREG ; SAVE REGISTERS COROUTINE JSR R5,SAVREG .ENDM SAVREG ; .MACRO TCPQIO A,B ; TCP QIO -- USED TO SET UIC .MCALL DIR$ MOV A,TCPDB+2 MOV #TCPDB+14,R0 N=6 .IRP P, .IF IDN,P,<#0> CLR (R0)+ .IFF MOV P,(R0)+ .ENDC N=N-1 .ENDM .REPT N CLR (R0)+ .ENDM DIR$ #TCPDB .ENDM TCPQIO ; .NLIST .SBTTL (MAESAV)--SAVE THE COMMAND LINE .LIST ; ; THIS ROUTINE SAVES THE COMMAND LINE ON A STACK ; .PSECT MAEDAT,RW,D ; NSTACK=80. ; LENGTH OF COMMAND LINE STACK ; 80 SHOULD BE ENOUGH FOR 2 ; LONG TASK NAMES OR MANY MORE ; SHORT ONES TSTACK: .BLKB NSTACK ; COMMAND LINE STACK .EVEN PTR: .WORD TSTACK ; STACK POINTER ; ; COMMAND LINES ARE STORED ON THE STACK IN ASCII IN INCREASING ; ADDRESSES WITH A BYTE COUNT AT THE TOP. ; THE BYTE COUNT IS A BYTE ITSELF. ; .PSECT MAEACT,RO,I ; MAESAV: .MCALL TDOFF$ TDOFF$ DEF$L ; DEFINE TDB OFFSETS SAVREG ; SAVE REGISTERS BIT #MAEDO,MAEFLG ; SPECIAL ACCOUNTING? BEQ 50$ ; NO EXIT BIT #F2.SCI,FLAG2 ; SCI TERMINAL? BNE 50$ ; YES EXIT MOV TDBADR,R0 ; GET TDB ADDRESS MOV T.CMDA(R0),R1 ; GET COMMAND LINE ADDRESS MOVB T.CMDL(R0),R2 ; GET COMMAND LINE LENGTH MOV PTR,R3 ; GET STACK POINTER 10$: CMPB #' ,(R1) ; BLANK? BNE 15$ ; NO - FOUND START OF COMMAND INC R1 ; CHECK THE NEXT SOB R2,10$ ; 15$: CLR R4 ; CLEAR STORED CHAR COUNT 16$: CMPB #' ,(R1) ; BLANK? BEQ 25$ ; YES - THEN DONE CMP #PTR,R3 ; PTR IS ALSO END OF STACK BHI 20$ ; OK NO OVERFLOW ; 18$: ADD #20,SP ; RESET THE STACK CALL RELESE ; RELEASE THE TDB JMP LIMERR ; GO ANNOUNCE ERROR ; 20$: MOVB (R1)+,(R3)+ ; MOVE THE COMMAND INC R4 ; COUNT THE CHARACTER SOB R2,16$ ; 25$: CMP #PTR,R3 ; STACK OVERFLOW? BLOS 18$ ; YES MOVB R4,(R3)+ ; STORE COUNT MOV R3,PTR ; RESET STACK POINTER 50$: BISB TP1,PRIVF ;++++ ORIGINAL CODE RETURN ; ; .NLIST .SBTTL (MAEBEG)--READ NOACCOUNT TASKS .LIST ; ; THIS ROUTINE ATTEMPTS TO OPEN THE NO ACCOUNT TASKS FILE; IF ; THE OPEN IS SUCCESSFULL IT THEN READS IN THE TASKS FOR WHICH ; NO ACCOUNTING IS TO BE DONE. THE TASKS NAMES ARE STORED RAD 50. ; ; THE NO ACCOUNT TASK FILE IS: "LB0:[1,100]NOACCT.TAS" ; .PSECT MAEACT,RO,I MAEBEG:: .MCALL OPEN$R,GET$,DIR$,CLOSE$,PUT$ SAVREG ; SAVE REGISTERS CLR CORET ; CLEAR SESSION BEGIN CLR CORET+2 ; CORE TICKS MOV #TSTACK,PTR ; INIT COMMAND STACK POINTER MOV #FN1SA,ACTDS+12 ; STORE FILE NAME MOV #FN1SS,ACTDS+10 ; STORE STRING LENGTH CLR NOACT ; INIT NO OF NO ACCT TASKS OPEN: OPEN$R #ACTFDB ; OPEN THE FILE BCC 20$ ; EVERYTHING OK CMPB ACTFDB+F.ERR,#IE.NSF ; "NO SUCH FILE"? BEQ 50$ ; YES THEN NOTHING TO DO CMPB ACTFDB+F.ERR,#IE.LCK ; "LOCKED FROM READ/WRITE"? BEQ 10$ ; GO WAIT CMPB ACTFDB+F.ERR,#IE.FOP ; "FILE ALREADY OPEN"? BEQ 10$ ; GO WAIT BR 50$ ; SKIP FOR ALL OTHER ERRORS 10$: DIR$ #WAIT1S ; WAIT A SECOND DIR$ #WAITFL ; WAIT FOR FLAG BR OPEN ; TRY AGAIN ; 20$: MOV #TASKS,R3 ; SET UP FOR RAD50C MOV #TASKB,R2 ; 30$: MOV #3,R1 ; SET NUMBER OF CHARS TO READ GET$ #ACTFDB,R2,R1 ; READ A RECORD BCS 40$ ; ERROR THEN DONE CALL RAD50C ; CONVERT TO RAD 50 TST (R3)+ ; POINT TO NEXT BUFFER AREA INC NOACT ; INCREMENT COUNTER CMP NOACT,#MAXNOA ; EXCEEDED MAXIMUM BNE 30$ ; NO MOV #NOAERR,OWDPB+14 ; TELL OPERATOR MOV #NOAERL,OWDPB+16 ; MOV #40,OWDPB+20 ; DIR$ #OWDPB ; PRINT IT ; 40$: CLOSE$ #ACTFDB ; CLOSE THE FILE ; 50$: MOV #FNSA,ACTDS+12 ; RESTORE ACCOUNTING FDB MOV #FNSS,ACTDS+10 ; RETURN ; NOAERR: .ASCII /NO ACCOUNTING TASKS OVERFLOW/ NOAERL=.-NOAERR .EVEN .NLIST .SBTTL (MAEINT)--INITIALIZE DATA BUFFER .LIST ; ; THIS ROUTINE INITIALIZES THE SESSION APPLICABLE DATA AT THE ; BEGINNING OF THE ACCOUNTING RECORD. ; ; IT ALSO INITIALIZES THE POINTER TO THE TASK DATA AND THE RECORD ; LENGTH. ; ; THE SESSION DATA CONSISTS OF THE FOLLOWING INFORMATION: ; 1) UIC AT LOGIN ; 2) PASWORD AT LOGIN ; 3) DATE / TIME ; 4) TYPE OF JOB (TIMESHARING OR BATCH) ; ; ALSO AVAILABLE ARE THE FOLLOWING DATA: ; 1) USER NAME ; .PAGE ; ; SUBROUTINE TO INITIALIZE ACCOUNTING DATA BUFFER ; .PSECT MAEACT,RO,I MAEINT:: .MCALL GTIM$S SAVREG ; SAVE REGISTERS MOV LGIUIC,ACUIC ; LOGI UIC MOV PWDBUF,ACPAS ; PASSWORD MOV PWDBUF+2,ACPAS+2 ; COM ACPAS ; COM ACPAS+2 ; CLRB ACNTK ; CLEAR NUMBER OF TASKS MOV #ACTAS,NTASK ; TASK DATA POINTER MOV #ACBLEN,ACLEN ; LENGTH OF BUFFER GTIM$S #DATBUF ; GET DATE AND TIME MOV #DATBUF,R1 ; DATE/TIME BUFFER TO R1 MOV G.TIYR(R1),R4 ; YEAR TO R4 ASH #11,R4 ; SHIFT YEAR TO HIGH ORDER BITS MOV G.TIMO(R1),R3 ; MONTH TO R3 ASH #5,R3 ; SHIFT MONTH TO BITS 8-5 BIS R3,R4 ; ADD MONTH TO R4 BIS G.TIDA(R1),R4 ; ADD DAY TO R4 MOV R4,ACDAT ; STORE DATE MOV G.TIHR(R1),R3 ; HOURS TO R3 MUL #60.,R3 ; COMPUTE MINUTES ADD G.TIMI(R1),R3 ; ADD MINUTES MOV R3,ACTIM ; STORE TIM MOVB DEVTAB+3,ACTER ; STORE TERMINAL NUMBER CLRB ACTYP ; SET TO TIMESHARING BIT #FL.BAT,FLAGS ; BATCH ? BEQ 5$ ; NO INCB ACTYP ; SET TO BATCH 5$: RETURN ; DONE ; .NLIST .SBTTL (MAEWRT)--WRITE ACCOUNTING RECORD .LIST ; ; THIS ROUTINE ADDS END OF SESSION TIME TO THE ACCOUNTING ; RECORD. IT THEN CALL "OPNACT" TO OPEN THE ACCOUNTING FILE, ; WRITE THE RECORD, AND FINALLY CLOSES THE ACCOUNTING FILE. ; ; THE ROUTINE ALSO CONTAINS CODE TO TYPE THE ACCOUNTING FILE ; FAILURES ON THE TERMINAL AND ON THE OPERATORS CONSOLE. .PAGE ; ; WRITE AN OUTPUT RECORD TO ACCOUNTING FILE ; .PSECT MAEACT,RO,I MAEWRT:: .MCALL CLOSE$,PUT$,GTIM$S,DIR$ SAVREG ; SAVE REGISTERS ; ; COMPUTE SESSION CORE TICKS ; MOV CSSU+2,R0 ; GET CURRENT CORE TICKS MOV CSSU,R1 ; SUB CORET+2,R0 ; SUBTRACT THAT FROM START OF SBC R1 ; SESSION CORE TICKS SUB CORET,R1 ; MOV R0,ACTIK+2 ; STORE THE CORETICKS IN MOV R1,ACTIK ; OUTPUT BUFFER MOV CSSU,CORET ; SAVE THIS AS START OF MOV CSSU+2,CORET+2 ; SESSION CORE TICKS ; GTIM$S #DATBUF ; GET TIME MOV #DATBUF,R1 ; TIME BUFFER TO R1 MOV G.TIHR(R1),R3 ; HOURS TO R3 MUL #60.,R3 ; COMPUTE MINUTES ADD G.TIMI(R1),R3 ; ADD MINUTES MOV R3,ACEND ; STORE END TIME TCPQIO #PI.CUI,<#401> ; SET UIC TO [1,1] CALL OPNACT ; OPEN ACCOUNTING FILE BCS 10$ ; JUMP IF ERROR ; ; COMPUTE CHECK SUM ; CLR R0 ; CLEAR THE CHECK SUM MOV ACLEN,R1 ; STORE LENGTH OF BUFFER ASR R1 ; CONVERT LENGTH TO WORDS MOV #ACUIC,R2 ; BUFFER ADDRESS 1$: ADD (R2)+,R0 ; COMPUTE CHECK SUM SOB R1,1$ ; LOOP MOV R0,(R2) ; STORE CHECK SUM ADD #2,ACLEN ; UPDATE RECORD LENGTH ; PUT$ #ACTFDB,#ACUIC,ACLEN ; OUTPUT RECORD CLOSE$ #ACTFDB ; CLOSE ACCOUNTING FILE 5$: TCPQIO #PI.CUI, ; SET UIC BACK TO USERS RETURN ; DONE ; ; ACCOUNTING FILE FAILURE ; 10$: MOV #ECODE,R0 ; SET UP TO CONVERT ERROR CODE MOVB ACTFDB+F.ERR,R1 ; CLR R2 ; CALL $CBDSG ; MOV DEVTAB+4,TERM ; GET TERMINAL TYPE MOV DEVTAB+6,TERM+2 ; GET UNIT NUMBER PUT$ #OUTFDB,#ERRA,#ERRL ; TELL USER MOV #ERRA,OWDPB+14 ; TELL OPERATOR MOV #ERRL,OWDPB+16 ; MOV #40,OWDPB+20 ; DIR$ #OWDPB ; BR 5$ ; GO RETURN ; .PSECT MAEDAT,RW,D ; .EVEN ERRA: .ASCII /ACCOUNTING FILE FAILURE ON: / TERM: .ASCII / / .ASCII / CODE = / ECODE: .ASCII / / ERRL=.-ERRA .EVEN ; .NLIST .SBTTL (MAEACT/OPNACT)--OPEN ACCOUNTING FILE .LIST ; ; THIS ROUTINE OPENS THE PDS TASK ACCOUNTING FILE. ; ; THE FILE SPECIFICATION FOR THE ACCOUNTING FILE IS: ; "LB0:[1,100]PDSACT.ACT" ; ; THE FILE IS OPENNED FOR APPEND; IF "NO SUCH FILE" ERROR ; OCCURS THEN THE FILE IS OPENNED FOR WRITE. ; ; IF THE FILE IS CURRENTLY ACCESSED FOR WRITE THE ROUTINE WAITS ; FOR A SECOND THEN TRIES AGAIN. ; ; ANY OTHER ERRORS ARE PASSED BACK TO "MAEWRT" WHO WRITES THE ; ERROR MESSAGE. ; ; THE ACCOUNTING FILE IS A STANDARD FCS SEQUENTIAL FILE WITH ; THE FOLLOWING FORMAT: ; ; PDS TASK ACCOUNTING FILE RECORDS ; -------------------------------- ; ; ;======================================================================== ; The following data are stored for all accounting records: ; ;BYTES CONTENTS ;----- -------- ; 1- 2 UIC OF USER NAME LGIUIC ; 3- 4 DATE CODED AS FOLLOWS: ; BITS CONTENTS ; 15-9 YEAR (MOD 1900) ; 8-5 MONTH ; 4-0 DAY ; 5- 6 MINUTE OF DAY (START OF SESSION) ; 7-10 PASSWORD PWDBUF ;11 SUBACCOUNT NUMBER ;12 TYPE OF RECORD (DEFINES DATA THAT ; FOLLOWS) ; VALUE RECORD TYPE ; 0 TIMESHARING JOB ; 1 BATCH JOB ; 2 DISK USAGE ;======================================================================== ; The following data are stored for timesharing and batch records: ; ;BYTES CONTENTS ;----- -------- ;13-14 MINUTE OF DAY (END OF SESSION) ;15-18 SESSION CORE TICKS ;19 TERMINAL NUMBER ;20 NUMBER OF TASKS RUN ; ; TASK DATA ; --------- ; 1- 2 NUMBER OF WORDS IN TASK NAME ; 3- 6 CORE TICKS ; 7-... TASK NAME OR FILE NAME (RAD 50) ; IF FILE NAME DEV AND UFD INCLUDED ; FILETYPE AND VERSION INCLUDED ONLY IF ; ENTERED ON THE RUN COMMAND ;======================================================================== ; ; THE LAST WORD OF EACH RECORD IS A CHECK SUM ; .PAGE ; ; OPEN ACCOUNTING FILE ; .PSECT MAEACT,RO,I OPNACT: .MCALL OPEN$A,DIR$,OPEN$W OPEN$A #ACTFDB ; OPEN THE FILE FOR APPEND BCC 40$ ; EVERYTHING OK CMPB ACTFDB+F.ERR,#IE.WAC ; WRITE ACCESSED? BEQ 10$ ; TRY AGAIN CMPB ACTFDB+F.ERR,#IE.NSF ; NO SUCH FILE? BEQ 20$ ; OPEN AS NEW CMPB ACTFDB+F.ERR,#IE.LCK ; LOCKED FROM READ/WRITE? BEQ 10$ ; TRY AGAIN CMPB ACTFDB+F.ERR,#IE.FOP ; ALREADY OPEN? BEQ 10$ ; TRY AGAIN SEC ; SHO SEVERE ERROR RETURN ; 10$: DIR$ #WAIT1S ; WAIT A SECOND DIR$ #WAITFL ; WAIT FOR FLAG BR OPNACT ; TRY AGAIN ; 20$: OPEN$W #ACTFDB ; OPEN AS NEW FILE ; 40$: RETURN ; .NLIST .SBTTL (MAEACT)--ACCUMULATE TASK STATISTICS .LIST ; ; ACCUMULATE STATISTICS ; .PSECT MAEACT,RO,I MAEACT: .MCALL PUT$,TDOFF$,QIOW$S TDOFF$ DEF$L SAVREG ; SAVE REGISTERS ; BIT #MAEDO,MAEFLG ; SPECIAL ACCOUNTING? BEQ 80$ ; NO ; ; CHECK FOR SCI TERMINAL -- NO ACCOUNTING ; BIT #F2.SCI,FLAG2 ; IS THIS THE SCI TERMINAL? BNE 80$ ; YES EXIT ; ; ; STORE THE TASK NAME ; 10$: MOV PTR,R0 ; GET COMMAND LINE STACK POINTER MOVB -(R0),R4 ; GET BYTE COUNT MOV R4,R1 ; SAVE THE BYTE COUNT MOV R0,R2 ; COMPUTE START OF COMMAND LINE SUB R4,R2 ; MOV R2,PTR ; STORE NEW STACK POINTER CLR R0 ; SET T/S "RUN" FLAG MOV R2,R5 ; SAVE START ADDRESS 20$: CMPB #':,(R5) ; CHAR A ':' BNE 25$ ; NO 22$: MOVB #'$,(R5) ; REPLACE WITH '$' INC R0 ; SET TO T/S "RUN" BR 50$ ; 25$: CMPB #'[,(R5) ; SQUARE BRACKET? BEQ 22$ ; YES CMPB #'],(R5) ; SQUARE BRACKET? BEQ 22$ ; CMPB #',,(R5) ; COMMA? BEQ 22$ ; 50$: INC R5 ; POINT TO NEXT CHAR SOB R4,20$ ; LOOP ; ; ; CHECK FOR TASK NOT INSTALLED ; CMPB #PE.TNI,IOSB+T.ERR+2 ; WAS RUN SUCCESSFULL BEQ 80$ ; NO - EXIT ; ; 60$: ; ; CHECK IF THIS TASK WILL FIT IN BUFFER ; CLR R4 ; COMPUTE NUMBER OF WORDS MOV R1,R5 ; IN TASK NAME FROM THE DIV #3,R4 ; NUMBER OF CHARACTERS TST R5 ; BEQ 62$ ; INC R4 ; 62$: MOV R4,R5 ; COMPUTE NUMBER OF BYTES ASH #1,R5 ; IN TASK NAME ADD #ACCON,R5 ; COMPUTE TASK DATA LENGTH (TOTAL) MOV NTASK,R3 ; GET BUFFER POINTER ADD R5,R3 ; COMPUTE NEW END OF BUFFER CMP R3,#ACBEND ; PAST END OF BUFFER? BLOS 64$ ; NO ; CALL MAEWRT ; WRITE OUT THE BUFFER CALL MAEINT ; INITIALIZE BUFFER ; 64$: MOV NTASK,R3 ; GET BUFFER POINTER MOV R4,(R3) ; STORE WORD COUNT ADD #ACCON,R3 ; POINT TO TASK NAME ; ; R1 - NUMBER OF CHARACTERS ; R2 - ASCII BUFFER ; R3 - RAD50 BUFFER ; CALL RAD50C ; CONVERT TO RAD50 CALL MAECHK ; DO WE WANT TO ACCOUNT FOR ; THIS TASK? BCS 80$ ; NO ADD R5,ACLEN ; COMPUTE NEW BUFFER LENGTH ; ; GET CPU TIME ; MOV TDBADR,R4 ; GET TDB ADDR ADD #T.EVBF,R4 ; COMPUTE INFO BUFFER ADDR MOV E.SIZ(R4),R0 ; GET TASK SIZE ASH #-5,R0 ; CONVERT TO K WORDS BCS 70$ ; BNE 72$ ; 70$: INC R0 ; 72$: MOV E.TIM(R4),R2 ; HIGH ORDER CPU MOV E.TIM+2(R4),R3 ; LOW ORDER CALL $DMUL ; MULTIPLY MOV NTASK,R3 ; GET TASK DATA ADDRESS MOV R0,2(R3) ; STORE IN BUFFER MOV R1,4(R3) ; ADD R5,NTASK ; POINT TO NEXT TASK INCB ACNTK ; INCREMENT TASK COUNT 80$: CALL RELESE ;++++ ORIGINAL CODE ; RETURN ; .NLIST .SBTTL (MAEACT/MAECHK)--CHECK FOR A NO ACCOUNT TASK .LIST ; ; CHECK IF THIS TASK SHOULD BE ACCOUNTED FOR ; ; REGISTER AT ENTRY ; R3 - POINTER TO RAD50 TASK NAME ; R0 - NON-ZERO ACCOUNT ANYWAY ; ; R0,R1 DESTROYED ALL OTHERS PRESERVED ; MAECHK: TST R0 ; ACCOUNT ANY WAY? BNE 20$ ; YES MOV NOACT,R1 ; LOAD NUMBER OF NOACCTS BEQ 20$ ; RETURN IF NONE MOV #TASKS,R0 ; ADDRESS OF NO ACCOUNT TASKS 10$: CMP (R3),(R0)+ ; COMPARE TASKS BEQ 30$ ; DON'T ACCOUNT FOR THIS TASK SOB R1,10$ ; CHECK NEXT 20$: CLC ; WE ACCOUNT FOR THIS TASK RETURN ; BYE 30$: SEC ; NO ACCOUNTING FOR THIS TASK RETURN ; BYE ; .NLIST .SBTTL (MAEACT)--TASK ACCOUNTING DATA AREA .LIST ; ; TASK ACCOUNTING DATA AREA ; .PSECT MAEDAT,RW,D ; TASKB: ; BUFFER TO STORE ASCII NO ACCT TASKS ACUIC: .WORD 0 ; LOGIN UIC ACDAT: .WORD 0 ; DATE STORED AS FOLLOWS: ; BITS CONTENTS ; 15-9 YEAR (MOD 1900) ; 8-5 MONTH ; 4-0 DAY ACTIM: .WORD 0 ; MINUTE OF DAY (START OF SESSION) ACPAS: .WORD 0,0 ; PASSWORD (RAD50) ACSUB: .BYTE 0 ; SUBACCOUNT ACTYP: .BYTE 0 ; TYPE OF RECORD AS FOLLOWS: ; 0 = TIMESHARING ; 1 = BATCH ACEND: .WORD 0 ; MINUTE OF DAY (END OF SESSION) ACTIK: .BLKW 2 ; CORE TICKS USED IN SESSION ACTER: .BYTE 0 ; TERMINAL NUMBER ACNTK: .BYTE 0 ; NUMBER OF TASKS RUN ACBLEN=.-ACUIC ; BUFFER LENGTH ACTAS: .BLKB 510.-ACBLEN ; BUFFER AREA FOR TASK DATA ACBEND=. ; END OF BUFFER ACCON=6 ; LENGTH OF CONSTANT PART OF TASK DATA ; NTASK: .WORD ACTAS ; POINTER TO NEXT AVAILABLE RECORD ; TO STORE TASK DATA ACLEN: .WORD ACBLEN ; LENGTH OF BUFFER ; CORET: .BLKW 2 ; START OF SESSION CORE TICKS ; MAXNOA=50. ; MAXIMUM NUMBER OF NOACCOUNT TASKS NOACT: .WORD 0 ; NUMBER OF NOACCOUNT TASKS TASKS: .BLKW MAXNOA ; NO ACCOUNT TASKS ; MAEFLG:: .WORD 0 ; SPECIAL ACCOUNTING FLAGS WORD ; ; SPECIAL ACCOUNTING FLAG BIT DEFINITIONS: ; MAEDO==1 ; DO SPECIAL ACCOUNTING MAELGI==2 ; SUCCESSFUL LOGIN FLAG ; .NLIST .SBTTL (MAEACT)--ACCOUNTING FILE FDB .LIST ; ; FDB FOR ACCOUNTING FILE (LUN 6 EV FLAG 6) ; .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A ; ; LUN AND E.F. IS THAT USED FOR UPF FILE ; ACTFDB: FDBDF$ FDAT$A R.VAR,FD.CR FDOP$A 7,ACTDS,,,FA.ENB!FA.DLK FDBF$A 4,,1 ACTDS: .WORD DNSS ; DEVICE NAME STRING SIZE .WORD DNSA ; DEVICE NAME STRING ADDRESS .WORD DIRSS ; DIRECTORY STRING SIZE .WORD DIRSA ; DIRECTORY STRING ADDRESS .WORD FNSS ; FILE NAME STRING SIZE .WORD FNSA ; FILE NAME STRING ADDRESS DNSA: .ASCII /LB0:/ DNSS=.-DNSA DIRSA: .ASCII /[1,100]/ DIRSS=.-DIRSA FNSA: .ASCII /PDSACT.ACT/ ; FILE NAME OF ACCOUNTING FILE FNSS=.-FNSA ; FN1SA: .ASCII /NOACCT.TAS/ ; FILE NAME OF NO ACCOUNT TASK FILE FN1SS=.-FN1SA ; .END