SUBROUTINE DALREM C C C COMPONENT: DALREM -- REMOVE VOLUME ALLOCATION ENTRY AND UFD C C DATE: 27-NOV-79 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 DESCRIPTION: C C ROUTINE "DALREM" REMOVES A USER FILE DIRECTORY (UFD) AND ANY C ASSOCIATED ENTRY IN THE VOLUME ALLOCATION FILE. THE ROUTINE ALSO C DELETES ANY USER FILES CONTAINED IN THE SPECIFIED DIRECTORY. C C THE VOLUME TO BE UPDATED IS SPECIFIED BY INITIALIZING VARIABLES C "VAFDEV" AND "VAFUNT" IN THE COMMON BLOCK "VAFILE". THE USER DIRECTORY C TO BE REMOVED IS SPECIFIED BY INITIALIZING THE VARIABLE "VAFUIC". 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 INCLUDE 'VAFILE.COM/NOLIST' ! VOLUME ALLOCATION FILE 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 PARAMETER VAFLUN = 1 ! VAFILE LUN PARAMETER TTYLUN = 5 ! TERMINAL I/O LUN C INTEGER DALUIC ! SPECIFIED USER DIRECTORY C BYTE UFDNAM(32) ! UFD FILENAME BUFFER C INTEGER*4 GETSIZ ! GETSIZ FUNCTION (I*4) INTEGER*4 UFDSIZ ! DIRECTORY SIZE (BLOCKS) C C C P R E L I M I N A R Y C C C C INITIALIZE LOCAL UFD BUFFER C DALUIC=VAFUIC C C C R E M O V E U S E R F I L E D I R E C T O R Y C C C C ASSIGN LOGICAL UNIT C 20 CALL ASNLUN(VAFLUN,VAFDEV,VAFUNT) C C C C FETCH DIRECTORY ALLOCATION FOR UFD C CALL CVTUIC(VAFUFD,VAFUIC,0,ISW) C UFDSIZ=GETSIZ(VAFLUN,VAFUFD,ISW) C IF(ISW.EQ.0) GO TO 2004 IF(ISW.EQ.-26) GO TO 2006 IF(ISW.LT.0) GO TO 90000 C C C C DELETE USER FILES -- (UFD EXISTS) C CALL CONCAT(UFDNAM,VAFUFD,'*.*;*') C CALL DELETE(VAFLUN,UFDNAM,ISW) C WRITE(TTYLUN,2002) UFDSIZ,ISW 2002 FORMAT(/' User files deleted.',I11,'. blocks',I8,'. files') C C C C REMOVE USER FILE DIRECTORY C 2004 CALL CVTUIC(VAFUFD,VAFUIC,3,ISW) C CALL CONCAT(UFDNAM,'[0,0]',VAFUFD,'.DIR;*') C CALL DELETE(VAFLUN,UFDNAM,ISW) IF(ISW.LT.0) GO TO 90100 C GO TO 30 C C C C OUTPUT WARNING MESSAGE -- (UFD DOES NOT EXIST) C 2006 WRITE(TTYLUN,2008) 2008 FORMAT(' UFD not found') C C C R E M O V E V O L U M E A L L O C A T I O N E N T R Y C C C C ASSIGN LOGICAL UNIT C 30 CALL ASNLUN(VAFLUN,VAFDEV,VAFUNT) C C C C OPEN VOLUME ALLOCATION FILE C CALL NOLOCK(VAFLUN) C 3002 OPEN(UNIT=VAFLUN,NAME=VAFFIL,TYPE='OLD',ACCESS='DIRECT', 2 RECORDSIZE=2,EXTENDSIZE=2,ERR=3004) READ(VAFLUN'1,ERR=90300) VAFDEF GO TO 3006 C 3004 CALL ERRSNS(ISW,IFCS) IF(ISW.EQ.29) RETURN IF(ISW.NE.30) GO TO 90200 IF(IFCS.NE.-27.AND.IFCS.NE.-29) GO TO 90200 CALL WAIT(1,2,ISW) GO TO 3002 C C C C SCAN VOLUME ALLOCATION FILE FOR SPECIFIED UFD C 3006 DO 3008 VAFPNT=VAFFAR,VAFLAR READ(VAFLUN'VAFPNT,ERR=90300) VAFREC C IF(VAFUIC.EQ.DALUIC) GO TO 3010 C 3008 CONTINUE C GO TO 3012 C C C C UPDATE VOLUME ALLOCATION FILE -- (VAF ENTRY FOUND) C 3010 WRITE(VAFLUN'VAFPNT,ERR=90400) ! CLEAR VAF ENTRY C C C C CLOSE VOLUME ALLOCATION FILE AND RETURN TO CALLER C 3012 CLOSE(UNIT=VAFLUN) 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 90000 WRITE(TTYLUN,90001) 90001 FORMAT(' DAL -- Fatal directory error'/) CALL EXIT C 90100 WRITE(TTYLUN,90101) 90101 FORMAT(' DAL -- UFD remove error'/) CALL EXIT C 90200 WRITE(TTYLUN,90201) 90201 FORMAT(' DAL -- VAF open error'/) CALL EXIT C 90300 WRITE(TTYLUN,90301) 90301 FORMAT(' DAL -- VAF read error'/) CALL EXIT C 90400 WRITE(TTYLUN,90401) 90401 FORMAT(' DAL -- VAF write error'/) CALL EXIT C C END