*COMDECK ALOUTRPTS
      SUBROUTINE OUTRPTS
C 
C 
C 
C        THIS ROUTINE PRINTS THE VARIOUS REPORTS REQUESTED BY 
C        THE USER THAT HAVE NOT YET BEEN OUTPUT.
C 
C 
*CALL ALCOMMON
      DIMENSION RPTTYPE(2),OVLY(4),NAMES(4),ADDRS(4),PAGED(4) 
      DIMENSION COL(4),VARRAY(20),CTARRAY(20),PTRARAY(20) 
C 
C 
      DATA RPTTYPE / "ADDRESS" , "NAME" / 
      DATA AA,X / 2RAA , 1RX /
      DATA MOD4RES / 77777777777717777777B /
      DATA APPLRST / 77777777777730000000B /
      DATA MODULE /9/ 
C 
C 
C        RETURN IF NO LIST CAN BE PRODUCED. 
C 
      IF (NOLIST) RETURN
C 
C        INITIALIZE THE PAGE AND MAIN MEMORY LENGTHS FOR
C        EACH APPLICATION.
C 
      DO 1 J=1,APPLCTR
      APPLPGD(J) = 0
   1  APPLMN(J)  = 0
C 
C        CALCULATE THE PAGED AND MAIN MEMORY LENGTHS
C        FOR EACH MODULE. 
C 
      DO 8 K=1,MODCNTR
C 
C        IF MODULE IS UNDEFINED, SKIP IT. 
C 
      FLAGS = AND(MODTABL(3,K),DEFMASK) 
      IF (FLAGS .EQ. 0) GO TO 8 
      ADDR = AND(MODTABL(1,K),LDADMSK)
C 
C        DETERMINE THE PROPER APPLICATION.
C 
      DO 2 L=1,APPLCTR
      IF (MOD(FLAGS,2) .NE. 0) GO TO 3
   2  FLAGS = FLAGS/2 
      GO TO 8 
C 
C        TEST THE ADDRESS TO DETERMINE ASSIGNMENT AREA. 
C 
   3  IF (ADDR .LT. PGAREAB) GO TO 7
      IF (ADDR .LT. PGAREAE) GO TO 6
      IF (ADDR .LT. 65536)   GO TO 7
C 
C        APPLICATION PAGED LENGTHS. 
C 
   6  APPLPGD(L) = APPLPGD(L) + MODTABL(2,K)
      GO TO 8 
C 
C        APPLICATION MAIN LENTHS. 
C 
   7  APPLMN(L) = APPLMN(L) + MODTABL(2,K)
   8  CONTINUE
C 
C        PRINT THE PAGED AND MAIN MEMORY LENGTH OF EACH 
C        DEFINED APPLICATION. 
C 
      WRITE (LIST,5)
   5  FORMAT (*1*,/////,31X,*PAGED LENGTH*,9X,*MAIN LENGTH*,
     1        /,14X,* APPLICATION*/19X,*NAME*,9X,*DEC*,5X,*HEX*,
     2        10X,*DEC*,5X,*HEX*/)
      TEST = DEFMASK
      DO 15 I=1,APPLCTR 
      IF (MOD(TEST,2).EQ.0) GO TO 15
      WRITE (LIST,10) APPLNAM(I),APPLPGD(I),APPLPGD(I), 
     1                APPLMN(I),APPLMN(I) 
  10  FORMAT (18X,A6,6X,I6,3X,*$*,Z4,7X,I6,3X,*$*,Z4) 
   15 TEST = TEST / 2 
