*COMDECK ALDLETOPH
      OVERLAY(4,0)
      PROGRAM DLETOPH 
C 
C 
C        THIS MAIN PHASE ROUTINE DELETES TOPHATS THAT ARE NO
C        LONGER NEEDED BECAUSE ALL APPLICATIONS WHICH REQUIRE THE 
C        TOPHATS ARE IN NON-PAGED MAIN MEMORY.
C 
C 
C 
*CALL ALCOMMON
      DATA MODULE /5/ 
C 
C 
C 
      SWITCH = 1
      DO 40 I=1,MODCNTR 
C 
C        GET THE TOPHAT NAME FOR THIS MODULE. 
C 
      THNAME = AND(MODTABL(4,I),THNMASK)
C 
C        IGNORE THIS MODULE IF THERE IS NO TOPHAT.
C 
      IF (THNAME.EQ.0) GO TO 40 
C 
C        ALSO IGNORE IT IF THE LOAD ADDRESS IS ZERO, I.E., THIS 
C        MODULE IS NOT YET LOADED.
C 
      ADDR = AND(MODTABL(1,I),LDADMSK)
      IF (ADDR.NE.0) GO TO 40 
C 
C        IF WE GET HERE, THE TOPHAT IS NOT NEEDED, SINCE ALL
C        APPLICATIONS REQUIRING THIS MODULE ARE LOADED TO 
C        NON-PAGED MAIN MEMORY. 
C        SET THE SYN-REQUIRED BIT FOR THIS MODULE.
C 
      MODTABL(4,I) = OR(MODTABL(4,I),SHIFT(1,SYNRSHF))
C 
C        NOW GO FIND THE TOPHAT AND FLAG IT AS DELETED. 
C 
      CALL FINDMOD(THNAME,INDEX)
C 
C        ERROR IF IT CAN'T BE FOUND 
C 
      IF (INDEX.LT.0) GO TO 900 
      MODTABL(3,INDEX) = 0
      MODTABL(4,INDEX) = OR(MODTABL(4,INDEX),SHIFT(1,THDLSHF))
   40 CONTINUE
C 
C        EXAMINE TOPHATS TO DETERMINE WHICH SHOULD BE DELETED.
C        CALCULATE THE LENGTH OF EACH APPLICATION.
C 
      DO 50 I=1,MODCNTR 
C 
C        BRANCH IF THIS IS NOT A DELETED TOPHAT.
C 
      IF (AND(MODTABL(4,I),THDLMSK).EQ.0) GO TO 12
C 
C        PRINT THE INFO ON DELETED TOPHATS IF THE USER WANTS IT.
C 
      CALL OUTINFO(I) 
      GO TO 50
C 
C        DO NOT TRY TO LOAD THIS MODULE IF IT HAS ALREADY BEEN LOADED,
C        IF NO APPLICATIONS ARE DEFINED FOR IT, OR IF IT IS A DUMMY 
C        MODULE (FROM A RESERVE DIRECTIVE). 
C 
   12 IF (AND(MODTABL(1,I),LDADMSK).NE.0) GO TO 50
      IF (AND(DEFMASK,MODTABL(3,I)).EQ.0) GO TO 50
C 
C        ADJUST THE MAIN MEMORY LENGTH OF THIS APPLICATION. 
C 
      APPLTMP = AND(MODTABL(3,I),DEFMASK) 
      DO 17 J=1,APPLCTR 
      IF (MOD(APPLTMP,2).NE.0) GO TO 18 
   17 APPLTMP = APPLTMP / 2 
   18 APPLMN(J) = APPLMN(J) + MODTABL(2,I)
   50 CONTINUE
      RETURN
C 
C 
C 
C 
C        ERROR - TOPHAT MODULE COULD NOT BE FOUND 
C 
  900 IF (RPTGEN) GO TO 40
      GO TO (901,902), SWITCH 
  901 WARNING = .TRUE.
      SWITCH = 2
      CALL ERRMSG (MODULE,36) 
  902 WRITE (ERRFIL,903) THNAME 
  903 FORMAT (10X,A6) 
      GO TO 40
      END 
C 
C 
*CALL ALOUTINFO 
