.TITLE GETSIZ .IDENT /V02/ .SBTTL DESCRIPTION ; ; ; COMPONENT: GETSIZ.MAC ; ; DATE: 03-JAN-80 ; 14-OCT-80 -- BIOMETRICS USE OTHER LUN ; ; AUTHOR: TJ Mathieu ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL GETSIZ(UFD,HIGH,LOW,[ISW]) ; ; ; UFD = VARIABLE, ARRAY, OR LITERAL SPECIFYING THE ; UFD TO BE SCANNED. THE FILE SEARCH ; WILL SCAN USING "WILD-CARD" SPECIFIERS. ; ; HIGH = HIGH ORDER PART OF TOTAL BLOCKS. ; ; LOW = LOW ORDER PART OF TOTAL BLOCKS. ; ; ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. ; ; 00 = SUCCESS. FILE NOT FOUND. ; ; +NN = SUCCESS. NN FILES FOUND. ; ; -01 = ILLEGAL FILE SPECIFICATION ; -34 = LUN ALREADY IN USE ; -52 = WILD CARD DIRECTORY NOT ALLOWED ; -96 = INVALID LOGICAL UNIT NUMBER ; ; -NN = OTHER FCS ERROR CODE ; ; ; RESTRICTIONS: ; ; USES LUN 6 SO IT SHOULD BE FREE. ; DESIGNED TO BE CALLED FROM PASCAL. ; ; ; DESCRIPTION: ; ; "GETSIZ" RETURNS THE TOTAL NUMBER OF BLOCKS ALLOCATED TO THE ; SPECIFIED UFD. THE FILE SPECIFICATION WILL UTILIZE "WILD-CARD" ; SPECIFIERS. THE NUMBER OF FILES ACTUALLY SCANNED IS OPTIONALLY RETURNED ; IN THE INTEGER STATUS WORD. ; ; EXAMPLE: ; ; ; UFD := '[1,1]'; ; GETSIZ(UFD,HIGH,LOW,ISW); ; ; .SBTTL SYMBOL DEFINITIONS ; .PSECT ; .MCALL CSI$,CSI$1,CSI$2 ; .MCALL QIOW$S,NBOFF$ ; ; CSI$ ; DEFINE CSI OFFSETS NBOFF$ DEF$L ; DEFINE FILE NAME BLOCK OFFSETS ; NB.SVR = 10 ; VERSION NUMB NB.STP = 20 ; TYPE NB.SNM = 40 ; FILE NAME NB.SFN = NB.SNM!NB.STP!NB.SVR ; N.STAT "WILD-CARD FILENAME" ; CSIB: .BLKB C.SIZE ; CSI BLOCK ; RATST: .WORD 0,0 ; QIO IO.RAT STATUS BLOCK ; RATCB: .BYTE -9. ; QIO IO.RAT CONTROL BLOCK .BYTE 10. ; .WORD STBLK ; .BLKW 3 ; ; STBLK: .BLKB 10. ; STATISTICS BLOCK ; BLKSA: .BLKW 2 ; BLOCKS ALLOCATED ; LUN = 6 ; LOGICAL USER NUMBER .MCALL FDBDF$,FINIT$,FSRSZ$,FDOP$A,FDBF$A,FDRC$A INFL: FDBDF$ ; DEFINE FDB FDOP$A LUN FDRC$A 0,0,0 FDBF$A LUN,0,0 .EVEN .PAGE .SBTTL ENTRY POINT -- ACCUMULATE FILE STATISTICS ; GETSZ2:: ; CLR BLKSA ; CLEAR BLOCK COUNT CLR BLKSA+2 ; ; SCAN FOR FILESPEC STRING LENGTH 1$: MOV 2(R5),R1 ; STRING ADDRESS TO R1 CLR R2 ; CLEAR CHARACTER COUNT 2$: TSTB (R1)+ ; END-OF-STRING? BEQ 4$ ; YES, BRANCH FROM SCAN INC R2 ; NO, INCREMENT CHARACTER COUNT BR 2$ ; AND CONTINUE TO SCAN ; ; VALIDATE AND PARSE FILESPEC 4$: MOV #CSIB,R0 ; CSI BLOCK ADDRESS TO R0 MOV 2(R5),R1 ; STRING ADDRESS TO R1 CSI$1 R0,R1,R2 ; CHECK FILE SPECIFICATION SYNTAX BCS IEBAD ; RETURN ON ERROR CSI$2 R0,OUTPUT ; PARSE FILE SPECIFICATION ; ; TEST LUN / FETCH FDB ADDRESS MOV #INFL,R0 ; GET FDB ; ; INITIALIZE LUN'S FNB MOV R0,R1 ; ADDRESS OF LUN'S FDB TO R1 ADD #F.FNB,R1 ; ADDRESS OF LUN'S FNB TO R1 MOV #CSIB+C.DSDS,R2 ; ADDRESS OF DSD TO R2 CLR R3 ; NO DEFAULT FNB CALL .PARSE ; INITIALIZE BCS ERR ; BRANCH ON ERROR ; BIS #NB.SFN,N.STAT(R1) ; FORCE *.*;* ; ; "FIND" (NEXT) FILE CLR R4 ; CLEAR FILE COUNT NEXT: CALL .FIND ; FETCH FID AND N.NEXT VALUES BCS SUC ; FILE NOT FOUND, RETURN TO CALLER ; ; READ FILE ATTRIBUTES (QIO IO.RAT) QIOW$S #IO.RAT,#LUN,#LUN,,#RATST,, ; TSTB RATST ; OPERATION SUCCESSFUL? BLT 2$ ; READ ATTRIBUTES ERROR, BRANCH AHEAD ; ADD STBLK+6,BLKSA ; ACCUMULATE BLOCK TOTALS ADC BLKSA+2 ; ADD STBLK+4,BLKSA+2 ; INC R4 ; INCREMENT FILE COUNT ; 2$: BIT #NB.SFN,N.STAT(R1) ; WILD-CARDS? BNE NEXT ; YES, NEXT FILE ; .SBTTL PROCESS ERRORS AND RETURN TO CALLER ; ; ; SUC: BR RTN ; RETURN WITH ISW = # FILES FOUND ; IEBAD: MOV #IE.BAD,R4 ; FILE SPECIFICATION ERROR BR RTN ; IEILU: MOV #IE.ILU,R4 ; INVALID LUN BR RTN ; IEALN: MOV #IE.ALN,R4 ; LUN ALREADY IN USE BR RTN ; ERR: MOVB F.ERR(R0),R4 ; MISC. ERRORS ; ; RTN: CMPB #4,(R5) ; FOUR ARGUMENTS? BGT 2$ ; NO, RETURN TO CALLER ; TST 10(R5) ; NULL ARGUMENT? ; BLT 2$ ; YES, RETURN TO CALLER MOV R4,@10(R5) ; NO, RETURN STATUS 2$: MOV BLKSA,@6(R5) ; LOW ORDER BLOCK COUNT MOV BLKSA+2,@4(R5) ; HIGH ORDER BLOCK COUNT RTS PC ; RETURN TO CALLER .END ;