*COMDECK ALAPPLOAD
      SUBROUTINE APPLOAD(SAVECTR,PROBLEM) 
C 
C 
C        APPLICATIONS HAVING SPECIFIED ADDRESSES ARE LOADED 
C        IN THIS PHASE.  ALL THE MODULES WITHIN AN APPLICA- 
C        TION ARE LOADED SEQUENTIALLY, UNLESS A MODULE HAS
C        A PRE-ASSIGNED ADDRESS, OR IT IS PART OF ANOTHER 
C        APPLICATION WHICH HAS BEEN LOADED ALREADY. 
C 
*CALL ALCOMMON
C 
      DATA HIBIT,BASEND /40000000000000000000B, 177776B/
      PROBLEM = 0 
C 
C        IF A PAGE AREA EXISTS, FILL THE UNUSED PORTION IN
C        THE BASE WITH A PSEUDO-MODULE. 
C 
      IF (.NOT. PGREGD) GO TO 8 
      PGSIZE = PGAREAE - PGAREAB + 1
C 
C        SORT BY ADDRESS; CALCULATE THE UNUSED BASE PAGE AREA.
C 
      CALL SORTARY (SRTDADR,MODCNTR,4)
      DO 2 IN=1,MODCNTR 
      ADRES = AND(MODTABL(1,SRTDADR(IN)),LDADMSK) 
      IF (ADRES .LT. PGAREAB) GO TO 2 
      IF (ADRES .GT. PGAREAE) GO TO 3 
      PGSIZE = PGSIZE - MODTABL(2,SRTDADR(IN))
   2  CONTINUE
C 
C        INSERT THE PSEUDO-MODULE.
C 
   3  IF (PGSIZE .EQ. 0) GO TO 8
      MODCNTR = MODCNTR + 1 
      MODTABL(1,MODCNTR) = PGAREAE - PGSIZE + 1 
      MODTABL(2,MODCNTR) = PGSIZE 
      MODTABL(3,MODCNTR) = 0
      MODTABL(4,MODCNTR) = DUMYMSK
      MODTABL(5,MODCNTR) = 0
C 
C        +++++++++++++++++++++++++++++++++++++++++++++++
C 
C        EXAMINE EACH APPLICATION FOR A NON-ZERO ADDRESS. 
C 
   8  DO 60 LOOP=1,APPLCTR
      IF (APPLADD(LOOP) .EQ. 0) GO TO 60
      NEXTADR = APPLADD(LOOP) 
C 
C        SET UP FILTER FOR APPLICATION NUMBER FLAG. 
C 
      FILTER = SHIFT(HIBIT,LOOP)
      IF (AND(FILTER,DEFMASK) .EQ. 0) GO TO 60
C 
C        SORT ALL THE MODULES BY LOAD ADDRESS, THEN SCAN
C        FOR THE FIRST NON-ZERO ADDRESS.
C 
      CALL SORTARY(SRTDADR,MODCNTR,4) 
      DO 9 J=1,MODCNTR
      ADRES = AND(MODTABL(1,SRTDADR(J)),LDADMSK)
      IF (ADRES .NE. 0) GO TO 10
   9  CONTINUE
  10  NZADRES = ADRES 
C 
C        NUMBER OF MODULES HAVING ZERO ADDRESSES
C 
      NUMOFMD = J-1 
C 
C        FIND THE FIRST MODULE ADDRESS GREATER THAN 
C        THE APPLICATION ADDRESS. 
C 
      INDEX = J 
  12  IF (NZADRES - APPLADD(LOOP)) 14,16,20 
C 
C        DETERMINE WHETHER THE APPLICATION BEGINS AFTER MODULE
C        TERMINATION OR OVERLAPS. 
C 
  14  ADDEND = NZADRES + MODTABL(2,SRTDADR(INDEX)) - 1
      IF (APPLADD(LOOP) .LE. ADDEND) GO TO 900
      INDEX = INDEX + 1 
      IF (INDEX .GT. MODCNTR) GO TO 19
      NZADRES = AND(MODTABL(1,SRTDADR(INDEX)),LDADMSK)
      GO TO 12
C 
C        IF ADDRESSES ARE IDENTICAL, THEN THE APPLICATION 
C        IS BEING LOADED INTO AN OVERLAY AREA UNDER USER
C        CONTROL. 
C 
  16  IF (SRTDADR(INDEX) .LE. SAVECTR) GO TO 900
      NZADRES = AND(MODTABL(1,SRTDADR(INDEX+1)),LDADMSK)
      GO TO 20
  19  NZADRES = BASEND
C 
C        EXAMINE EACH MODULE WITH A ZERO ADDRESS. 
C 
  20  DO 40 MOD=1,NUMOFMD 
C 
C        IF THE APLICATION FLAG IS NOT SET, THEN SKIP.
C 
      IF (AND(MODTABL(3,SRTDADR(MOD)),FILTER)  .EQ. 0) GO TO 40 
      IF (AND(MODTABL(3,SRTDADR(MOD)),DEFMASK) .EQ. 0) GO TO 60 
C 
C        IF THE MODULE IS A "FILLER", THEN SKIP.
C 
      IF (AND(MODTABL(4,SRTDADR(MOD)),FILLMSK) .NE. 0) GO TO 40 
      IF (MODTABL(1,SRTDADR(MOD)) .EQ. ZERONAM)        GO TO 40 
C 
C        INSERT THE ADDRESS IN "MODTABL"
C 
      MODTABL(1,SRTDADR(MOD)) = MODTABL(1,SRTDADR(MOD)) + 
     X        NEXTADR 
      NEXTADR = NEXTADR + MODTABL(2,SRTDADR(MOD)) 
C 
C        WILL THIS MODULE OVERLAP ANOTHER MODULE? 
C 
      IF (NEXTADR .GT. NZADRES) GO TO 908 
  40  CONTINUE
      IF (NEXTADR .GT. BASEND) GO TO 910
  60  CONTINUE
      RETURN
C 
C 
C        ********* PROBLEMS ********* 
C 
C        APPLICATION ADDRESS OVERLAPS AN ADDRESS MODULE 
C 
 900  PROBLEM = 1 
      WRITE (5,901) 
 901  FORMAT (1X,////,5X,8(1H+)," OCCURRED DURING APPLICATION ",
     X     "LOADING.")
      WRITE (5,902) MODTABL(1,SRTDADR(INDEX)),APPLNAM(LOOP) 
 902  FORMAT (14X,"MODULE = ",A6," OVERLAPPED BY ", 
     X    "APPLICATION = ",A6)
      RETURN
C 
C        TWO MODULES OVERLAP. 
C 
 908  PROBLEM = 1 
      WRITE (5,901) 
      WRITE (5,909) MODTABL(1,SRTDADR(MOD)) 
 909  FORMAT (14X,"MODULE = ",A6," OVERLAPS ANOTHER MODULE.") 
      RETURN
C 
C        APPLICATION OVERFLOWS BASE MEMORY. 
C 
 910  PROBLEM = 2 
      RETURN
      END 
C 
C 
