*COMDECK ALRDOBJCT
      OVERLAY(2,0)
      PROGRAM RDOBJCT 
C 
C 
C        THIS ROUTINE READS THE OBJECT TEXT FILES, AND PLACES THE 
C        LENGTH OF EACH MODULE IN THE PROPER MODTABL ENTRY. 
C 
C 
*CALL ALCOMMON
      LOGICAL IERR
      DATA MODULE /3/ 
C 
C 
C 
C 
C        SET THE HEADER SWITCHES FOR ERROR LISTS. 
C 
      APPSWTC = 1 
      MODSWTC = 1 
C 
C        SORT THE MODTABL ARRAY APLHABETICALLY, AND INITIALIZE THE
C        SEQUENCE NUMBER OF THE MODULES ON THE FILE.
C 
      CALL SORTARY(SRTDMOD,MODCNTR,1) 
      BINSEQ = 1
C 
C        LOAD THE FIRST FILE, AND THE SECOND ONE IF PROVIDED. 
C 
      CALL LDFILE(BINARY1)
      IF (NOBIN2) GO TO 5 
      BINSEQ = BINSEQ + 1 
      CALL LDFILE(BINARY2)
* 
*        BUILD UP A DEFINED APPLICATIONS BIT MAP
* 
5        CONTINUE 
         DEFMASK = 0
         DO 8 I = 1,APPLCTR 
         J = APPLCTR+1-I
         DEFMASK = DEFMASK*2
         DO 6 K = 1,DAPPLCT 
         IF ((APPLNAM(J).AND.ANAMASK) .EQ. (DEFAPPL(K).AND.ANAMASK))
     1   GO TO 7
6        CONTINUE 
* 
         GO TO 8
* 
7        CONTINUE 
         DEFMASK = DEFMASK.OR.1 
8        CONTINUE 
C 
C        SET UP A VALUE, APDEFWD, WHICH CONTAINS A BIT FOR EACH 
C        APPLICATION, WITH THAT BIT SET IF AT LEAST ONE MODULE
C        IS DEFINED FOR THAT APPLICATION. 
C 
         APDEFWD = 0
      DO 10 I=1,MODCNTR 
      VALUE = MODTABL(3,I)
C 
C        IF THIS MODULE HAS NO RELATED APPLICATIONS, GO FLAG THE ERROR. 
C 
      IF (VALUE.EQ.0) GO TO 900 
         APDEFWD = APDEFWD.OR.VALUE 
10       CONTINUE 
C 
C        GET A MASK WHICH REPRESENTS A 1-BIT FOR ALL APPLICATIONS.
C 
      VALUE = SHIFT(MASK(APPLCTR),APPLCTR)
C 
C        THE BIT MAP WE BUILT MUST HAVE ALL ONES FOR ALL APPLICATIONS,
C        OR ELSE SOME APPLICATION HAS NO MODULES. 
C 
         MODAPPS = VALUE.AND.APDEFWD
         XTRAPPS = XOR (VALUE,MODAPPS)
         IF (XTRAPPS .NE. 0) GO TO 910
C 
C        CHECK FOR MODULES WITH NO OBJECT TEXT SUPPLIED, AND OUTPUT 
C        A WARNING MESSAGE IF FOUND.  RETURN IF ANY ERRORS OCCURRED.
C 
   11 SWITCH = 1
      DO 20 I=1,MODCNTR 
      IF (AND(MODTABL(5,I),BINOMSK).EQ.0) GO TO 920 
   20 CONTINUE
      IF (ERROR) RETURN 
C 
C        NOW GO THROUGH THE MODULES, AND IF THE USER GAVE AN ENDING 
C        ADDRESS FOR A MODULE TO BE REVERSE LOADED, CHANGE IT TO A
C        BEGINNING ADDRESS BY SUBTRACTING THE MODULE LENGTH.
C 
      DO 30 I=1,MODCNTR 
      IF (SHIFT(AND(MODTABL(5,I),PVALMSK),-PVALSHF).NE.REVERSE) GO TO 30
      ADDR = AND(MODTABL(1,I),LDADMSK)
      IF (ADDR.EQ.0) GO TO 30 
      ADDR = ADDR - MODTABL(2,I) + 1
      MODTABL(1,I) = OR(AND(MODTABL(1,I),MODNAME),ADDR) 
   30 CONTINUE
C 
C        IF BUFFER SPACE REPORT IS TO BE GENERATED
C        SAVE THE COMMON BLOCK FOR LATER INITIALIZATION 
C 
      IF(.NOT. BUFRPT) RETURN 
      COML = LOCF(COMEND) - LOCF(COMBEG(1)) 
      BUFFER OUT (9,1)(COMBEG(1),COMBEG(COML))
      IF (UNIT(9)) 35,35,35 
   35 RETURN
C 
C 
C 
C 
C        ERROR BRANCHES 
C 
C        NO APPLICATIONS DEFINED FOR A MODULE 
C 
  900 GO TO (901,902), MODSWTC
C 
C        WRITE AN INITIAL HEADER
C 
  901 MODSWTC = 2 
         WARNING = .TRUE. 
      CALL ERRMSG(MODULE,30)
C 
C        WRITE OUT EACH MODULE NAME WITH THIS ERROR.
C 
  902 WRITE (ERRFIL,903) MODTABL(1,I) 
  903 FORMAT (10X,A6) 
      GO TO 10
C 
C        APPLICATION DOES NOT HAVE CORRESPONDING MODULES. 
C 
910      CONTINUE 
* 
*        MAKE IT A WARNING IF NONE OF THE APPLICATIONS
*          WITH NO MODULES ARE DEFINED
* 
         WARNING = (XTRAPPS.AND.DEFMASK) .EQ. 0 
         CALL ERRMSG (MODULE,31)
* 
C        DETERMINE WHICH APPLICATIONS ARE BAD.
C 
      VALUE = AND(VALUE,APDEFWD)
      DO 912 I=1,APPLCTR
C 
C        BRANCH IF THIS IS O.K. 
C 
      IF (MOD(VALUE,2).EQ.1) GO TO 912
      WRITE (ERRFIL,903) APPLNAM(I) 
  912 VALUE = VALUE / 2 
      GO TO 11
C 
C        NO OBJECT TEXT EXISTED FOR A MODULE. 
C 
  920 GO TO (921,922),SWITCH
  921 SWITCH = 2
      WARNING = .TRUE.
      CALL ERRMSG(MODULE,52)
  922 WRITE (ERRFIL,903) MODTABL(1,I) 
      GO TO 20
      END 
C 
C 
*CALL ALLDFILE
*CALL ALGETWORD 
*CALL ALCHRCNVT 
*CALL ALASC2DSP 
