*COMDECK ALMAIN 
      OVERLAY(ALKOVL,0,0) 
      PROGRAM AUTOLNK(TAPE1,TAPE2=0,TAPE3=0,TAPE4,TAPE5,TAPE6,
     1              TAPE7=200,OUTPUT,TAPE9=0) 
C 
C 
C 
C 
C     THIS PROGRAM IS THE SUPERVISOR FOR AUTO-LINK.  IT READS 
C     THE INVOKING CONTROL CARD TO INSURE CORRECT FILE NAMES, 
C     INITIALIZES COMMON, THEN CALLS EACH PHASE PROCESSOR IN
C     SEQUENCE TO PERFORM THE AUTO LOAD.
C 
C 
*CALL ALDEFFS 
*CALL ALCOMMON
C 
         DIMENSION CPYRITE(6) 
         DATA CPYRITE /"COPYRIGHT ","CONTROL DA","TA CORP.  ",
     1   "1978, 1979"," 1980, 198","1, 1982"/ 
C 
      DATA MODULE,MAXCORE / 0 , 128 / 
C 
C     INDICATE NO OUTPUT DIRECTIVES, NO LIST FILE, AND NO 
C     SECONDARY OBJECT FILE.
C 
      OUTDIRD=.FALSE. 
      NOBIN2=.TRUE. 
      NOLIST=.TRUE. 
C 
C     GET A COPY OF THE JOB COMMUNICATIONS AREA.
C 
      CALL GETJCA 
C 
C     MAKE SURE THE DIRECTIVES INPUT FILE IS PRESENT. 
C 
      CHAR=AND(SHIFT(JCA(3),6),77B) 
C 
C     ERROR IF NOT
C 
      IF (CHAR.LT.A .OR. CHAR.GT.Z) GO TO 905 
C 
C     CHECK THE TERMINATOR, REPORT ERROR IF NOT COMMA.
C 
      TERM=AND(JCA(3),17B)
      IF (TERM.NE.1) GO TO 910
C 
C     VALIDATE THE OTHER FILES THE SAME WAY, BUT BRANCH TO THE
C     INITIALIZATION CODE WHEN A TERMINATOR IS FOUND. 
C 
      CHAR=AND(SHIFT(JCA(4),6),77B) 
      IF (CHAR.LT.A .OR. CHAR.GT.Z) GO TO 910 
      TERM=AND(JCA(4),17B)
      IF (TERM.EQ.17B) GO TO 100
      CHAR=AND(SHIFT(JCA(5),6),77B) 
      IF (CHAR.EQ.ZERO .OR. CHAR.EQ.0) GO TO 10 
      IF (CHAR.LT.A .OR. CHAR.GT.Z) GO TO 920 
      NOBIN2=.FALSE.
   10 TERM=AND(JCA(5),17B)
      IF(TERM.EQ.17B) GO TO 100 
      CHAR=AND(SHIFT(JCA(6),6),77B) 
      IF (CHAR.EQ.ZERO .OR. CHAR.EQ.0) GO TO 20 
      IF (CHAR.LT.A .OR. CHAR.GT.Z) GO TO 930 
      OUTDIRD=.TRUE.
   20 TERM=AND(JCA(6),17B)
      IF (TERM.EQ.17B) GO TO 100
      CHAR=AND(SHIFT(JCA(7),6),77B) 
      IF (CHAR.EQ.ZERO .OR. CHAR.EQ.0) GO TO 100
      IF (CHAR.LT.A .OR. CHAR.GT.Z) GO TO 940 
      NOLIST=.FALSE.
      ERRFIL = LIST 
C 
C 
C     NOW INITIALIZE THE VARIABLES IN COMMON
C 
  100 CARD2(91)=BLANK 
      ERROR=.FALSE. 
      DO 110 I=1,600
      DO 110 J=1,5
  110 MODTABL(J,I)=MODEFLT(J) 
      MODCNTR=0 
      GOTMOD=.FALSE.
      APPLCTR=0 
      BUFSPCT=0 
      CCP=.FALSE. 
      CORESIZ=128 
      CRSZDIR=.FALSE. 
      DAPPLCT=0 
      PGREGD=.FALSE.
      PGSZCNT=1 
      DO 120 I=1,32 
  120 PAGSIZS(I)=8192 
      RSRVCTR=0 
      DO 130 I=1,4
  130 REPORTS(I)=.FALSE.
      DO 140 I=1,1024 
  140 MODADDR(I)=BLANKS 
      ADDRCTR=0 
      OVLYBGN=0 
      OVLYEND=0 
      WARNING=.FALSE. 
      ZEROFLG = .FALSE. 
      ZERONAM = 0 
