.TITLE COST .IDENT /ELB9/ ;+ ; ELB3 - JUNE 16, 1978 ; INSERT UIC ; CHANGE TITLES TO SUIT MORRIS ; ; ELB4 - JUNE 22, 1978 ; ALLOW FILE NAME ARGUMENT (NAME OF SAVED UPF) ; ELB5 - " ; SORT ACCOUNTS BEFORE LISTING ; ; ELB6 - JUNE 23, 1978 ; PRINT FILE NAME ON HEADER LINE ; ; ELB7 - JUNE 30, 1978 ; FIX BUG IN NUMBER OF RECORDS SORTED ; AND IGNORE DELETED RECORDS ; ; ELB8 - JULY 13, 1978 ; FIX BUG IN COMMAND LINE PROCESSING ; DON'T KNOW HOW IT GOT THERE (A 5 WAS CHANGED TO A 4!) ; ALSO MAKE DEFAULT DIRECTORY ALWAYS [1,100] ; ; ELB9 - JULY 13, 1978 ; DON'T CLEAR TEKTRONIX SCREEN FOR SINGLE USER LISTING ;- .GLOBL COST,LOOP,CSTREP,UPFFDB,FIRST,LAST,NAME,COSTA .GLOBL LSTALL,SORTER,GETREC,COMPAR,LINK,NAMES .GLOBL GMCR,CSIBLK .MCALL QIOW$,DIR$,EXIT$S .MCALL OPEN$,GET$,CLOSE$,FINIT$ .MCALL FSRSZ$,FDBDF$,FDRC$A,FDOP$A,NMBLK$ .MCALL GMCR$,CSI$,CSI$1,CSI$2,FDOP$R ;ELB4 ; AC0=R0 AC1=R1 ; COST:: FINIT$ ;8 INITIALIZE FILES SYSTEM MOV #UICNM,R2 ;8 PREPARE FOR CALL MOV #UICSZ,R1 ;8 TO CALL .WDFDR ;8 WRITE NEW DEFAULT DIRECTORY STRING DIR$ #GMCR ;4 GET COMMAND LINE BCS 1$ MOV $DSW,R1 ;4 ANYONE HOME? MOV #GMCR+2,R2 ;8 START OF LINE 8$: CMPB (R2)+,#' ;8 LOOK FOR SPACE BEQ 9$ ;8 FOUND IT! SOB R1,8$ ;8 TRY AGAIN BR 1$ ;8 NOTHING THERE 9$: DEC R1 ;8 ONE LESS CHAR CSI$1 #CSIBLK,R2,R1 ;8 GET THE NAME BCC 2$ ;4 GOOD! BR 6$ ;4 ERROR 2$: CSI$2 #CSIBLK,OUTPUT ;4 SET UP NAME BCC 3$ ;4 GOOD! 6$: DIR$ #SYNERR ;4 ERROR JMP EXIT ;4 3$: FDOP$R #UPFFDB,,#CSIBLK+C.DSDS ;4 SET UP DATA SET PNTR MOV CSIBLK+C.CMLD,R3 ; GET COMMAND LINE POINTER MOV CSIBLK+C.CMLD+2,R1 MOV #FNAME,R2 7$: MOVB (R1)+,(R2)+ SOB R3,7$ 1$: OPEN$ #UPFFDB BCC 4$ DIR$ #OPNERR ;4 ERROR JMP EXIT 4$: GET$ #UPFFDB MOV F.NRBD+2(R0),R1 MOV (R1)+,FIRST MOV (R1)+,LAST MOV .CRTSK,R1 MOV A.TI(R1),R1 ; PUD MOV U.ACP(R1),R1 ; UTN ADD #I.UN,R1 ; USER NAME MOV #SYSASC,R2 ; SYSTEM IN ASCII CALL CMPSYS ; COMPARE 6 WORDS BCC LSTALL ; IT IS SYSTEM - LIST EVERYONE! CMPB GMCR+4,#'D ;7 DEBUGGING? BEQ LSTALL ;7 YES! MOV FIRST,F.RCNM+2(R0) L1: GET$ R0 ; SEARCH FOR USER'S DATA MOV F.NRBD+2(R0),R2 ; RECORD ADD #UP.USN,R2 ; ADDRESS OF USER NAME CALL CMPNAM ; COMPARE WITH R1 BCC LSTONE ; FOUND HIM CMP F.RCNM+2(R0),LAST ; END OF FILE? BLE L1 ; SHOULD NEVER HAPPEN! BR EXIT ; LSTONE: CALL TITREP MOV F.NRBD+2(R0),R1 CALL CSTREP BR EXIT ; LSTALL: CALL SORTER ;5 CLR -(SP) MOV SP,R5 CALL TEKCLR CLR (SP)+ CALL TITREP CLR -(SP) LOOP: MOV (SP)+,R1 CLR R2 BISB LINK(R1),R2 ;5 GET NEXT LINK BEQ EXIT ;5 NULL MOV R2,R1 ;5 PREPARE RECORD NUMBER MOV R1,-(SP) ADD FIRST,R2 ;5 DEC R2 MOV R2,F.RCNM+2+UPFFDB GET$ #UPFFDB MOV F.NRBD+2(R0),R1 CALL CSTREP BR LOOP EXIT: CLOSE$ #UPFFDB EXIT$S .SBTTL PREPARE TITLE LINE TITREP: MOV R0,-(SP) MOV #DATEP,-(SP) MOV #1,-(SP) MOV SP,R5 CALL DATE MOV #TIMEP,2(SP) MOV SP,R5 CALL TIME ADD #4,SP DIR$ #QIOTIT MOV (SP)+,R0 RETURN .SBTTL SORTER SORTER: MOV LAST,NUMREC SUB FIRST,NUMREC CLR R1 CLR ENDREC CLR R2 CLRB LINK 1$: CALL GETREC BCS DONE INC R2 2$: CLR R3 BISB LINK,R3 CLR R4 3$: CALL COMPAR BCS 5$ 4$: MOV R3,R4 CLR R3 BISB LINK(R4),R3 BNE 3$ 5$: MOVB R2,LINK(R4) MOVB R3,LINK(R2) BR 1$ DONE: RETURN .SBTTL GETREC GETREC: CMP R2,NUMREC BGT 99$ CMP R1,ENDREC BLT 10$ GET$ #UPFFDB MOV F.NRBD+2(R0),R1 MOV R1,ENDREC ADD F.NRBD(R0),ENDREC 10$: MOV R2,-(SP) ASH #3,R2 ADD #NAMES+10,R2 MOV R2,R5 11$: MOV (R1)+,(R2)+ MOV (R1)+,(R2)+ MOV (R1)+,(R2)+ MOV (R1)+,(R2)+ MOV (SP)+,R2 CLC RETURN ; 99$: SEC RETURN .SBTTL COMPAR COMPAR: MOV R3,-(SP) MOV R5,-(SP) MOV #4,R0 ASH #3,R3 ADD #NAMES,R3 1$: CMP (R5)+,(R3)+ BLO 3$ BHI 4$ SOB R0,1$ 3$: SEC BR 10$ 4$: CLC 10$: MOV (SP)+,R5 MOV (SP)+,R3 RETURN .SBTTL PREPARE COST REPORT LINE UP.UUA=44 UP.UCA=42 UP.UIC=10 UP.USN=0 CSTREP: TST UP.USN(R1) ;7 NULL USER? BEQ 10$ ;7 YES MOV R0,-(SP) MOV R1,-(SP) MOV UP.UIC(R1),R3 CLR R4 MOV #UIC,R2 MOV #9.,R5 2$: MOVB #40,(R2)+ SOB R5,2$ MOV #UIC,R2 CALL .PPASC SETD SETL LDCLD UP.UUA(R1),AC0 DIVD FCONS1,AC0 MULD FCONS2,AC0 SETF STF AC0,UTILF SETD SETI LDCID UP.UCA(R1),AC1 DIVD FCONS3,AC1 SETF STF AC1,CONNF SETD ADDD AC1,AC0 SETF MOV #COSTF,R3 STF AC0,@R3 MOV #2,R2 MOV #COSTA,R4 CALL FPASC MOV #2,R2 MOV #UTILA,R4 MOV #UTILF,R3 CALL FPASC MOV #2,R2 MOV #CONNF,R3 MOV #CONNA,R4 CALL FPASC MOV (SP)+,R1 MOV R1,R5 ADD #UP.USN,R5 MOV #4,R4 MOV #NAME,R0 1$: MOV (R5)+,R1 CALL $C5TA SOB R4,1$ DIR$ #QIOREP MOV (SP)+,R0 10$: RETURN CMPSYS: MOV R1,-(SP) TST (R1) BEQ 3$ MOV #6,R5 1$: CMP (R1)+,(R2)+ BNE 2$ SOB R5,1$ CLC BR 3$ 2$: SEC 3$: MOV (SP)+,R1 RETURN ; ; CMPNAM: MOV R1,-(SP) MOV R0,-(SP) MOV R2,R3 MOV R1,R0 MOV #4,R5 1$: CLR R1 CALL $CAT5 CMP R1,(R3)+ BNE 2$ SOB R5,1$ CLC BR 3$ 2$: SEC 3$: MOV (SP)+,R0 MOV (SP)+,R1 RETURN .SBTTL DATA AND FDB FSRSZ$ 1 UPFFDB: FDBDF$ FDRC$A FD.RAN!FD.PLC FDOP$A 1,,UPFDFN,FO.RD UPFDFN: NMBLK$ PDSUPF,DAT,,DK,0 UICNM: .ASCII /[1,100]/ UICSZ=.-UICNM .EVEN ; ; GMCR: GMCR$ ; CSI$ CSIBLK: .BLKB C.SIZE ; FIRST: 0 LAST: 0 ; NUMREC: 0 ENDREC: 0 ; MAXUSR=100. LINK: .BLKB MAXUSR+1 .EVEN NAMES: .BLKW 4*MAXUSR ; ; ; SYSASC: .ASCII /SYSTEM/ .WORD 0,0,0 FCONS1: .FLT4 216000. FCONS2: .FLT4 15. FCONS3: .FLT4 60. COSTF: .FLT2 0. CONNF: .FLT2 0. UTILF: .FLT2 0. ; .NLIST BIN ; SYNERM: .ASCII /COST - SYNTAX ERROR/ SYNERS=.-SYNERM ; OPNERM: .ASCII /COST - UNABLE TO OPEN SPECIFIED FILE/ OPNERS=.-OPNERM ; ; TITLIN: DATEP: .BLKB 9. .ASCII / / TIMEP: .BLKB 8. .ASCII / / FNAME: .BLKB 30. .BYTE 15,12,12 .ASCII / USER NAME / .ASCII / UIC / .ASCII % RESOURCES % .ASCII % CONNECT % .ASCII % TOTAL% .BYTE 15,12 .ASCII / / .ASCII % $15/K-WD-HR % .ASCII %$1/HR % .ASCII / COST/ .BYTE 15,12 TITLIS=.-TITLIN .EVEN ; REPLIN: NAME: .BLKW 6 .ASCII / / UIC: .BLKB 9. .BYTE 11 .EVEN UTILA: .BLKB 9. .BYTE 11 .EVEN CONNA: .BLKB 9. .BYTE 11 .EVEN COSTA: .BLKB 10. .EVEN REPLIS=.-REPLIN ; .LIST BIN QIOREP: QIOW$ IO.WLB,2,1,,,, QIOTIT: QIOW$ IO.WLB,2,1,,,, SYNERR: QIOW$ IO.WLB,2,1,,,, OPNERR: QIOW$ IO.WLB,2,1,,,, ; .END COST