*COMDECK ALSEQLOAD
      SUBROUTINE SEQLOAD(PROBLEM) 
C 
C 
C        THIS PHASE INSERTS THE ADDRESSES OF 'NON-FILLER' MODULES.
C        THEY ARE GROUPED BY APPLICATION AND WITHIN AN APPLICTION 
C        THEY ARE IN THE SAME RELATIVE ORDER AS ENTERED INTO
C        'MODTABL' FROM DIRECTIVE CARDS.  ADDRESSING BEGINS WITH
C        THE FIRST APPLICATION AND CONTINUES SEQUENTIALLY FOR 
C        ALL BUT THE LAST APPLICATION WHICH WILL BE ADDRESSED 
C        LATER.  MODULES ARE ASSIGNED TO THE LARGEST AREA IN THE
C        BASE MEMORY BEGINNING WITH THE LOWEST ADDRESS. 
C 
*CALL ALCOMMON
C 
      PROBLEM = 0 
      MDS2BLD = 0 
      APPLNUM = 1 
C 
      CALL FINDHOL(HOLBEGN,HOLEND, HOLSIZE) 
C 
C        MODULES ARE SORTED BY INCREASING ADDRESS.  DETERMINE THE 
C        NUMBER TO BE LOADED IN THIS PHASE. 
C 
      CALL SORTARY(SRTDADR,MODCNTR,4) 
      APPLIM = APPLCTR - 1
C 
C        APPLICATION FLAG IS A 1 BIT SET FOR EACH APPLICATION TO
C        WHICH A MODULE BELONGS WITH THE LEFTHAND BIT SET FOR THE 
C        LAST APPLICATION.  CREATE A FILTER WHICH WILL IGNORE 
C        THE LAST APPLICATION.
C 
      LHBITS = 60 - APPLIM
      INVMASK = MASK(LHBITS)
      RHBITS = COMPL(INVMASK) 
      TRUMASK = AND(DEFMASK,RHBITS) 
C 
C        IGNORE MODULES WITH NON-ZERO ADDRESSES, NOT IN AN APPLICA- 
C        TION TO BE LOADED, AND 'FILLER' MODULES. 
C 
      DO 10 K=1,MODCNTR 
      IF (AND(MODTABL(1,SRTDADR(K)),LDADMSK) .NE. 0) GO TO 12 
      IF (AND(MODTABL(3,SRTDADR(K)),TRUMASK) .EQ. 0) GO TO 10 
      IF (AND(MODTABL(4,SRTDADR(K)),FILLMSK) .NE. 0) GO TO 10 
      MDS2BLD = MDS2BLD + 1 
  10  CONTINUE
C 
C        IGNORE THE MODULE ASSIGNED TO LOCATION $0000 IF IT IS A
C        DEFINED APPLICATION; OTHERWISE IT HAS BEEN IGNORED ALREADY.
C 
  12  DO 14 N=1,MODCNTR 
      NAME = AND(MODTABL(1,N),MODNAME)
      IF (ZERONAM .EQ. NAME) GO TO 15 
  14  CONTINUE
      GO TO 16
  15  MASK6 = AND(MODTABL(3,N),DEFMASK) 
      IF (MASK6 .EQ. 0) GO TO 16
      MDS2BLD = MDS2BLD - 1 
  16  CONTINUE
      IF (MDS2BLD .LE. 0) RETURN
C 
C        DETERMINE WHETHER THIS IS AN APPROPRIATE APPLICATION.
C 
      IF (AND(APPLNUM,DEFMASK) .EQ. 0) GO TO 40 
C 
C        SCAN FOR UNADDRESSED MODULES BEGINNING WITH THE FIRST
C        MODULE IN 'MODTABL'.  DETERMINE WHETHER THE MODULE 
C        SHOULD BE LOADED.
C 
  20  DO 30 N=1,MODCNTR 
      IF (MDS2BLD .EQ. 0) RETURN
C 
C        SKIP MODULES UNRELATED TO A PARTICULAR APPLICATION,
C        NON-ZERO ADDRESSES, 'FILLER' MODULES, AND THE
C        MODULE STARTING AT LOCATION $0000. 
C 
      IF (AND(MODTABL(1,N),LDADMSK) .NE. 0) GO TO 30
      IF (MODTABL(1,N) .EQ. ZERONAM)        GO TO 30
      IF (AND(MODTABL(3,N),APPLNUM) .EQ. 0) GO TO 30
      IF (AND(MODTABL(4,N),FILLMSK) .NE. 0) GO TO 30
C 
C        TEST FOR MODULE OVERFLOW.
C 
      TEST = HOLBEGN + MODTABL(2,N) 
      IF (TEST .GT. (HOLEND+1) ) GO TO 900
C 
C        INSERT ADDRESS AND MOVE TO THE END OF THE MODULE.
C 
      MODTABL(1,N) = MODTABL(1,N) + HOLBEGN 
      HOLBEGN = HOLBEGN + MODTABL(2,N)
      MDS2BLD = MDS2BLD - 1 
  30  CONTINUE
C 
C        WHEN AN APPLICATION HAS BEEN LOADED, SHIFT TO THE
C        NEXT ONE.
C 
  40  APPLNUM = APPLNUM * 2 
      IF (AND(APPLNUM,DEFMASK) .EQ. 0) GO TO 40 
      GO TO 20
C 
C 
C            ****** PROBLEMS ****** 
C 
C        MODULE OVERFLOWS THE END OF THE HOLE.
C 
 900  PROBLEM = 1 
      IF (RPTGEN) RETURN
      WRITE (5,905) MODTABL(1,N),MDS2BLD
 905  FORMAT (1X,////,5X,8(1H+)," SEQUENTIAL LOADING PREVENTED.",/, 
     X    14X,"A BREAK OCCURS AT MODULE = ",A6,".",/, 
     X    14X,I3," MODULES REMAIN TO BE LOADED.") 
      DO 915 M=1,MODCNTR
      IF (AND(MODTABL(1,M),LDADMSK) .NE. 0) GO TO 915 
      IF (MODTABL(1,M) .EQ. ZERONAM)        GO TO 915 
      IF (AND(MODTABL(3,M),TRUMASK) .EQ. 0) GO TO 915 
      IF (AND(MODTABL(4,M),FILLMSK) .NE. 0) GO TO 915 
      WRITE (5,910) MODTABL(1,M)
 910  FORMAT (24X,A6) 
 915  CONTINUE
      RETURN
      END 
C 
C 