C 
C 
C     READ IN THE INPUT DIRECTIVES: PROGRAM RDDIRS
C 
      DIRREAD = .TRUE.
      CALL OVERLAY(6HALKOVL,1,0)
      DIRREAD = .FALSE. 
C 
C     READ THE OBJECT TEXT FILE(S): PROGRAM RDOBJCT 
C 
      CALL OVERLAY(6HALKOVL,2,0)
C 
C     TERMINATE WHENEVER AN ERROR OCCURS
C 
      IF (ERROR) GO TO 900
C 
C     LOAD ABSOLUTE MODULES AND PAGED MEMORY: PROGRAM LDPH1 
C 
      CALL OVERLAY(6HALKOVL,3,0)
      IF (ERROR) GO TO 900
C 
C     DELETE TOPHATS NOT REQUIRED: PROGRAM DLETOPH
C 
      CALL OVERLAY(6HALKOVL,4,0)
      IF (ERROR) GO TO 900
C 
C     LOAD MAIN MEMORY: PROGRAM LODMAIN 
C 
      CALL OVERLAY(6HALKOVL,5,0)
      IF (ERROR) GO TO 900
C 
C     GENERATE OUTPUT DIRECTIVES: PROGRAM OUTDIRS 
C 
      CALL OVERLAY(6HALKOVL,6,0)
      IF (ERROR) GO TO 900
C 
C     GENERATE THE OUTPUT REPORTS 
C 
      CALL OUTRPTS
      IF (ERROR) GO TO 900
C 
C     PRINT THE COMPLETION MESSAGE
C 
  150 WRITE (ERRFIL,160)
  160 FORMAT(//*  AUTOLINK COMPLETED*)
      GO TO 950 
  900 WRITE (ERRFIL,901)
  901 FORMAT (//* EXECUTION TERMINATED DUE TO ERRORS*)
C 
C        FILE 7 REMAINS BLANK UNLESS THE LINKGEN IS UNSUCCESSFUL. 
C 
      DO 902 LINK=1,10
 902  WRITE (7,903) 
 903  FORMAT (5X,10(1H+)," FATAL ERRORS ",10(1H+))
      CALL SORTARY(SRTDADR,MODCNTR,4) 
      WRITE (5,8010)
 8010 FORMAT (1X,////,32X,"MODULES SORTED BY ADDRESS",///)
      DO 8050 I=1,MODCNTR 
      NAME = AND(MODTABL(1,SRTDADR(I)),MODNAME) 
      ADDRESS = AND(MODTABL(1,SRTDADR(I)),LDADMSK)
      ENDLOC = ADDRESS + MODTABL(2,SRTDADR(I)) - 1
      WRITE (5,8040) I,NAME,ADDRESS,ENDLOC,SRTDADR(I) 
 8040 FORMAT(4X,I4,4X,"MODULE = ",A6,4X,"ADDRESS = ",I6,
     X     4X,"END = ",I6,4X,"INDEX = ",I3,5X,/)
 8050 CONTINUE
      CALL REMARK(" AUTOLINK TERMINATED DUE TO ERRORS") 
      GO TO 150 
C 
C 
C 
C        ERROR BRANCHES 
C 
C        INVALID OR MISSING INPUT DIRECTIVES FILE 
C 
  905 CALL ERRMSG (MODULE,38) 
      GO TO 900 
C 
C 
C        INVALID OR MISSING LGO FILE
C 
  910 CALL ERRMSG(MODULE,39)
      GO TO 900 
C 
C 
C        INVALID SECONDARY BINARY FILE
C 
  920 CALL ERRMSG(MODULE,40)
      GO TO 900 
C 
C 
C        INVALID OUTPUT DIRECTIVES FILE 
C 
  930 CALL ERRMSG(MODULE,41)
      GO TO 900 
C 
C 
C        INVALID LIST FILE
C 
  940 CALL ERRMSG(MODULE,42)
      GO TO 900 
C 
C        FALL THROUGH TO THE SYSTEM.
C 
  950 CONTINUE
      END 
C 
C 
*CALL ALBLKDATA 
*CALL ALERRMSG
*CALL ALSORTARY 
*CALL ALFINDADR 
*CALL ALFINDMOD 
*CALL ALGETJCA
*CALL ALALFANUM 
*CALL ALOUTRPTS 
*CALL ALHEXCNVT 
