SUBROUTINE MAIN LOGICAL*1 ARG(40), TEMPL8(40), SCRAT(40), RLIB(40), ARGS(120), MAP *(40) INTEGER I, GETARG, INT, CREATE, STATUS, SSPAWN, RLIBDN, OPEN, INP, * LOCCOM INTEGER JUNK INTEGER REMOVE COMMON / CLD / VERBOS, DEBUG, TASK(40) INTEGER VERBOS INTEGER DEBUG LOGICAL*1 TASK COMMON /FLIST/ FLEVEL, FFILES(40, 25) INTEGER FLEVEL LOGICAL*1 FFILES LOGICAL*1 SUFFIX(3) LOGICAL*1 USESTR(46) LOGICAL*1 TKB(4) LOGICAL*1 EXT(4) LOGICAL*1 MAPEXT(4) LOGICAL*1 DEBSW(5) LOGICAL*1 LIB(4) LOGICAL*1 RLIBST(9) LOGICAL*1 MAINST(8) LOGICAL*1 INFILE(10) LOGICAL*1 AOUT(6) LOGICAL*1 IMGSW(7) DATA SUFFIX(1)/0/,SUFFIX(2)/10/,SUFFIX(3)/0/ DATA USESTR(1)/117/,USESTR(2)/115/,USESTR(3)/97/,USESTR(4)/103/,US *ESTR(5)/101/,USESTR(6)/58/,USESTR(7)/32/,USESTR(8)/32/,USESTR(9)/1 *08/,USESTR(10)/100/,USESTR(11)/32/,USESTR(12)/91/,USESTR(13)/45/,U *SESTR(14)/100/,USESTR(15)/118/,USESTR(16)/93/,USESTR(17)/32/,USEST *R(18)/91/,USESTR(19)/45/,USESTR(20)/108/,USESTR(21)/91/,USESTR(22) */108/,USESTR(23)/105/,USESTR(24)/98/,USESTR(25)/114/,USESTR(26)/93 */,USESTR(27)/93/,USESTR(28)/32/,USESTR(29)/91/,USESTR(30)/45/,USES *TR(31)/112/,USESTR(32)/112/,USESTR(33)/114/,USESTR(34)/111/,USESTR *(35)/99/,USESTR(36)/93/,USESTR(37)/32/,USESTR(38)/102/,USESTR(39)/ *105/,USESTR(40)/108/,USESTR(41)/101/,USESTR(42)/32/,USESTR(43)/46/ *,USESTR(44)/46/,USESTR(45)/46/,USESTR(46)/0/ DATA TKB(1)/116/,TKB(2)/107/,TKB(3)/98/,TKB(4)/0/ DATA EXT(1)/116/,EXT(2)/115/,EXT(3)/107/,EXT(4)/0/ DATA MAPEXT(1)/109/,MAPEXT(2)/97/,MAPEXT(3)/112/,MAPEXT(4)/0/ DATA DEBSW(1)/47/,DEBSW(2)/100/,DEBSW(3)/97/,DEBSW(4)/44/,DEBSW(5) */0/ DATA LIB(1)/47/,LIB(2)/108/,LIB(3)/98/,LIB(4)/0/ DATA RLIBST(1)/114/,RLIBST(2)/108/,RLIBST(3)/105/,RLIBST(4)/98/,RL *IBST(5)/46/,RLIBST(6)/111/,RLIBST(7)/108/,RLIBST(8)/98/,RLIBST(9)/ *0/ DATA MAINST(1)/58/,MAINST(2)/46/,MAINST(3)/109/,MAINST(4)/97/,MAIN *ST(5)/105/,MAINST(6)/110/,MAINST(7)/46/,MAINST(8)/0/ DATA INFILE(1)/116/,INFILE(2)/111/,INFILE(3)/111/,INFILE(4)/108/,I *NFILE(5)/115/,INFILE(6)/46/,INFILE(7)/116/,INFILE(8)/107/,INFILE(9 *)/98/,INFILE(10)/0/ DATA AOUT(1)/97/,AOUT(2)/46/,AOUT(3)/111/,AOUT(4)/117/,AOUT(5)/116 */,AOUT(6)/0/ DATA IMGSW(1)/47/,IMGSW(2)/102/,IMGSW(3)/112/,IMGSW(4)/47/,IMGSW(5 *)/99/,IMGSW(6)/112/,IMGSW(7)/0/ CALL QUERY(USESTR) FLEVEL = 0 TASK(1) = 0 VERBOS = 0 DEBUG = 0 RLIBDN = 0 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 LDCMD(ARG) GOTO 23004 23003 CONTINUE CALL FSTACK(ARG) 23004 CONTINUE 23001 I=I+1 GOTO 23000 23002 CONTINUE IF (.NOT.(TASK(1) .EQ. 0))GOTO 23005 I=1 23007 IF (.NOT.(I.LE.FLEVEL))GOTO 23009 IF (.NOT.(FFILES(1,I) .NE. 45))GOTO 23010 GOTO 23009 23010 CONTINUE 23008 I=I+1 GOTO 23007 23009 CONTINUE IF (.NOT.(I .LE. FLEVEL))GOTO 23012 CALL SCOPY(FFILES(1,I), 1, TASK, 1) 23012 CONTINUE 23005 CONTINUE CALL SCRATF(TKB, SCRAT) INT = CREATE(SCRAT, 2) IF (.NOT.(INT .EQ. -3))GOTO 23014 CALL ERROR(32HError creating TKB command file.) 23014 CONTINUE CALL IMPATH(ARGS) IF (.NOT.(LOCCOM(RLIBST, ARGS, SUFFIX, RLIB) .EQ. -3))GOTO 23016 CALL ERROR(22HCannot locate rlib.olb) 23016 CONTINUE CALL CONCAT(RLIB, LIB, RLIB) IF (.NOT.(LOCCOM(INFILE, ARGS, SUFFIX, TEMPL8) .EQ. -3))GOTO 23018 CALL ERROR(23HCannot locate tools.tkb) 23018 CONTINUE IF (.NOT.(TASK(1) .NE. 0))GOTO 23020 CALL GENFIL(TASK, EXT, ARG) GOTO 23021 23020 CONTINUE CALL SCOPY(AOUT, ARG) 23021 CONTINUE CALL GENFIL(TASK, MAPEXT, ARGS) CALL FXLATE(ARG,6, TASK) JUNK = REMOVE(TASK) CALL PUTLIN(TASK, INT) CALL PUTLIN(IMGSW, INT) IF (.NOT.(DEBUG .EQ. 1))GOTO 23022 CALL FXLATE(ARGS,6, MAP) JUNK = REMOVE(MAP) CALL PUTLIN(DEBSW, INT) CALL PUTLIN(MAP, INT) 23022 CONTINUE CALL PUTCH(61, INT) CALL PUTCH(10, INT) I=1 23024 IF (.NOT.(I.LE.FLEVEL))GOTO 23026 IF (.NOT.(FFILES(1,I) .EQ. 45))GOTO 23027 IF (.NOT.(FFILES(3,I) .EQ. 0))GOTO 23029 CALL PUTLIN(RLIB, INT) CALL PUTCH(10, INT) RLIBDN = 1 GOTO 23030 23029 CONTINUE CALL FXLATE(FFILES(3,I),6, ARG) CALL PUTLIN(ARG, INT) CALL PUTLIN(LIB, INT) CALL PUTCH(10, INT) 23030 CONTINUE GOTO 23028 23027 CONTINUE CALL FXLATE(FFILES(1,I),6, ARG) CALL PUTLIN(ARG, INT) CALL PUTCH(10, INT) 23028 CONTINUE 23025 I=I+1 GOTO 23024 23026 CONTINUE CALL PUTLIN(RLIB, INT) CALL PUTLIN(MAINST, INT) CALL PUTCH(10, INT) IF (.NOT.(RLIBDN .EQ. 0))GOTO 23031 CALL PUTLIN(RLIB, INT) CALL PUTCH(10, INT) 23031 CONTINUE INP = OPEN(TEMPL8, 1) IF (.NOT.(INP .EQ. -3))GOTO 23033 CALL ERROR(38HError opening tools.tkb template file.) 23033 CONTINUE CALL FCOPY(INP, INT) CALL CLOSE(INP) CALL CLOSE(INT) I = 1 CALL STCOPY(TKB, 1, ARGS, I) CALL CHCOPY(32, ARGS, I) CALL CHCOPY(64, ARGS, I) CALL SCOPY(SCRAT, 1, ARGS, I) IF (.NOT.(VERBOS .EQ. 1))GOTO 23035 INT = OPEN(SCRAT, 1) IF (.NOT.(INT .EQ. -3))GOTO 23037 CALL ERROR(34HError in opening TKB command file.) 23037 CONTINUE CALL FCOPY(INT, 3) CALL CLOSE(INT) 23035 CONTINUE STATUS = SSPAWN(5Hlocal, ARGS, ARG, 119) IF (.NOT.(STATUS .EQ. -3))GOTO 23039 CALL REMARK(22HError in spawning TKB.) 23039 CONTINUE JUNK = REMOVE(SCRAT) 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 23041 FLEVEL = FLEVEL + 1 I=1 23043 IF (.NOT.(I.LE.40))GOTO 23045 FFILES(I,FLEVEL) = IARG(I) 23044 I=I+1 GOTO 23043 23045 CONTINUE CALL FOLD(FFILES(1, FLEVEL)) 23041 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) 23046 IF (.NOT.(I .GT. 0))GOTO 23048 IF (.NOT.(INDEXC(TRMCHR, IN(I)) .GT. 0))GOTO 23049 GOTO 23048 23049 CONTINUE 23047 I=I-1 GOTO 23046 23048 CONTINUE J=I+1 23051 IF (.NOT.(IN(J) .NE. 0))GOTO 23053 IF (.NOT.(IN(J) .EQ. 46))GOTO 23054 GOTO 23053 23054 CONTINUE 23052 J=J+1 GOTO 23051 23053 CONTINUE I=1 23056 IF (.NOT.(I .LT. J))GOTO 23058 OUT(I) = IN(I) 23057 I=I+1 GOTO 23056 23058 CONTINUE CALL CHCOPY(46, OUT, I) CALL SCOPY(EXT, 1, OUT, I) RETURN END SUBROUTINE LDCMD(ARG) LOGICAL*1 ARG(40) INTEGER INDEXC COMMON / CLD / VERBOS, DEBUG, TASK(40) INTEGER VERBOS INTEGER DEBUG LOGICAL*1 TASK CALL FOLD(ARG) IF (.NOT.(ARG(1) .EQ. 45))GOTO 23059 IF (.NOT.(ARG(2) .EQ. 112))GOTO 23061 CALL SCOPY(ARG, 3, TASK, 1) GOTO 23062 23061 CONTINUE IF (.NOT.(ARG(2) .EQ. 108))GOTO 23063 CALL FSTACK(ARG) GOTO 23064 23063 CONTINUE IF (.NOT.(INDEXC(ARG, 100) .GT. 0))GOTO 23065 DEBUG = 1 23065 CONTINUE IF (.NOT.(INDEXC(ARG, 118) .GT. 0))GOTO 23067 VERBOS = 1 23067 CONTINUE 23064 CONTINUE 23062 CONTINUE GOTO 23060 23059 CONTINUE CALL BADARG(ARG) 23060 CONTINUE RETURN END