S U B R O U T I N E D A L A D T C ================================== C C C COMPONENT: DALADT -- AUDIT 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 REVISIONS: 08-FEB-80 GR JOHNSON LOCK & UNLOCK QUALIFIERS C --------- AUDIT UPDATED VAF ENTRIES C C C C DESCRIPTION: C ----------- C C ROUTINE "DALADT" MONITORS STORAGE UTILIZATION FOR USER DIRECTORIES C ENTERED IN THE VOLUME ALLOCATION FILE (VAF). VOLUME UTILIZATION IS C REPORTED FOR EACH USER DIRECTORY AND ACCOUNTS WITH EXCESSIVE STORAGE ARE C LOCKED FROM FURTHER PROCESSING. C C THE VOLUME TO BE AUDITED IS SPECIFIED BY INITIALIZING VARIABLES C "VAFDEV" AND "VAFUNT" IN THE COMMON BLOCK "VAFILE". A SPECIFIC USER C DIRECTORY MAY BE SPECIFIED BY INITIALIZING THE VARIABLE "VAFUIC". C IF THE USER DIRECTORY ARGUMENT IS NOT INITIALIZED, STORAGE UTILIZATION C WILL BE MONITORED FOR ALL ENTRIES IN THE VOLUME ALLOCATION FILE. C C A "BRIEF" AUDIT REPORT MAY BE GENERATED FOR ALL DIRECTORY ENTRIES C BY INITIATING THE ROUTINE VIA THE "ADTBRF" ENTRY POINT. C C INITIATING THE ROUTINE VIA THE "ADTUPD" ENTRY POINT ENABLES C ACCOUNTS TO BE UNLOCKED AS WELL AS LOCKED, PROVIDED VOLUME UTILIZATION C IS IN COMPLIANCE WITH ALLOCATION LIMITS. C C INITIATING THE ROUTINE VIA THE "ADTLOK" OR "ADTUNL" ENTRY POINT C OVERRIDES THE AUTOMATIC ACCOUNT LOCK/UNLOCK FEATURE. 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' C INCLUDE 'USNPAR.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 UFDLUN = 2 ! GETSIZ LUN PARAMETER TTYLUN = 5 ! TERMINAL I/O LUN PARAMETER RPTLUN = 6 ! REPORT OUTPUT LUN C PARAMETER EOS = 0 ! END-OF-STRING C LOGICAL ALL ! AUDIT ALL UFD'S LOGICAL BRF ! GENERATE BRIEF AUDIT SUMMARY LOGICAL LOK ! LOCK ACCOUNTS LOGICAL UNL ! UNLOCK ACCOUNTS LOGICAL UPD ! AUTOMATIC UNLOCK ENABLED C LOGICAL LOCK ! LOCK USERNAME LOGICAL UNLOCK ! UNLOCK USERNAME LOGICAL FOUND ! USERNAME FOUND 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 DALUIC ! SPECIFIED USER DIRECTORY C INTEGER*4 GETSIZ ! GETSIZ FUNCTION (I*4) INTEGER*4 UFDSIZ ! DIRECTORY SIZE (BLOCKS) C INTEGER TOTUFD ! TOTAL UFD'S ASSIGNED INTEGER*4 TOTFIL ! TOTAL FILES INTEGER*4 TOTBLK ! TOTAL BLOCKS INTEGER*4 TOTLIM ! TOTAL ALLOCATION LIMIT INTEGER TOTLOK ! TOTAL UFD'S LOCKED INTEGER TOTUNL ! TOTAL UFD'S UNLOCKED 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 "AUDIT" ENTRY POINT -- SET FLAGS C 10 LOK=.FALSE. UNL=.FALSE. UPD=.FALSE. C GO TO 1002 C C C C "LOCK" ENTRY POINT -- SET FLAGS C ENTRY ADTLOK C LOK=.TRUE. UNL=.FALSE. UPD=.FALSE. C GO TO 1002 C C C C "UNLOCK" ENTRY POINT -- SET FLAGS C ENTRY ADTUNL C LOK=.FALSE. UNL=.TRUE. UPD=.FALSE. C GO TO 1002 C C C C "UPDATE" ENTRY POINT -- SET FLAGS C ENTRY ADTUPD C LOK=.FALSE. UNL=.FALSE. UPD=.TRUE. C C C C SET "ALL" FLAG IF SPECIFIC UFD NOT REQUESTED C 1002 DALUIC=VAFUIC ALL=DALUIC.EQ.0 C C C C "BRIEF" AUDIT ENTRY POINT -- SET FLAG C BRF=.FALSE. GO TO 1004 C C ENTRY ADTBRF C ALL=.TRUE. BRF=.TRUE. LOK=.FALSE. UNL=.FALSE. UPD=.FALSE. C C C C RESET ACCUMMULATED TOTALS C 1004 TOTUFD=0 TOTFIL=0 TOTBLK=0 TOTLIM=0 TOTLOK=0 TOTUNL=0 C C C C ASSIGN LOGICAL UNITS C CALL ASNLUN(VAFLUN,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,1006) ADEV,AVOL,ATIM,ADAT 1006 FORMAT(/' Volume allocation audit ',4A1,6A1,2X,8A1,1X,9A1/) C C C A U D I T U S E R D I R E C T O R Y A L L O C A T I O N 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 READ(VAFLUN'1,ERR=90200) VAFDEF GO TO 2006 C 2004 CALL ERRSNS(ISW,IFCS) IF(ISW.EQ.29) GO TO 90000 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 REPORT VOLUME DEFAULT ALLOCATION -- (IF REQUESTED) C 2006 IF(.NOT.ALL) GO TO 2012 C IF(DEFLIM.EQ.VAFNOL) WRITE(RPTLUN,2008) 2008 FORMAT(' [DEFAULT]'/) C IF(DEFLIM.NE.VAFNOL) WRITE(RPTLUN,2010) DEFLIM 2010 FORMAT(' [DEFAULT]',12X,I11,'.'/) C C C C SCAN VOLUME ALLOCATION FILE C 2012 DO 40 VAFPNT=VAFFRP,VAFLRP READ(VAFLUN'VAFPNT,ERR=90200) VAFREC C IF(VAFUIC.EQ.0) GO TO 40 C C C C TEST FOR SPECIFIED UFD -- (IF REQUESTED) C IF((.NOT.ALL).AND.(VAFUIC.NE.DALUIC)) GO TO 40 C C C C FETCH DIRECTORY ALLOCATION FOR UFD C CALL CVTUIC(VAFUFD,VAFUIC,1,ISW) IF(ISW.LT.0) GO TO 90400 C UFDSIZ=GETSIZ(UFDLUN,VAFUFD,ISW) IF(ISW.EQ.-26) GO TO 3030 IF(ISW.LT.0) GO TO 90500 C C C C ACCUMMULATE TOTALS C TOTUFD=TOTUFD+1 C TOTFIL=TOTFIL+ISW TOTBLK=TOTBLK+UFDSIZ C IF(VAFLIM.NE.VAFNOL) TOTLIM=TOTLIM+VAFLIM C C C C RESET LOCAL FLAGS C LOCK=.FALSE. UNLOCK=.FALSE. C IF(LOK) GO TO 2014 IF(UNL) GO TO 2018 C C C C UPDATE VAF AND USER PROFILE IF ALLOCATION EXCEEDED -- (LOCK DIRECTORY) C IF(VAFLIM.EQ.VAFNOL) GO TO 2016 IF(UFDSIZ.LE.VAFLIM) GO TO 2016 C 2014 LOCK=.TRUE. TOTLOK=TOTLOK+1 C VAFISW=VAFLOK C WRITE(VAFLUN'VAFPNT,ERR=90300) VAFREC C CALL DALUPF(LOCK,FOUND) GO TO 30 C C C C UPDATE VAF AND USER PROFILE IF ALLOCATION NOT-EXCEEDED -- (UNLOCK DIRECTORY) C 2016 IF(VAFISW.NE.VAFLOK) GO TO 30 IF(.NOT.UPD) GO TO 2014 C 2018 UNLOCK=.TRUE. TOTUNL=TOTUNL+1 C VAFISW=VAFUNL C WRITE(VAFLUN'VAFPNT,ERR=90300) VAFREC C CALL DALUPF(LOCK,FOUND) C C C O U T P U T V A F A U D I T R E P O R T C ============================================= C C C 30 IF(LOCK) GO TO 3006 IF(UNLOCK) GO TO 3018 IF(BRF) GO TO 3034 C C C >>> FORMAT 1 -- REPORT DIRECTORY ALLOCATION C IF(VAFLIM.EQ.VAFNOL) WRITE(RPTLUN,3002) VAFUFD,UFDSIZ 3002 FORMAT(1X,10A1,I11,'.') C IF(VAFLIM.NE.VAFNOL) WRITE(RPTLUN,3004) VAFUFD,UFDSIZ,VAFLIM 3004 FORMAT(1X,10A1,I11,'.',I11,'.') C GO TO 3034 C C C >>> FORMAT 2A -- REPORT DIRECTORY LOCKED (LIMITED STORAGE) C 3006 IF(VAFLIM.EQ.VAFNOL) GO TO 3012 C IF(FOUND) WRITE(RPTLUN,3008) VAFUFD,UFDSIZ,VAFLIM,USRNAM 3008 FORMAT(1X,10A1,I11,'.',I11,'.',7X,'User ',12A1,' locked') C IF(.NOT.FOUND) WRITE(RPTLUN,3010) VAFUFD,UFDSIZ,VAFLIM 3010 FORMAT(1X,10A1,I11,'.',I11,'.',7X,'UFD locked') C GO TO 3034 C C C >>> FORMAT 2B -- REPORT DIRECTORY LOCKED (UNLIMITED STORAGE) C 3012 IF(FOUND) WRITE(RPTLUN,3014) VAFUFD,UFDSIZ,USRNAM 3014 FORMAT(1X,10A1,I11,'.',19X,'User ',12A1,' locked') C IF(.NOT.FOUND) WRITE(RPTLUN,3016) VAFUFD,UFDSIZ 3016 FORMAT(1X,10A1,I11,'.',19X,'UFD locked') C GO TO 3034 C C C >>> FORMAT 3A -- REPORT DIRECTORY UNLOCKED (LIMITED STORAGE) C 3018 IF(VAFLIM.EQ.VAFNOL) GO TO 3024 C IF(FOUND) WRITE(RPTLUN,3020) VAFUFD,UFDSIZ,VAFLIM,USRNAM 3020 FORMAT(1X,10A1,I11,'.',I11,'.',7X,'User ',12A1,' unlocked') C IF(.NOT.FOUND) WRITE(RPTLUN,3022) VAFUFD,UFDSIZ,VAFLIM 3022 FORMAT(1X,10A1,I11,'.',I11,'.',7X,'UFD unlocked') C GO TO 3034 C C C >>> FORMAT 3B -- REPORT DIRECTORY UNLOCKED (UNLIMITED STORAGE) C 3024 IF(FOUND) WRITE(RPTLUN,3026) VAFUFD,UFDSIZ,USRNAM 3026 FORMAT(1X,10A1,I11,'.',19X,'User ',12A1,' unlocked') C IF(.NOT.FOUND) WRITE(RPTLUN,3028) VAFUFD,UFDSIZ 3028 FORMAT(1X,10A1,I11,'.',19X,'UFD unlocked') C GO TO 3034 C C C >>> FORMAT 4 -- REPORT NO UFD FOUND C 3030 WRITE(RPTLUN,3032) VAFUFD,VAFLIM 3032 FORMAT(1X,10A1,12X,I11,'.',7X,'UFD not found') C C C 3034 IF(.NOT.ALL) GO TO 4002 C C C O U T P U T V A F A U D I T S U M M A R Y C =============================================== C C C C CONTINUE TO SCAN VOLUME ALLOCATION FILE C 40 CONTINUE C C C C CLOSE FILES C 4002 CLOSE(UNIT=VAFLUN) C C C C OUTPUT VAF AUDIT SUMMARY (IF NECCESSARY) AND RETURN C IF(ALL) GO TO 4006 C IF(TOTUFD.EQ.0) WRITE(TTYLUN,4004) 4004 FORMAT(' Specified UFD not found'/) CLOSE(UNIT=RPTLUN,DISPOSE='DELETE') RETURN C 4006 IF(BRF) RETURN C C IF(TOTUFD.NE.0) WRITE(RPTLUN,4008) TOTUFD,TOTBLK,TOTLIM 4008 FORMAT(' --------- --------- ---------'/ 2 I9,'.',I11,'.',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(' Volume not initialized for directory allocation'/) 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 -- Invalid UFD encountered'/) CALL EXIT C 90500 WRITE(TTYLUN,90501) 90501 FORMAT(' DAL -- Fatal directory error'/) CALL EXIT C C END