SUBROUTINE MAIN LOGICAL*1 SOURCE(40), OBJECT(40), ARG(40), EXT(4), LISTFL(40), LDA *RGS(256), DESCR(7), SPATH(120) INTEGER I, GETARG, SSPAWN, K, FORTRN, LOCCOM, INDEX COMMON /FLIST/ FLEVEL, FFILES(40, 25) INTEGER FLEVEL LOGICAL*1 FFILES COMMON / CFC / LOAD, VERBOS, LIST, ERRCNT, DEBUG INTEGER LOAD INTEGER VERBOS INTEGER LIST INTEGER ERRCNT INTEGER DEBUG LOGICAL*1 SUFFIX(7) LOGICAL*1 MINUSV(4) LOGICAL*1 MINUSD(4) LOGICAL*1 EXTO(4) LOGICAL*1 EXTL(2) LOGICAL*1 LD(3) DATA SUFFIX(1)/46/,SUFFIX(2)/116/,SUFFIX(3)/115/,SUFFIX(4)/107/,SU *FFIX(5)/0/,SUFFIX(6)/10/,SUFFIX(7)/0/ DATA MINUSV(1)/45/,MINUSV(2)/118/,MINUSV(3)/32/,MINUSV(4)/0/ DATA MINUSD(1)/45/,MINUSD(2)/100/,MINUSD(3)/32/,MINUSD(4)/0/ DATA EXTO(1)/111/,EXTO(2)/98/,EXTO(3)/106/,EXTO(4)/0/ DATA EXTL(1)/108/,EXTL(2)/0/ DATA LD(1)/108/,LD(2)/100/,LD(3)/0/ FLEVEL = 0 LOAD = 1 VERBOS = 0 LIST = 0 DEBUG = 0 ERRCNT = 0 CALL QUERY(47Husage: fc [-cdov] [-l[libr]] [-pproc] file ...) I=1 23000 IF (.NOT.(GETARG(I, ARG, 40) .NE. -1))GOTO 23002 IF (.NOT.(ARG(1) .EQ. 45 .OR. ARG(1) .EQ. 43))GOTO 23003 CALL FCCMD(ARG) GOTO 23004 23003 CONTINUE CALL FSTACK(ARG) 23004 CONTINUE 23001 I=I+1 GOTO 23000 23002 CONTINUE K=1 23005 IF (.NOT.(K.LE.FLEVEL))GOTO 23007 CALL GETEXT(FFILES(1,K), EXT) IF (.NOT.(FFILES(1,K) .NE. 45 .AND. EXT(1) .EQ. 102 .AND. EXT(2) . *EQ. 0))GOTO 23008 IF (.NOT.(INDEX(FFILES(1,K), 47) .GT. 0))GOTO 23010 CALL FXLATE(FFILES(1,K),6, SOURCE) GOTO 23011 23010 CONTINUE CALL SCOPY(FFILES(1,K), 1, SOURCE, 1) 23011 CONTINUE CALL GENFIL(SOURCE, EXTO, OBJECT) IF (.NOT.(LIST .EQ. 1))GOTO 23012 CALL GENFIL(SOURCE, EXTL, LISTFL) GOTO 23013 23012 CONTINUE LISTFL(1) = 0 23013 CONTINUE IF (.NOT.(FORTRN(SOURCE, OBJECT, LISTFL, VERBOS, DEBUG) .EQ. -3))G *OTO 23014 ERRCNT = ERRCNT + 1 23014 CONTINUE 23008 CONTINUE 23006 K=K+1 GOTO 23005 23007 CONTINUE IF (.NOT.(LOAD .EQ. 1 .AND. ERRCNT .EQ. 0))GOTO 23016 I = 1 CALL STCOPY(LD, 1, LDARGS, I) CALL CHCOPY(32, LDARGS, I) IF (.NOT.(VERBOS .EQ. 1))GOTO 23018 CALL STCOPY(MINUSV, 1, LDARGS, I) 23018 CONTINUE IF (.NOT.(DEBUG .EQ. 1))GOTO 23020 CALL STCOPY(MINUSD, 1, LDARGS, I) 23020 CONTINUE K=1 23022 IF (.NOT.(K.LE.FLEVEL))GOTO 23024 CALL GETEXT(FFILES(1,K), EXT) IF (.NOT.(FFILES(1,K) .NE. 45 .AND. EXT(1) .EQ. 102 .AND. EXT(2) . *EQ. 0))GOTO 23025 CALL GENFIL(FFILES(1,K), EXTO, ARG) GOTO 23026 23025 CONTINUE CALL SCOPY(FFILES(1,K), 1, ARG, 1) 23026 CONTINUE CALL STCOPY(ARG, 1, LDARGS, I) CALL CHCOPY(32, LDARGS, I) 23023 K=K+1 GOTO 23022 23024 CONTINUE LDARGS(I-1) = 0 CALL IMPATH(SPATH) IF (.NOT.(LOCCOM(LD, SPATH, SUFFIX, ARG) .NE. 60))GOTO 23027 CALL ERROR(28HCannot locate ld image file.) 23027 CONTINUE IF (.NOT.(VERBOS .EQ. 1))GOTO 23029 CALL REMARK(LDARGS) 23029 CONTINUE IF (.NOT.(SSPAWN(ARG, LDARGS, DESCR, 119) .EQ. -3))GOTO 23031 CALL REMARK(24HError in linking process) 23031 CONTINUE 23016 CONTINUE RETURN END SUBROUTINE FCCMD(ARG) LOGICAL*1 ARG(40) INTEGER INDEX COMMON / CFC / LOAD, VERBOS, LIST, ERRCNT, DEBUG INTEGER LOAD INTEGER VERBOS INTEGER LIST INTEGER ERRCNT INTEGER DEBUG CALL FOLD(ARG) IF (.NOT.(ARG(1) .EQ. 45))GOTO 23033 IF (.NOT.(ARG(2) .EQ. 112 .OR. ARG(2) .EQ. 108))GOTO 23035 CALL FSTACK(ARG) GOTO 23036 23035 CONTINUE IF (.NOT.(INDEX(ARG, 99) .GT. 0))GOTO 23037 LOAD = 0 23037 CONTINUE IF (.NOT.(INDEX(ARG, 100) .GT. 0))GOTO 23039 DEBUG = 1 23039 CONTINUE IF (.NOT.(INDEX(ARG, 111) .GT. 0))GOTO 23041 LIST = 1 23041 CONTINUE IF (.NOT.(INDEX(ARG, 118) .GT. 0))GOTO 23043 VERBOS = 1 23043 CONTINUE 23036 CONTINUE GOTO 23034 23033 CONTINUE CALL BADARG(ARG) 23034 CONTINUE IF (.NOT.(DEBUG .EQ. 1))GOTO 23045 LIST = 1 23045 CONTINUE RETURN END INTEGER FUNCTION FORTRN(SOURCE, OBJECT, LIST, VERBOS, DEBUG) LOGICAL*1 SOURCE(100), OBJECT(100), LIST(100), ARG(80), PID(7) INTEGER SSPAWN, I, VERBOS, DEBUG LOGICAL*1 SRCSW(16) DATA SRCSW(1)/47/,SRCSW(2)/110/,SRCSW(3)/111/,SRCSW(4)/115/,SRCSW( *5)/110/,SRCSW(6)/47/,SRCSW(7)/110/,SRCSW(8)/111/,SRCSW(9)/118/,SRC *SW(10)/97/,SRCSW(11)/47/,SRCSW(12)/110/,SRCSW(13)/111/,SRCSW(14)/1 *08/,SRCSW(15)/111/,SRCSW(16)/0/ I = 1 CALL STCOPY(3HFOR, 1, ARG, I) CALL CHCOPY(32, ARG, I) CALL REMOVE(OBJECT) CALL STCOPY(OBJECT, 1, ARG, I) IF (.NOT.(LIST(1) .NE. 0))GOTO 23047 CALL CHCOPY(44, ARG, I) CALL REMOVE(LIST) CALL STCOPY(LIST, 1, ARG, I) CALL STCOPY(4H/-sp, 1, ARG, I) 23047 CONTINUE CALL CHCOPY(61, ARG, I) CALL STCOPY(SOURCE, 1, ARG, I) CALL SCOPY(SRCSW, 1, ARG, I) CALL FOLD(ARG) IF (.NOT.(VERBOS .EQ. 1))GOTO 23049 CALL REMARK(ARG) 23049 CONTINUE FORTRN = SSPAWN(5Hlocal, ARG, PID, 119) RETURN END SUBROUTINE FSTACK (IARG) INTEGER I LOGICAL*1 IARG(40) COMMON /FLIST/ FLEVEL, FFILES(40, 25) INTEGER FLEVEL LOGICAL*1 FFILES IF (.NOT.(FLEVEL .LT. 25))GOTO 23051 FLEVEL = FLEVEL + 1 I=1 23053 IF (.NOT.(I.LE.40))GOTO 23055 FFILES(I,FLEVEL) = IARG(I) 23054 I=I+1 GOTO 23053 23055 CONTINUE CALL FOLD(FFILES(1, FLEVEL)) 23051 CONTINUE RETURN END SUBROUTINE GENFIL(IN, EXT, OUT) INTEGER I, J INTEGER LENGTH LOGICAL*1 IN(40), EXT(4), OUT(40) LOGICAL*1 TRMCHR(3) DATA TRMCHR(1)/47/,TRMCHR(2)/93/,TRMCHR(3)/0/ I=LENGTH(IN) 23056 IF (.NOT.(I .GT. 0))GOTO 23058 IF (.NOT.(INDEX(TRMCHR, IN(I)) .GT. 0))GOTO 23059 GOTO 23058 23059 CONTINUE 23057 I=I-1 GOTO 23056 23058 CONTINUE J=I+1 23061 IF (.NOT.(IN(J) .NE. 0))GOTO 23063 IF (.NOT.(IN(J) .EQ. 46))GOTO 23064 GOTO 23063 23064 CONTINUE 23062 J=J+1 GOTO 23061 23063 CONTINUE I=1 23066 IF (.NOT.(I .LT. J))GOTO 23068 OUT(I) = IN(I) 23067 I=I+1 GOTO 23066 23068 CONTINUE CALL CHCOPY(46, OUT, I) CALL SCOPY(EXT, 1, OUT, I) RETURN END SUBROUTINE GETEXT(FILE, EXT) LOGICAL*1 FILE(40), EXT(4) INTEGER I, J INTEGER LENGTH, INDEX LOGICAL*1 TRMCHR(3) DATA TRMCHR(1)/47/,TRMCHR(2)/93/,TRMCHR(3)/0/ I=LENGTH(FILE) 23069 IF (.NOT.(I .GT. 0))GOTO 23071 IF (.NOT.(INDEX(TRMCHR, FILE(I)) .GT. 0))GOTO 23072 GOTO 23071 23072 CONTINUE 23070 I=I-1 GOTO 23069 23071 CONTINUE J=I+1 23074 IF (.NOT.(FILE(J) .NE. 0))GOTO 23076 IF (.NOT.(FILE(J) .EQ. 46))GOTO 23077 J = J + 1 GOTO 23076 23077 CONTINUE 23075 J=J+1 GOTO 23074 23076 CONTINUE I=1 23079 IF (.NOT.(FILE(J) .NE. 0 .AND. FILE(J) .NE. 59 .AND. FILE(J) .NE. *46))GOTO 23081 EXT(I) = FILE(J) J = J + 1 23080 I=I+1 GOTO 23079 23081 CONTINUE EXT(I) = 0 CALL FOLD(EXT) RETURN END