.nlist .PSECT PREDAF .TITLE PREDAF - DISK ACCOUNTING PREFACE .IDENT /070878/ ; ; THIS CODE HAS BEEN DEVELOPED BY THE COMPUTING ; GROUP OF THE ATMOSPHERIC SCIENCES DIVISION, ; ALBERTA RESEARCH. ; ; THERE IS EXPLICITLY NO COPYRIGHT ON THIS SOFTWARE, ; AND ITS DISTRIBUTION IS ENCOURAGED. NO RESPONSIBILITY ; NOR GUARANTEE IS MADE OR ASSUMED BY THE AUTHOR, OR ; BY ALBERTA RESEARCH. ; ; SUGGESTIONS OR CHANGES ARE INVITED, AND WILL BE ; DISTRIBUTED TO OTHER USERS OF THIS SOFTWARE THROUGH ; THE DECUS IAS/RSX SPECIAL INTEREST GROUP. ; ; ; VERSION: WK03.01 ; WRITTEN BY: W. KORENDYK ; DATE WRITTEN: 7-AUG-78 ; ; RELATED DOCUMENTATION: ; ; ; MODIFICATIONS: ; ; CODE NAME DATE ; 001 H.R. TUMBLIN 21-JAN-79 MODIFIED FOR IAS ; ;- .MCALL QIOW$,EXIT$S,C$C,PUSH,POP ; C$C .MACRO TINIT,LUN,FLAG .PSECT DATA,RW,REL,D .MCALL QIOW$,ALUN$,DIR$ .EVEN .OUT: QIOW$ IO.WVB,LUN,FLAG,50.,,,<0,0,0> .ALUN: ALUN$ LUN,TI,0 .PSECT DIR$ #.ALUN .ENDM TINIT .MACRO TTYOUT,ARG1,ARG2 ;; ; This macro will generate output using a common DPB. ; The inputs are : ; ; ARG1 - The starting address of the output string ; ARG2 - The length in bytes of the output string ; ; Outputs: ; None, The stack is cleaned up by the subroutine. ; MOV ARG2,-(SP) ; Push the length onto the stack MOV ARG1,-(SP) ; Push the starting address CALL $OUT ; Go to output routine .ENDM TTYOUT .MACRO READ,MAXSIZ,ERRLOC,?L1 ; .IF NB MAXSIZ ; MOV MAXSIZ,READ+Q.IOPL+2 ; .IFF ; MOV #1,READ+Q.IOPL+2 ; .ENDC MOV #20.,READ+Q.IOPL+2 ;CHANGE SO THERE IS NO AUTO-CR DIR$ #READ,DIRERR .IF NB ERRLOC TSTB RDSTAT BMI ERRLOC .ENDC CALL UPCASE .ENDM ; .MACRO PRETXT .ENABL LC .NLIST BEX .PSECT DATA .EVEN .ENDM PRETXT .MACRO PSTTXT,PS .EVEN .IF NB PS .PSECT PS .IFF .PSECT .ENDC .ENDM .MCALL FCSMC$,EXIT$S,FHDOF$,HMBOF$ HMBOF$ DEF$L FHDOF$ DEF$L FCSMC$ ;+HRT01 .MACRO PSTR ARG,PS .PSECT DATA,RW,D,REL,LCL $$$ST=. .ASCII ARG $$$STS=.-$$$ST .IF NB PS .PSECT PS .IFF .PSECT .ENDC .MCALL DIR$ MOV #$$$STS,-(SP) MOV #$$$ST,-(SP) CALL $OUT ; The stack is cleared by $OUT ; .ENDM PSTR ;+HRT01 .MACRO ERROR,ARG1 .PSECT DATA $$$ST=. .ASCII ARG1 $$$STS=.-$$$ST .PSECT MOV #$$$ST,.OUT+Q.IOPL MOV #$$$STS,.OUT+Q.IOPL+2 DIR$ #.OUT JMP DIE ; Go die .ENDM ERROR .MACRO CSI1,ARG1,ARG2,ARG3,ARG4 .MCALL CSI$1 .ENABL LSB .PSECT CSI$1 ARG1,ARG2,ARG3 BCC 10$ JMP ARG4 10$: .DSABL LSB .ENDM CSI1 .MACRO CSI2,ARG1,ARG2,ARG3,ARG4 .MCALL CSI$2 .PSECT .ENABL LSB CSI$2 ARG1,ARG2,ARG3 BCC 10$ JMP ARG4 10$: .DSABL LSB .ENDM CSI2 .MACRO MUL12,ARG1,ARG2,ARG3 ; MULTIPLY MACRO TO SIMULATE M'S ;; ; THIS MACRO ASSUMES THAT THE INPUT IS A SINGLE WORD ; QUANTITY AND THE OUTPUT IS A 2 WORD MEMORY LOCATION. ; THE THIRD ARGUMENT IS ONLY A DUMMY, FOR M-COMPATABILITY ; .MCALL PUSH,POP PUSH ; PRESERVE REGISTERS MOV ARG1,R0 ; SET UP MULTIPLIER IN R0 MOV ARG2,R2 ; GET FIRST HALF OF NUMBER MOV ARG2+2,R3 ; GET LAST HALF CALL $DMUL ; DO THE MULTIPLY MOV R0,ARG2 ; AND RESTORE THE NUMBER MOV R1,ARG2+2 ; ... POP ; RESTORE REGISTERS .ENDM MUL12 .list .enabl lc ; ;+HRT01 .MCALL PSTR .PSECT ; DIRERR:: PSTR ^*/Directive error/* EXIT$S ; CS1ERR:: PSTR ^*/Error from CSI-1/* EXIT$S ; CS2ERR:: PSTR ^*/Error from CSI-2/* EXIT$S ; IOERR:: PSTR ^*/Error during disk I-O/* EXIT$S ERRPFX:: PSTR ^*/Disk Accounting -- /* RETURN ; DIE:: EXIT$S ; $OUT:: MOV 2(SP),.OUT+Q.IOPL MOV 4(SP),.OUT+Q.IOPL+2 ; And it's length DIR$ #.OUT ; Output it MOV (SP)+,(SP) ; Clean the Stack MOV (SP)+,(SP) ; Clean the Stack RETURN ; (THE LENGTH OF THE DEVICE NAME MUST NOT EXCEED 5 CHARACTERS) ; .PSECT DATA .EVEN CDEV: .WORD DEVTAB ; THE CURRENT DEVICE DEVTAB: .WORD LDB0,DB0 ; FIRST DEVICE TO ACCOUNT .WORD LDB1,DB1 ; SECOND ; .WORD LDB2,DB2 ; THIRD .WORD 0,0 ; AND THE TERMINATOR ; ; .NLIST BEX DB0: .ASCII /DB0:/ LDB0 =.-DB0 DB1: .ASCII /DB1:/ LDB1 =.-DB1 ;DB2: .ASCII /DB2:/ ;LDB2 =.-DB2 ; .LIST BEX .NLIST ; ; THE DISK ACCOUNTING FILE SYMBOLIC DEFINITIONS ; ; UIC RECORD OFFSETS ; DF.UIC = 0 ;BYTE OFFSET TO THE UIC DF.MDC = 4 ;BYTE OFFSET TO THE MAXIMUM DISK SPACE ;ALLOCATION ALLOWED FOR THIS UIC DF.CDC = 10 ;BYTE OFFSET TO THE CURRENT DISK SPACE ;ALLOCATION FOR THIS UIC DF.DBH = 14 ;BYTE OFFSET TO DISK BLOCK-HOURS USED ;BY THIS UIC ; ; GLOBAL (FIRST) RECORD OFFSETS ; DF.MIN = 0 ;BYTE OFFSET TO THE NUMBER OF MINUTES ;REPRESENTED BY THE DATA OF THIS FILE. DAF.SZ = 4 ;BYTE OFFSET TO THE TOTAL NUMBER OF ;UIC RECORDS. DF.YR = 6 ;YEAR (PAST 1900) THAT FILE WAS FIRST USED DF.MO = 10 ;MONTH FILE WAS FIRST USED DF.DA = 11 ;DAY OF MONTH FILE WAS FIRST USED DF.HR = 12 ;HOUR FILE WAS FIRST USED DF.MI = 13 ;MINUTE FILE WAS FIRST USED ; ; MISC. ; SZ.DAF = 200 ;MAXMUM NUMBER OF UIC RECORDS ALLOWED DF.LRC = 20 ;LENGTH OF EACH UIC RECORD DF.SUN = 3 ; Timing units (For RUN$) DF.TIM = 60. ;TIMING FACTOR --> ; THIS VALUE CORRESPONDS TO THE ; TASK'S RESCHEDULED INTERVAL ; EG. IF DF.TIM = 30. THEN THE TASK ; MUST BE SCHEDULED EVERY 30. ; MINUTES. ; DAFLUN = 2 ;LUN ASSOCIATED WITH DAF I/O DAFEVF = 2 ;EVF ASSOCIATED WITH DAF I/O .SBTTL >DAF STORAGES AND FDB ; ; DAF FDB ; DAFFDB: FDBDF$ FDRC$A FD.RWM FDBK$A DAFINF,512.,,DAFEVF FDOP$A DAFLUN,DAFDS ; DAFDS: .WORD LDFDV,DFDV .WORD LDFUC,DFUC .WORD LDFFL,DFFL ; .NLIST BEX DFDV: .ASCII /LB0:/ LDFDV =.-DFDV DFUC: .ASCII /[1,2]/ LDFUC =.-DFUC DFFL: .ASCII /ACCNT/ FILDV: .ASCII /DB00.SYS;1/ LDFFL =.-DFFL .LIST BEX .EVEN ; .PSECT DATA DAFINF: .BLKB +512.&<-511.> .PSECT .LIST