C 
C        WRITE THE BUFFER SIZE FOR THIS BUILD.
C 
      WRITE (5,700) GAP, GAP, GAP1, GAP1
  700 FORMAT (1X,/////////,15X,50(1H*),//,15X,
     X  "FOR TEST PURPOSES THE BUFFER AREA OF THIS BUILD IS",/, 
     X  19X,"DECIMAL = ",I5,8X,"HEXIDECIMAL = $",Z4,//,15X, 
     X   "THE USER BUFFER AREA FOR THIS BUILD IS",/,
     X  19X,"DECIMAL = ",I5,8X,"HEXIDECIMAL = $",Z4,
     X  //,15X,50(1H*),///) 
C 
C        BRANCH IF NOT REPORTING ON MODULE ADDRESSES. 
C 
  100 IF (.NOT.MAPRPT) GO TO 200
      CALL SORTARY(SRTDADR,MODCNTR,4) 
      CALL SORTARY(SRTDMOD,MODCNTR,1) 
C 
C        PRINT THE REPORT TWICE - ONCE SORTED ON ADDRESS, THE 
C        SECOND SORTED ON MODULE NAME.
C 
      DO 140 J=1,2
      WRITE (LIST,101) RPTTYPE(J) 
  101 FORMAT(*1*,1X,///,45X,*MODULE MEMORY MAP - SORTED BY MODULE *,
     X        A10///4(2X,*MODULE*,4X,*ADDRESS*,6X,*OVLY*,4X)/)
C 
C        L IS THE COUNT OF MODULES PLACED ON THIS PRINT LINE. 
C        K IS THE TOTAL COUNT OF MODULES INSPECTED. 
C 
      K = 0 
  105 L = 1 
  110 K = K + 1 
      IF (K.GT.MODCNTR) GO TO 135 
C 
C        POINT TO THE NEXT MODULE IN SEQUENCE.
C 
      I = SRTDADR(K)
      IF (J.EQ.2) I = SRTDMOD(K)
C 
C        GET THE ADDRESS, AND IGNORE IT IF IT IS NOT LOADED.
C 
      ADDR = ADDRS(L) = AND(MODTABL(1,I),LDADMSK) 
      IF (ZERONAM .EQ. MODTABL(1,I)) GO TO 111
      IF (ADDR.EQ.0) GO TO 110
  111 COL(L) = PAGED(L) = OVLY(L) = BLANKS
C 
C        IF THIS MODULE RESIDES ON A PAGE, FIND WHICH PAGE IT IS
C        ON, AND USE THIS TO COMPUTE THE ADDRESS IN MAIN MEMORY 
C        WHERE THIS MODULE IS TO BE MAPPED. 
C 
      IF (ADDR.LT.200000B) GO TO 114
      DO 112 M=1,HIPAGE 
      IF (FRSTPGA(M).GT.ADDR) GO TO 113 
  112 CONTINUE
  113 ADDR = ADDR - FRSTPGA(M-1) + PGAREAB
      CALL HEXCNVT(ADDR,PAGED(L),4) 
      COL(L) = COLON
C 
C        IF THIS IS ASSOCIATED WITH AN OVERLAY, FIND THE OVERLAY
C        AND SET A COLUMN IN THE LINE TO INDICATE THE OVERLAY 
C        SEQUENCE NUMBER. 
C 
  114 OVNAME = AND(MODTABL(5,I),OVNMASK)
      IF (OVNAME.EQ.0) GO TO 125
      DO 115 M=1,OVLYCTR
      IF (OVNAME.EQ.AND(OVLYTBL(M),OVNMASK)) GO TO 120
  115 CONTINUE
  120 OVLY(L) = AA - 1 + M
C 
C        PUT THE NAME IN THE PRINT LINE, THEN SEE IF THE LINE 
C        IS FULL.  IF NOT, LOOP BACK TO GET MORE. 
C 
  125 NAMES(L) = MODTABL(1,I) 
      L = L + 1 
      IF (L.LE.4) GO TO 110 
C 
C        PRINT THE FULL LINE, THEN GO BACK FOR MORE.
C 
      WRITE (LIST,130) (NAMES(I),ADDRS(I),COL(I),PAGED(I),
     1                  OVLY(I),I=1,4)
  130 FORMAT (4(2X,A6,4X,Z5,R1,A4,4X,R2,5X))
      GO TO 105 
C 
C        WHEN ALL MODULES ARE DONE, PRINT THE FINAL LINE. 
C 
  135 L = L - 1 
      IF (L.EQ.0) GO TO 200 
      WRITE (LIST,130) (NAMES(I),ADDRS(I),COL(I),PAGED(I),
     1                  OVLY(I),I=1,L)
  140 CONTINUE
C 
C        BRANCH IF NO BUFFER SPACE REPORT IS TO BE PRODUCED.
C 
  200 IF (.NOT.BUFRPT) GO TO 300
C 
C        KILL REPORT IF NO VARIABLE APPLICATIONS
C 
      IF (RNAMECT .NE. 1) GO TO 210 
      WRITE (LIST,205)
  205 FORMAT(///* BUFFER SPACE REPORT SUPPRESSED*/
     1       * NO NON-BASE APPLICATIONS SUPPLIED*)
      GO TO 300 
C 
C        KILL THE REPORT IF NO BASE APPLICATIONS
C 
  210 IF(RPTNAME(1,1) .NE. 0) GO TO 220 
      WRITE(LIST,215) 
  215 FORMAT (///* BUFFER SPACE REPORT SUPPRESSED*/ 
     1        * NO BASE APPLICATIONS SUPPLIED*) 
      GO TO 300 
C 
C        PRINT REPORT HEADER
C 
  220 WRITE(LIST,225) 
  225 FORMAT(*1*////50X,* BUFFER SPACE REPORT*/// 
     1       5X,*REPORT*,6X,*APPLICATIONS*/ 
     2       5X,*HEADER*/ 
     3       5X,*------*,6X,*------------*) 
      DO 250 I=1,RNAMECT
      DAPPLCT = 1 
      INDEXER = RPTNAME(2,I)
  230 DEFAPPL(DAPPLCT) = RPTAPPL(1,INDEXER) 
      IF(RPTAPPL(2,INDEXER) .EQ. 0) GO TO 240 
      INDEXER = RPTAPPL(2,INDEXER)
      DAPPLCT = DAPPLCT + 1 
      GO TO 230 
  240 WRITE(LIST,245) RPTNAME(1,I),(DEFAPPL(J),J=1,DAPPLCT) 
  245 FORMAT(5X,A6,6X,10(A6,4X),/,
     1       (17X,10(A6,4X),/)) 
  250 CONTINUE
C        LENGTH = NUMBER OF COLUMNS ON PAGE 
      LENGTH = (RNAMECT - 1)*7 + BUFSPCT*8 + 2
C        MAXCNT IS A BIT MAP USED TO VARY THE APPLICATIONS
      MAXCNT = 2 ** (RNAMECT-1) 
      LINECNT = 56
      FIRST = 0 
C 
C        START THE MAIN LOOP TO VARY APPLICATIONS 
C 
  260 MAXCNT = MAXCNT - 1 
      IF (MAXCNT .EQ. 0) GO TO 1040 
C        START WITH THE FIRST BUFFER SPACE CORE SIZE, AND LOOP
C        WITH THE CURRENT DEFINED APPLICATIONS UNTIL ALL CORE 
C        SIZES EXHAUSTED. 
C 
      BUFCNT = 0
  265 BUFCNT = BUFCNT + 1 
      IF (BUFCNT.GT.BUFSPCT) GO TO 280
C 
C        INITIALIZE THE COMMON BLOCK
C 
      REWIND 9
      COML = LOCF(COMEND) - LOCF(COMBEG(1)) 
      BUFFER IN(9,1)(COMBEG(1),COMBEG(COML))
      IF(UNIT(9)) 273,270,270 
  270 WRITE(LIST,271) 
  271 FORMAT(///*   BUFFER SPACE REPORT SUPPRESSED*/
     1     *  ERRORS ON TAPE9*) 
      GO TO 300 
  273 CONTINUE
      RPTGEN = .TRUE. 
      MEMOVER = .FALSE. 
      ERROR = .FALSE. 
      WARNING = .FALSE. 
      CORESIZ = BUFSP(BUFCNT) * 1024
C 
C        FILL DEFAPPL WITH THE APPROPRIATE SET
C        OF APPL NAMES
C 
C        MOVE THE BASE APPLS FIRST
      INDEXER = RPTNAME(2,1)
      DAPPLCT = 1 
  261 DEFAPPL(DAPPLCT) = RPTAPPL(1,INDEXER) 
      IF(RPTAPPL(2,INDEXER) .EQ. 0) GO TO 264 
      INDEXER = RPTAPPL(2,INDEXER)
      DAPPLCT = DAPPLCT + 1 
      GO TO 261 
C 
C        MOVE THE REST ACCORDING TO MAXCNT
C 
  264 DO 263 I=2,RNAMECT
      IF(AND(MAXCNT,SHIFT(1,I-2)) .EQ. 0) GO TO 263 
      INDEXER = RPTNAME(2,I)
  262 DAPPLCT = DAPPLCT + 1 
      DEFAPPL(DAPPLCT) = RPTAPPL(1,INDEXER) 
      IF(RPTAPPL(2,INDEXER) .EQ. 0) GO TO 263 
      INDEXER = RPTAPPL(2,INDEXER)
      GO TO 262 
  263 CONTINUE
C 
C        DO THE BUILD WITH THESE PARAMETERS.
C 
      CALL OVERLAY(6HALKOVL,3,0)
      IF (ERROR) GO TO 1273 
      CALL OVERLAY(6HALKOVL,4,0)
      IF (ERROR) GO TO 1273 
      CALL OVERLAY(6HALKOVL,5,0)
      IF (ERROR) GO TO 1273 
      IF(MEMOVER) GO TO 1274
C 
C        COMPUTE BUFFER SPACE AS THE ROOM BETWEEN PIDTABL AND 
C        PIBUF2, IF THEY ARE IN THIS LOAD.
C 
      CTARRAY(BUFCNT) = GAP1
      ENCODE (6,2273,LITERAL) CTARRAY(BUFCNT) 
 2273 FORMAT (I6) 
      CTARRAY(BUFCNT) = LITERAL 
      GO TO 265 
C 
C 
C        TERMINATE THE REPORT WHEN ERRORS 
C 
 1273 WRITE (LIST,3273) 
 3273 FORMAT(///*   BUFFER SPACE REPORT TERMINATED*/
     1       *   FATAL ERRORS ENCOUNTERED*) 
      GO TO 300 
C 
C        INSUFFICIENT BUFFER SPACE AREA.
C 
 1274 CTARRAY(BUFCNT) = 5H  --- 
      GO TO 265 
C 
C 
C        WHEN THIS LINE IS DONE, PRINT IT WITH AN X INDICATING
C        EACH APPLICATION THAT WAS INCLUDED.
C 
  280 TEST = MAXCNT 
      NONBASE = RNAMECT - 1 
      DO 285 I=1,NONBASE
      PTRARAY(I) = BLANK
      IF (MOD(TEST,2).EQ.1) PTRARAY(I) = X
  285 TEST = TEST / 2 
      IF(LINECNT .NE.56) GO TO 1020 
      IF (FIRST .EQ. 0) GO TO 980 
C 
C        FINISH THE BOX 
C 
      WRITE(LIST,1045)LENGTH
      WRITE(LIST,1050)
C 
C        TOP OF PAGE PRINT HEADER 
C 
  980 WRITE(LIST,994) 
  994 FORMAT(*1*//15X,*BUFFER SPACE REPORT*/) 
      WRITE(LIST,1000) LENGTH 
 1000 FORMAT(1X,=(1H*)) 
      WRITE(LIST,1005) NONBASE,BUFSPCT
 1005 FORMAT(1X,=(1H*,6X),1H*,=(1H*,7X),1H*)
      WRITE(LIST,1010) NONBASE,(RPTNAME(1,I),I=2,RNAMECT),
     1                 BUFSPCT,(BUFSP(I),I=1,BUFSPCT) 
 1010 FORMAT(1X,=(1H*,A6),1H*,=(1H*,I5,2X),1H*) 
      WRITE(LIST,1005)NONBASE,BUFSPCT 
      WRITE(LIST,1011) LENGTH 
1011  FORMAT(1X,=(1H*)) 
      LINECNT = 9 
      FIRST = 1 
C 
C        PRINT THE LINE 
C 
 1020 LINECNT = LINECNT + 1 
      WRITE (LIST,290) NONBASE,(PTRARAY(I),I=1,NONBASE),BUFSPCT,
     1                 (CTARRAY(I),I=1,BUFSPCT) 
  290 FORMAT (1X,=(1H*,2X,R1,3X),1H*,=(1H*,A6,1X),1H*)
      GO TO 260 
C 
C        FINISH THE BOX WHEN DONE 
C 
 1040 WRITE(LIST,1045) LENGTH 
 1045 FORMAT(1X,=(1H*)) 
      WRITE(LIST,1050)
 1050 FORMAT(//,4X,"---  INDICATES NOT ENOUGH MEMORY FOR THIS VARIANT") 
  300 RETURN
      END 
C 
C 
