S U B R O U T I N E D A L V F Y C ================================= C C C COMPONENT: DALVFY -- VERIFY VOLUME ALLOCATION FILE C --------- C C DATE: 27-NOV-79 C ---- C C AUTHOR: GR JOHNSON C ------ BATTELLE NORTHWEST C P O BOX 999 C RICHLAND WA 99352 C C SOURCE: FORTRAN IV-PLUS C ------ C C C C DESCRIPTION: C ----------- C C ROUTINE "DALVFY" VERIFIES THE VOLUME ALLOCATION FILE STRUCTURE. C THE VOLUME ALLOCATION FILE IS UPDATED AS NECCESSARY TO INCLUDE ONE ENTRY C FOR EACH DIRECTORY INCLUDED IN THE MASTER DIRECTORY FILE. THE VERIFY C ROUTINE MAY BE CALLED TO INITIALIZE AN EXISTING VOLUME FOR STORAGE C ALLOCATION AND AUDITING. C C THE VOLUME TO BE VERIFIED IS SPECIFIED BY INITIALIZING VARIABLES C "VAFDEV" AND "VAFUNT" IN THE COMMON BLOCK "VAFILE". C C REPORT OUTPUT IS GENERATED ON LOGICAL UNIT 6, WHICH MAY BE ASSIGNED C TO AN APPROPRIATE DEVICE AND/OR FILE PRIOR TO CALLING THE ROUTINE. C C C G L O B A L P A R A M E T E R S A N D V A R I A B L E S C ============================================================= C C C INCLUDE 'VAFILE.COM/NOLIST' INCLUDE 'MDFILE.COM/NOLIST' C C C L O C A L P A R A M E T E R S A N D V A R I A B L E S C =========================================================== C C C PARAMETER VAFLUN = 1 ! VAFILE LUN PARAMETER MDFLUN = 2 ! MDFILE LUN PARAMETER UFDLUN = 3 ! GETSIZ LUN PARAMETER TTYLUN = 5 ! TTY I/O LUN PARAMETER RPTLUN = 6 ! REPORT OUTPUT LUN C INTEGER LUNBUF(6) ! GETLUN DIRECTIVE BUFFER C BYTE ADEV(4) ! ASCII DEVICE NAME BYTE AVOL(6) ! ASCII VOLUME NAME C BYTE ADAT(9) ! DATE BUFFER BYTE ATIM(8) ! TIME BUFFER C INTEGER MDFUIC ! MDF ENTRY USER-ID BYTE MDFUFD(10) ! MDF ENTRY USER DIRECTORY (ASCII) C INTEGER*4 GETSIZ ! GETSIZ FUNCTION (I*4) INTEGER*4 UFDSIZ ! DIRECTORY SIZE (BLOCKS) C INTEGER TOTUFD ! TOTAL MDF UFD'S INTEGER*4 TOTFIL ! TOTAL FILES INTEGER*4 TOTBLK ! TOTAL BLOCKS INTEGER*4 TOTLIM ! TOTAL ALLOCATION LIMIT INTEGER TOTADD ! TOTAL UFD'S ADDED TO VAF C EQUIVALENCE (ADEV,LUNBUF) C C C I N I T I A L I Z A T I O N C =========================== C C C C INITIALIZE DEFAULT VAF ENTRY C 10 VAFFRP=2 VAFLRP=2 DEFLIM=1000 ! DEFAULT DEFLIM C C C C INITIALIZE ASCII USER-ID BUFFER MASK C MDFUFD(1)='[' MDFUFD(5)=',' MDFUFD(9)=']' C C C C RESET ACCUMMULATED TOTALS C TOTUFD=0 TOTFIL=0 TOTBLK=0 TOTLIM=0 TOTADD=0 C C C C ASSIGN LOGICAL UNITS C CALL ASNLUN(VAFLUN,VAFDEV,VAFUNT) CALL ASNLUN(MDFLUN,VAFDEV,VAFUNT) CALL ASNLUN(UFDLUN,VAFDEV,VAFUNT) C C C C FETCH DEVICE PARAMETERS -- ENCODE ASCII DEVICE NAME C CALL GETLUN(VAFLUN,LUNBUF) C ADEV(3)=ADEV(3)+"060 ADEV(4)=':' C C C C FETCH VOLUME NAME C C** C** C C C C OUTPUT REPORT HEADER C CALL DAYTIM(ADAT,IDOW,ATIM) C WRITE(RPTLUN,1002) ADEV,AVOL,ATIM,ADAT 1002 FORMAT(/' Volume allocation file verification ', 2 4A1,6A1,2X,8A1,1X,9A1/) C C C V E R I F Y V O L U M E A L L O C A T I O N F I L E C ========================================================= C C C C OPEN VOLUME ALLOCATION FILE C 20 CALL NOLOCK(VAFLUN) C 2002 OPEN( UNIT=VAFLUN, 2 NAME=VAFFNM, 3 TYPE='OLD', 4 ACCESS='DIRECT',RECORDSIZE=2, 5 SHARED, 6 ERR=2004) C C READ(VAFLUN'1,ERR=90200) VAFDEF GO TO 2010 C 2004 CALL ERRSNS(ISW,IFCS) IF(ISW.EQ.29) GO TO 2006 IF(ISW.NE.30) GO TO 90100 IF(IFCS.NE.-27.AND.IFCS.NE.-29) GO TO 90100 CALL WAIT(1,2,ISW) GO TO 2002 C C C C CREATE VOLUME ALLOCATION FILE (IF NECCESSARY) C 2006 WRITE(TTYLUN,2008) 2008 FORMAT(' Initializing VAF for specified volume'/) C CALL PROTEC('(RWED,RWED,RWE,RWE)','[1,1]') C OPEN( UNIT=VAFLUN, 2 NAME=VAFFNM, 3 TYPE='NEW',INITIALSIZE=2, 4 ACCESS='DIRECT',RECORDSIZE=2, 5 SHARED, 6 ERR=90000) C C WRITE(VAFLUN'1,ERR=90300) VAFDEF WRITE(VAFLUN'2,ERR=90300) C C C C OPEN MASTER DIRECTORY FILE C 2010 CALL NOLOCK(MDFLUN) C 2012 OPEN( UNIT=MDFLUN, 2 NAME=MDFFNM, 3 TYPE='OLD', 4 READONLY,SHARED, 5 ERR=2014) C GO TO 2016 C 2014 CALL ERRSNS(ISW,IFCS) IF(ISW.NE.30) GO TO 90400 IF(IFCS.NE.-27.AND.IFCS.NE.-29) GO TO 90400 CALL WAIT(1,2,ISW) GO TO 2012 C C C C INPUT (NEXT) MDF ENTRY C 2016 READ(MDFLUN,2018,END=2028,ERR=90500) MDFREC 2018 FORMAT(16A1) C C C C TEST MDF ENTRY -- REJECT EMPTY RECORDS C SELECT "DIR" RECORDS ("DIR"="015172) C IF(MDFFID.EQ.0) GO TO 2016 C IF(MDFTYP.NE."015172) GO TO 2016 C C C C CONVERT MDF ENTRY'S UFD C CALL R50ASC(3,MDFNAM(1),MDFUFD(2)) CALL R50ASC(3,MDFNAM(2),MDFUFD(6)) C IF(MDFNAM(3).NE.0) GO TO 90600 C CALL CVTUIC(MDFUFD,MDFUIC,-1,ISW) IF(ISW.LT.0) GO TO 90600 C IF(MDFUIC.EQ.0) GO TO 2016 C C C C TALLY VALID MDF ENTRIES SCANNED C TOTUFD=TOTUFD+1 C C C C SCAN VOLUME ALLOCATION FILE FOR MDF ENTRY'S UFD C VAFERP=0 C DO 2020 VAFPNT=VAFFRP,VAFLRP READ(VAFLUN'VAFPNT,ERR=90200) VAFREC C IF(VAFUIC.EQ.MDFUIC) GO TO 2016 C IF((VAFUIC.EQ.0).AND.(VAFERP.EQ.0)) VAFERP=VAFPNT C 2020 CONTINUE C IF(VAFERP.EQ.0) VAFERP=VAFPNT C C C C UPDATE VOLUME ALLOCATION FILE -- (VAF ENTRY NOT FOUND) C VAFISW=VAFUNL VAFUIC=MDFUIC VAFLIM=DEFLIM C WRITE(VAFLUN'VAFERP,ERR=90300) VAFREC ! APPEND/INSERT VAF ENTRY C IF(VAFERP.LE.VAFLRP) GO TO 2022 C VAFLRP=VAFERP WRITE(VAFLUN'1,ERR=90300) VAFDEF ! UPDATE DEFAULT VAF ENTRY C C C C FETCH DIRECTORY ALLOCATION FOR UFD C 2022 UFDSIZ=GETSIZ(UFDLUN,MDFUFD,ISW) IF(ISW.LT.0) GO TO 90700 C C C C ACCUMMULATE TOTALS C TOTADD=TOTADD+1 C TOTFIL=TOTFIL+ISW TOTBLK=TOTBLK+UFDSIZ C IF(VAFLIM.GT.0) TOTLIM=TOTLIM+VAFLIM C C C C OUTPUT VAF VERIFICATION REPORT C IF(VAFLIM.LT.0) WRITE(RPTLUN,2024) MDFUFD,UFDSIZ 2024 FORMAT(1X,10A1,I11,'.',19X,'VAF entry created') C IF(VAFLIM.GE.0) WRITE(RPTLUN,2026) MDFUFD,UFDSIZ,VAFLIM 2026 FORMAT(1X,10A1,I11,'.',I11,'.',7X,'VAF entry created') C GO TO 2016 C C C C OUTPUT VAF VERIFICATION SUMMARY AND RETURN C C 2028 IF(TOTADD.NE.0) WRITE(RPTLUN,2030) TOTADD,TOTBLK,TOTLIM 2030 FORMAT(' --------- --------- ---------'/ 2 I9,'.',I11,'.',I11,'.'/) C WRITE(RPTLUN,2032) TOTUFD,TOTADD 2032 FORMAT(' MDF entries scanned',I11,'.'/ 2 ' VAF entries created',I11,'.'//) C C RETURN C C C P R O C E S S F A T A L E R R O R S C ======================================= C C C 90000 WRITE(TTYLUN,90001) 90001 FORMAT(' DAL -- VAF create error'/) CALL EXIT C 90100 WRITE(TTYLUN,90101) 90101 FORMAT(' DAL -- VAF open error'/) CALL EXIT C 90200 WRITE(TTYLUN,90201) 90201 FORMAT(' DAL -- VAF read error'/) CALL EXIT C 90300 WRITE(TTYLUN,90301) 90301 FORMAT(' DAL -- VAF write error'/) CALL EXIT C 90400 WRITE(TTYLUN,90401) 90401 FORMAT(' DAL -- MDF open error'/) CALL EXIT C 90500 WRITE(TTYLUN,90501) 90501 FORMAT(' DAL -- MDF read error'/) CALL EXIT C 90600 WRITE(TTYLUN,90601) 90601 FORMAT(' DAL -- Invalid UFD encountered'/) CALL EXIT C 90700 WRITE(TTYLUN,90701) 90701 FORMAT(' DAL -- Fatal directory error'/) CALL EXIT C C END