SUBROUTINE MAIN INTEGER ANSTRY, FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANCS, MAXVER, * SEEKPT INTEGER BMATCH, CLOWER, GETARG, GETLIN, OPEN INTEGER LINGET LOGICAL*1 INBUF(402) LOGICAL*1 WANTED(40) LOGICAL*1 ARG(36) INTEGER FDOUT, I INTEGER ARRAY(16) LOGICAL*1 USAGE(36) LOGICAL*1 ST001Z(5) LOGICAL*1 ST002Z(15) LOGICAL*1 ST003Z(5) LOGICAL*1 ST004Z(18) COMMON /TCS/ ANSTRY(100), FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANC *S, MAXVER, SEEKPT(2) DATA USAGE(1)/117/,USAGE(2)/115/,USAGE(3)/97/,USAGE(4)/103/,USAGE( *5)/101/,USAGE(6)/58/,USAGE(7)/32/,USAGE(8)/32/,USAGE(9)/103/,USAGE *(10)/101/,USAGE(11)/116/,USAGE(12)/32/,USAGE(13)/91/,USAGE(14)/45/ *,USAGE(15)/104/,USAGE(16)/93/,USAGE(17)/91/,USAGE(18)/45/,USAGE(19 *)/114/,USAGE(20)/77/,USAGE(21)/46/,USAGE(22)/78/,USAGE(23)/93/,USA *GE(24)/32/,USAGE(25)/104/,USAGE(26)/105/,USAGE(27)/115/,USAGE(28)/ *116/,USAGE(29)/111/,USAGE(30)/114/,USAGE(31)/121/,USAGE(32)/102/,U *SAGE(33)/105/,USAGE(34)/108/,USAGE(35)/101/,USAGE(36)/0/ DATA ST001Z(1)/37/,ST001Z(2)/37/,ST001Z(3)/100/,ST001Z(4)/32/,ST00 *1Z(5)/0/ DATA ST002Z(1)/42/,ST002Z(2)/42/,ST002Z(3)/42/,ST002Z(4)/32/,ST002 *Z(5)/86/,ST002Z(6)/101/,ST002Z(7)/114/,ST002Z(8)/115/,ST002Z(9)/10 *5/,ST002Z(10)/111/,ST002Z(11)/110/,ST002Z(12)/32/,ST002Z(13)/35/,S *T002Z(14)/32/,ST002Z(15)/0/ DATA ST003Z(1)/37/,ST003Z(2)/37/,ST003Z(3)/99/,ST003Z(4)/32/,ST003 *Z(5)/0/ DATA ST004Z(1)/73/,ST004Z(2)/108/,ST004Z(3)/108/,ST004Z(4)/101/,ST *004Z(5)/103/,ST004Z(6)/97/,ST004Z(7)/108/,ST004Z(8)/32/,ST004Z(9)/ *107/,ST004Z(10)/101/,ST004Z(11)/121/,ST004Z(12)/108/,ST004Z(13)/10 *1/,ST004Z(14)/116/,ST004Z(15)/116/,ST004Z(16)/101/,ST004Z(17)/114/ *,ST004Z(18)/0/ CALL QUERY(USAGE) FDOUT = 2 IF (.NOT.(GETARG(1, ARG, 36) .EQ. -1))GOTO 23000 CALL ERROR(USAGE) 23000 CONTINUE IF (.NOT.(ARG(1) .EQ. 45))GOTO 23002 IF (.NOT.(CLOWER(ARG(2)) .EQ. 104))GOTO 23004 IF (.NOT.(GETARG(2, ARG, 36) .EQ. -1))GOTO 23006 CALL ERROR(USAGE) 23006 CONTINUE FDHIS = OPEN(ARG, 1) IF (.NOT.(FDHIS .EQ. -3))GOTO 23008 CALL CANT(ARG) 23008 CONTINUE 23010 IF (.NOT.(GETLIN(INBUF, FDHIS) .NE. -1))GOTO 23011 IF (.NOT.(BMATCH(INBUF, 1, ST001Z) .NE. 0))GOTO 23012 CALL PUTCH(10, 2) CALL PUTLIN(ST002Z, 2) CALL PARSE(INBUF, 5, ARRAY, 32) CALL APUTLN(INBUF, ARRAY(2), 2) CALL PUTCH(32, 2) CALL APUTLN(INBUF, ARRAY(3), 2) CALL PUTCH(32, 2) CALL APUTLN(INBUF, ARRAY(4), 2) CALL PUTCH(32, 2) CALL APUTLN(INBUF, ARRAY(5), 2) CALL PUTCH(10, 2) 23012 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST003Z) .NE. 0))GOTO 23014 CALL APUTLN(INBUF, 5, 2) 23014 CONTINUE GOTO 23010 23011 CONTINUE CALL CLOSE(FDHIS) RETURN 23004 CONTINUE IF (.NOT.(CLOWER(ARG(2)) .EQ. 114))GOTO 23016 CALL SCOPY(ARG, 3, WANTED, 1) IF (.NOT.(GETARG(2, ARG, 36) .EQ. -1))GOTO 23018 CALL ERROR(USAGE) 23018 CONTINUE GOTO 23017 23016 CONTINUE CALL ERROR(ST004Z) 23017 CONTINUE 23005 CONTINUE 23002 CONTINUE CALL SETGET(ARG, WANTED) CALL RSTGET() 23020 IF (.NOT.(LINGET(INBUF, 0) .NE. -1))GOTO 23021 CALL PUTLIN(INBUF, FDOUT) GOTO 23020 23021 CONTINUE CALL CLOSE(FDHIS) END SUBROUTINE PARSE(INBUF, FROM, OUTARA, DELIM) LOGICAL*1 INBUF(402) INTEGER FROM INTEGER OUTARA(16) LOGICAL*1 DELIM INTEGER PTR PTR = FROM 23022 IF (.NOT.(INBUF(PTR) .EQ. DELIM))GOTO 23023 PTR = PTR+1 GOTO 23022 23023 CONTINUE I=1 23024 IF (.NOT.(INBUF(PTR) .NE. 10))GOTO 23026 OUTARA(I) = PTR 23027 IF (.NOT.((INBUF(PTR) .NE. DELIM) .AND. (INBUF(PTR) .NE. 10)))GOTO * 23028 PTR = PTR+1 GOTO 23027 23028 CONTINUE 23029 IF (.NOT.((INBUF(PTR) .EQ. DELIM) .AND. (INBUF(PTR) .NE. 10)))GOTO * 23030 INBUF(PTR) = 0 PTR = PTR+1 GOTO 23029 23030 CONTINUE 23025 I=I+1 GOTO 23024 23026 CONTINUE INBUF(PTR) = 0 OUTARA(I) = 0 RETURN END INTEGER FUNCTION BMATCH(LIN, FROM, PAT) LOGICAL*1 LIN (402), PAT(402) INTEGER FROM, I, J I = FROM J=1 23031 IF (.NOT.(PAT(J) .NE. 0))GOTO 23033 IF (.NOT.(LIN(I).NE.PAT(J)))GOTO 23034 BMATCH = 0 RETURN 23034 CONTINUE I = I + 1 23032 J = J + 1 GOTO 23031 23033 CONTINUE BMATCH = I RETURN END INTEGER FUNCTION BMCH2(LIN, FROM, PAT) LOGICAL*1 LIN (402), PAT(402) INTEGER FROM INTEGER EQUAL LOGICAL*1 TEMP(402) CALL SCOPY(LIN, FROM, TEMP, 1) BMCH2=(EQUAL(TEMP, PAT)) RETURN END INTEGER FUNCTION CTOI2(BUF, FIXED) LOGICAL*1 BUF INTEGER FIXED INTEGER CTOI INTEGER PTR PTR = FIXED CTOI2=(CTOI(BUF, PTR)) RETURN END SUBROUTINE SETGET (FILNAM, WANTED) LOGICAL*1 FILNAM(36) LOGICAL*1 WANTED(36) INTEGER ANSTRY, FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANCS, MAXVER, * SEEKPT INTEGER BMATCH, BMCH2, CLOSE, CTOI2, GETLIN, OPEN, NOTE INTEGER JUNK LOGICAL*1 INBUF(402) INTEGER ARRAY(16) INTEGER I INTEGER THREAD, IPREV, ITHIS LOGICAL*1 ST005Z(31) LOGICAL*1 ST006Z(36) LOGICAL*1 ST007Z(4) LOGICAL*1 ST008Z(37) LOGICAL*1 ST009Z(5) LOGICAL*1 ST00AZ(11) COMMON /TCS/ ANSTRY(100), FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANC *S, MAXVER, SEEKPT(2) DATA ST005Z(1)/67/,ST005Z(2)/97/,ST005Z(3)/110/,ST005Z(4)/110/,ST0 *05Z(5)/111/,ST005Z(6)/116/,ST005Z(7)/32/,ST005Z(8)/108/,ST005Z(9)/ *111/,ST005Z(10)/99/,ST005Z(11)/97/,ST005Z(12)/116/,ST005Z(13)/101/ *,ST005Z(14)/32/,ST005Z(15)/84/,ST005Z(16)/67/,ST005Z(17)/83/,ST005 *Z(18)/32/,ST005Z(19)/104/,ST005Z(20)/105/,ST005Z(21)/115/,ST005Z(2 *2)/116/,ST005Z(23)/111/,ST005Z(24)/114/,ST005Z(25)/121/,ST005Z(26) */32/,ST005Z(27)/102/,ST005Z(28)/105/,ST005Z(29)/108/,ST005Z(30)/10 *1/,ST005Z(31)/0/ DATA ST006Z(1)/85/,ST006Z(2)/110/,ST006Z(3)/101/,ST006Z(4)/120/,ST *006Z(5)/112/,ST006Z(6)/101/,ST006Z(7)/99/,ST006Z(8)/116/,ST006Z(9) */101/,ST006Z(10)/100/,ST006Z(11)/32/,ST006Z(12)/69/,ST006Z(13)/79/ *,ST006Z(14)/70/,ST006Z(15)/32/,ST006Z(16)/111/,ST006Z(17)/110/,ST0 *06Z(18)/32/,ST006Z(19)/104/,ST006Z(20)/105/,ST006Z(21)/115/,ST006Z *(22)/116/,ST006Z(23)/111/,ST006Z(24)/114/,ST006Z(25)/121/,ST006Z(2 *6)/45/,ST006Z(27)/105/,ST006Z(28)/110/,ST006Z(29)/102/,ST006Z(30)/ *111/,ST006Z(31)/32/,ST006Z(32)/115/,ST006Z(33)/99/,ST006Z(34)/97/, *ST006Z(35)/110/,ST006Z(36)/0/ DATA ST007Z(1)/37/,ST007Z(2)/37/,ST007Z(3)/84/,ST007Z(4)/0/ DATA ST008Z(1)/78/,ST008Z(2)/111/,ST008Z(3)/110/,ST008Z(4)/101/,ST *008Z(5)/120/,ST008Z(6)/105/,ST008Z(7)/115/,ST008Z(8)/116/,ST008Z(9 *)/97/,ST008Z(10)/110/,ST008Z(11)/116/,ST008Z(12)/32/,ST008Z(13)/11 *4/,ST008Z(14)/101/,ST008Z(15)/118/,ST008Z(16)/105/,ST008Z(17)/115/ *,ST008Z(18)/105/,ST008Z(19)/111/,ST008Z(20)/110/,ST008Z(21)/32/,ST *008Z(22)/108/,ST008Z(23)/101/,ST008Z(24)/118/,ST008Z(25)/101/,ST00 *8Z(26)/108/,ST008Z(27)/32/,ST008Z(28)/114/,ST008Z(29)/101/,ST008Z( *30)/113/,ST008Z(31)/117/,ST008Z(32)/101/,ST008Z(33)/115/,ST008Z(34 *)/116/,ST008Z(35)/101/,ST008Z(36)/100/,ST008Z(37)/0/ DATA ST009Z(1)/37/,ST009Z(2)/37/,ST009Z(3)/100/,ST009Z(4)/32/,ST00 *9Z(5)/0/ DATA ST00AZ(1)/86/,ST00AZ(2)/101/,ST00AZ(3)/114/,ST00AZ(4)/115/,ST *00AZ(5)/105/,ST00AZ(6)/111/,ST00AZ(7)/110/,ST00AZ(8)/32/,ST00AZ(9) */35/,ST00AZ(10)/32/,ST00AZ(11)/0/ FDHIS = OPEN(FILNAM, 1) IF (.NOT.(FDHIS .EQ. -3))GOTO 23036 CALL ERROR(ST005Z) 23036 CONTINUE I=1 23038 IF (.NOT.(I.LE.100))GOTO 23040 ANSTRY(I) = 0 23039 I=I+1 GOTO 23038 23040 CONTINUE THREAD = -1 23041 CONTINUE I = GETLIN(INBUF, FDHIS) IF (.NOT.(I .EQ. -1))GOTO 23044 CALL ERROR(ST006Z) 23044 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST007Z) .NE. 0))GOTO 23046 CALL ERROR(ST008Z) 23046 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST009Z) .NE. 0))GOTO 23048 CALL PARSE(INBUF, 5, ARRAY, 32) ITHIS = CTOI2(INBUF, ARRAY(6)) IPREV = CTOI2(INBUF, ARRAY(7)) IF (.NOT.(THREAD .LT. 0))GOTO 23050 MAXVER = ITHIS THREAD = 0 23050 CONTINUE IF (.NOT.(THREAD .EQ. 0))GOTO 23052 IF (.NOT.((WANTED(1) .EQ. 0) .OR. (BMCH2(INBUF, ARRAY(2), WANTED) *.EQ. 1)))GOTO 23054 ANSTRY(ITHIS) = 1 THREAD = IPREV IF (.NOT.(WANTED(1) .EQ. 0))GOTO 23056 CALL PUTLIN(ST00AZ, 3) CALL APUTLN(INBUF, ARRAY(2), 3) CALL PUTCH(10, 3) 23056 CONTINUE IF (.NOT.(THREAD .EQ. 0))GOTO 23058 GOTO 23043 23058 CONTINUE GOTO 23055 23054 CONTINUE GOTO 23042 23055 CONTINUE GOTO 23053 23052 CONTINUE IF (.NOT.(ITHIS .EQ. THREAD))GOTO 23060 ANSTRY(ITHIS) = 1 THREAD = IPREV IF (.NOT.(THREAD .EQ. 0))GOTO 23062 GOTO 23043 23062 CONTINUE 23060 CONTINUE 23053 CONTINUE 23048 CONTINUE 23042 GOTO 23041 23043 CONTINUE JUNK = NOTE(SEEKPT, FDHIS) RETURN END SUBROUTINE RSTGET() INTEGER ANSTRY, FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANCS, MAXVER, * SEEKPT COMMON /TCS/ ANSTRY(100), FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANC *S, MAXVER, SEEKPT(2) CALL SEEK(SEEKPT, FDHIS) INSERT = 0 RETURN END INTEGER FUNCTION LINGET(INBUF, PSTHRU) LOGICAL*1 INBUF(402) INTEGER PSTHRU INTEGER ANSTRY, FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANCS, MAXVER, * SEEKPT INTEGER BMATCH, CTOI2, GETLIN INTEGER CURNST, I LOGICAL*1 ST00BZ(36) LOGICAL*1 ST00CZ(5) LOGICAL*1 ST00DZ(5) LOGICAL*1 ST00EZ(5) COMMON /TCS/ ANSTRY(100), FDHIS, FDREV, FDSCR, FLAG, INSERT, MYANC *S, MAXVER, SEEKPT(2) DATA ST00BZ(1)/85/,ST00BZ(2)/110/,ST00BZ(3)/101/,ST00BZ(4)/120/,ST *00BZ(5)/112/,ST00BZ(6)/101/,ST00BZ(7)/99/,ST00BZ(8)/116/,ST00BZ(9) */101/,ST00BZ(10)/100/,ST00BZ(11)/32/,ST00BZ(12)/69/,ST00BZ(13)/79/ *,ST00BZ(14)/70/,ST00BZ(15)/32/,ST00BZ(16)/111/,ST00BZ(17)/110/,ST0 *0BZ(18)/32/,ST00BZ(19)/104/,ST00BZ(20)/105/,ST00BZ(21)/115/,ST00BZ *(22)/116/,ST00BZ(23)/111/,ST00BZ(24)/114/,ST00BZ(25)/121/,ST00BZ(2 *6)/45/,ST00BZ(27)/100/,ST00BZ(28)/97/,ST00BZ(29)/116/,ST00BZ(30)/9 *7/,ST00BZ(31)/32/,ST00BZ(32)/115/,ST00BZ(33)/99/,ST00BZ(34)/97/,ST *00BZ(35)/110/,ST00BZ(36)/0/ DATA ST00CZ(1)/37/,ST00CZ(2)/37/,ST00CZ(3)/69/,ST00CZ(4)/32/,ST00C *Z(5)/0/ DATA ST00DZ(1)/37/,ST00DZ(2)/37/,ST00DZ(3)/73/,ST00DZ(4)/32/,ST00D *Z(5)/0/ DATA ST00EZ(1)/37/,ST00EZ(2)/37/,ST00EZ(3)/68/,ST00EZ(4)/32/,ST00E *Z(5)/0/ 23064 CONTINUE I = GETLIN(INBUF, FDHIS) IF (.NOT.(I .EQ. -1))GOTO 23067 CALL ERROR(ST00BZ) 23067 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST00CZ) .NE. 0))GOTO 23069 IF (.NOT.(CTOI2(INBUF, 5) .EQ. 1))GOTO 23071 GOTO 23066 23071 CONTINUE IF (.NOT.(INSERT .EQ. 0))GOTO 23073 IF (.NOT.(CTOI2(INBUF, 5) .EQ. CURNST))GOTO 23075 INSERT = 1 23075 CONTINUE 23073 CONTINUE GOTO 23070 23069 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST00DZ) .NE. 0))GOTO 23077 IF (.NOT.(ANSTRY(CTOI2(INBUF, 5)) .EQ. 1))GOTO 23079 INSERT = 1 GOTO 23080 23079 CONTINUE IF (.NOT.(INSERT .EQ. 1))GOTO 23081 CURNST = CTOI2(INBUF, 5) INSERT = 0 23081 CONTINUE 23080 CONTINUE GOTO 23078 23077 CONTINUE IF (.NOT.(BMATCH(INBUF, 1, ST00EZ) .NE. 0))GOTO 23083 IF (.NOT.(ANSTRY(CTOI2(INBUF, 5)) .EQ. 1))GOTO 23085 IF (.NOT.(INSERT .EQ. 1))GOTO 23087 CURNST = CTOI2(INBUF, 5) INSERT = 0 23087 CONTINUE 23085 CONTINUE GOTO 23084 23083 CONTINUE IF (.NOT.(INSERT .EQ. 1))GOTO 23089 LINGET=(I) RETURN 23089 CONTINUE 23084 CONTINUE 23078 CONTINUE 23070 CONTINUE 23065 GOTO 23064 23066 CONTINUE LINGET=(-1) RETURN END SUBROUTINE APUTLN(STR, OFF, OUTFD) LOGICAL*1 STR(402) INTEGER OFF, OUTFD LOGICAL*1 TMPLIN(402) INTEGER I, J I = OFF-1 J = 1 23091 CONTINUE I = I+1 TMPLIN(J) = STR(I) J = J+1 23092 IF (.NOT.((STR(I) .EQ. 0) .OR. (STR(I) .EQ. 10)))GOTO 23091 23093 CONTINUE TMPLIN(J) = 0 CALL PUTLIN(TMPLIN, OUTFD) RETURN END