SUBROUTINE MAIN LOGICAL*1 BUF(402), SUB(132), OLD(402) INTEGER N, PAT(132) INTEGER GETLIN, EQUAL, MATCH INTEGER VERBOS INTEGER LSTPTR INTEGER GBLPAT INTEGER PTR LOGICAL*1 ST001Z(37) COMMON / CTABLE / VERBOS, LSTPTR, GBLPAT(132), PTR(100) DATA ST001Z(1)/117/,ST001Z(2)/115/,ST001Z(3)/97/,ST001Z(4)/103/,ST *001Z(5)/101/,ST001Z(6)/58/,ST001Z(7)/32/,ST001Z(8)/32/,ST001Z(9)/1 *20/,ST001Z(10)/99/,ST001Z(11)/104/,ST001Z(12)/32/,ST001Z(13)/91/,S *T001Z(14)/45/,ST001Z(15)/103/,ST001Z(16)/112/,ST001Z(17)/97/,ST001 *Z(18)/116/,ST001Z(19)/93/,ST001Z(20)/32/,ST001Z(21)/91/,ST001Z(22) */45/,ST001Z(23)/118/,ST001Z(24)/93/,ST001Z(25)/32/,ST001Z(26)/112/ *,ST001Z(27)/97/,ST001Z(28)/116/,ST001Z(29)/102/,ST001Z(30)/105/,ST *001Z(31)/108/,ST001Z(32)/101/,ST001Z(33)/32/,ST001Z(34)/46/,ST001Z *(35)/46/,ST001Z(36)/46/,ST001Z(37)/0/ CALL QUERY(ST001Z) CALL INIPAT(BUF, PAT, SUB) N = 0 23000 IF (.NOT.(GETLIN(BUF, 1) .NE. -1))GOTO 23001 N = N + 1 CALL STRCPY(BUF, OLD) IF (.NOT.(GBLPAT(1) .EQ. 0))GOTO 23002 CALL DOSUBS(BUF, PAT, SUB) GOTO 23003 23002 CONTINUE IF (.NOT.(MATCH(BUF, GBLPAT) .EQ. 1))GOTO 23004 CALL DOSUBS(BUF, PAT, SUB) 23004 CONTINUE 23003 CONTINUE IF (.NOT.(VERBOS .EQ. 1))GOTO 23006 IF (.NOT.(EQUAL(BUF, OLD) .EQ. 0))GOTO 23008 CALL PUTINT(N, 1, 3) CALL PUTCH(10, 3) CALL PUTLIN(OLD, 3) CALL PUTLIN(BUF, 3) 23008 CONTINUE 23006 CONTINUE CALL PUTLIN(BUF, 2) GOTO 23000 23001 CONTINUE RETURN END SUBROUTINE DOSUBS(BUF, PAT, SUB) LOGICAL*1 BUF(402), SUB(132) INTEGER I, J, K, L, SIZE, PAT(132), PATSIZ INTEGER VERBOS INTEGER LSTPTR INTEGER GBLPAT INTEGER PTR INTEGER MEM(5000) LOGICAL*1 CMEM(10000) COMMON / CTABLE / VERBOS, LSTPTR, GBLPAT(132), PTR(100) COMMON /CDSMEM/ MEM EQUIVALENCE (CMEM(1),MEM(1)) I=1 23010 IF (.NOT.(I .LE. LSTPTR))GOTO 23012 J=PTR(I)+1 K=1 23013 IF (.NOT.(MEM(J) .NE. 0))GOTO 23015 SIZE = PATSIZ(MEM,J) L=0 23016 IF (.NOT.(L .NE. SIZE))GOTO 23018 PAT(K+L) = MEM(J+L) 23017 L=L+1 GOTO 23016 23018 CONTINUE 23014 J=J+SIZE K=K+SIZE GOTO 23013 23015 CONTINUE PAT(K) = 0 J = PTR(I) CALL SCOPY(CMEM, (2*(MEM(J)-1)+1), SUB, 1) CALL REPLAC(BUF, PAT, SUB) 23011 I=I+1 GOTO 23010 23012 CONTINUE RETURN END INTEGER FUNCTION ENTER(LHS, RHS) INTEGER LHS(132), SIZE, I, J, PATSIZ LOGICAL*1 RHS(132) INTEGER NODE, DSGET, TEMP, SDUPL INTEGER MEM(5000) LOGICAL*1 CMEM(10000) LOGICAL*1 ST002Z(39) LOGICAL*1 ST003Z(39) COMMON /CDSMEM/ MEM EQUIVALENCE (CMEM(1),MEM(1)) DATA ST002Z(1)/84/,ST002Z(2)/111/,ST002Z(3)/111/,ST002Z(4)/32/,ST0 *02Z(5)/109/,ST002Z(6)/97/,ST002Z(7)/110/,ST002Z(8)/121/,ST002Z(9)/ *32/,ST002Z(10)/112/,ST002Z(11)/97/,ST002Z(12)/116/,ST002Z(13)/116/ *,ST002Z(14)/101/,ST002Z(15)/114/,ST002Z(16)/110/,ST002Z(17)/115/,S *T002Z(18)/32/,ST002Z(19)/102/,ST002Z(20)/111/,ST002Z(21)/114/,ST00 *2Z(22)/32/,ST002Z(23)/105/,ST002Z(24)/110/,ST002Z(25)/116/,ST002Z( *26)/101/,ST002Z(27)/114/,ST002Z(28)/110/,ST002Z(29)/97/,ST002Z(30) */108/,ST002Z(31)/32/,ST002Z(32)/115/,ST002Z(33)/116/,ST002Z(34)/11 *1/,ST002Z(35)/114/,ST002Z(36)/97/,ST002Z(37)/103/,ST002Z(38)/101/, *ST002Z(39)/0/ DATA ST003Z(1)/84/,ST003Z(2)/111/,ST003Z(3)/111/,ST003Z(4)/32/,ST0 *03Z(5)/109/,ST003Z(6)/97/,ST003Z(7)/110/,ST003Z(8)/121/,ST003Z(9)/ *32/,ST003Z(10)/112/,ST003Z(11)/97/,ST003Z(12)/116/,ST003Z(13)/116/ *,ST003Z(14)/101/,ST003Z(15)/114/,ST003Z(16)/110/,ST003Z(17)/115/,S *T003Z(18)/32/,ST003Z(19)/102/,ST003Z(20)/111/,ST003Z(21)/114/,ST00 *3Z(22)/32/,ST003Z(23)/105/,ST003Z(24)/110/,ST003Z(25)/116/,ST003Z( *26)/101/,ST003Z(27)/114/,ST003Z(28)/110/,ST003Z(29)/97/,ST003Z(30) */108/,ST003Z(31)/32/,ST003Z(32)/115/,ST003Z(33)/116/,ST003Z(34)/11 *1/,ST003Z(35)/114/,ST003Z(36)/97/,ST003Z(37)/103/,ST003Z(38)/101/, *ST003Z(39)/0/ SIZE=1 23019 IF (.NOT.(LHS(SIZE) .NE. 0))GOTO 23021 23020 SIZE=SIZE+PATSIZ(LHS,SIZE) GOTO 23019 23021 CONTINUE NODE = DSGET(SIZE + 1) IF (.NOT.(NODE .EQ. 0))GOTO 23022 CALL ERROR(ST002Z) 23022 CONTINUE I=1 J=NODE+1 23024 IF (.NOT.(I .NE. SIZE))GOTO 23026 MEM(J) = LHS(I) 23025 I=I+1 J=J+1 GOTO 23024 23026 CONTINUE MEM(J) = 0 TEMP = SDUPL(RHS) IF (.NOT.(TEMP .EQ. 0))GOTO 23027 CALL ERROR(ST003Z) 23027 CONTINUE MEM(NODE) = TEMP ENTER=(NODE) RETURN END SUBROUTINE FERROR(FILE, BUF, REASON) LOGICAL*1 FILE(100), BUF(100), REASON(100) LOGICAL*1 ERR1(24) LOGICAL*1 ERR2(11) LOGICAL*1 ERR3(17) DATA ERR1(1)/69/,ERR1(2)/114/,ERR1(3)/114/,ERR1(4)/111/,ERR1(5)/11 *4/,ERR1(6)/32/,ERR1(7)/112/,ERR1(8)/114/,ERR1(9)/111/,ERR1(10)/99/ *,ERR1(11)/101/,ERR1(12)/115/,ERR1(13)/115/,ERR1(14)/105/,ERR1(15)/ *110/,ERR1(16)/103/,ERR1(17)/32/,ERR1(18)/102/,ERR1(19)/105/,ERR1(2 *0)/108/,ERR1(21)/101/,ERR1(22)/58/,ERR1(23)/32/,ERR1(24)/0/ DATA ERR2(1)/44/,ERR2(2)/32/,ERR2(3)/114/,ERR2(4)/101/,ERR2(5)/97/ *,ERR2(6)/115/,ERR2(7)/111/,ERR2(8)/110/,ERR2(9)/58/,ERR2(10)/32/,E *RR2(11)/0/ DATA ERR3(1)/79/,ERR3(2)/102/,ERR3(3)/102/,ERR3(4)/101/,ERR3(5)/11 *0/,ERR3(6)/100/,ERR3(7)/105/,ERR3(8)/110/,ERR3(9)/103/,ERR3(10)/32 */,ERR3(11)/108/,ERR3(12)/105/,ERR3(13)/110/,ERR3(14)/101/,ERR3(15) */58/,ERR3(16)/32/,ERR3(17)/0/ CALL PUTLIN(ERR1, 3) CALL PUTLIN(FILE, 3) CALL PUTLIN(ERR2, 3) CALL PUTLNL(REASON, 3) CALL PUTLIN(ERR3, 3) CALL PUTLNL(BUF, 3) CALL ENDST(-3) RETURN END SUBROUTINE INIPAT(BUF, LHS, RHS) LOGICAL*1 BUF(402), RHS(132), PATFIL(36), DELIM INTEGER I, J, LHS(132) INTEGER GETARG, GETLIN, MAKPAT, MAKSUB INTEGER ENTER INTEGER INT INTEGER OPEN INTEGER VERBOS INTEGER LSTPTR INTEGER GBLPAT INTEGER PTR INTEGER MEM(5000) LOGICAL*1 CMEM(10000) LOGICAL*1 ILLPAT(34) LOGICAL*1 ILLSUB(47) LOGICAL*1 PTROVF(39) LOGICAL*1 ST004Z(24) COMMON / CTABLE / VERBOS, LSTPTR, GBLPAT(132), PTR(100) COMMON /CDSMEM/ MEM EQUIVALENCE (CMEM(1),MEM(1)) DATA ILLPAT(1)/73/,ILLPAT(2)/108/,ILLPAT(3)/108/,ILLPAT(4)/101/,IL *LPAT(5)/103/,ILLPAT(6)/97/,ILLPAT(7)/108/,ILLPAT(8)/32/,ILLPAT(9)/ *112/,ILLPAT(10)/97/,ILLPAT(11)/116/,ILLPAT(12)/116/,ILLPAT(13)/101 */,ILLPAT(14)/114/,ILLPAT(15)/110/,ILLPAT(16)/32/,ILLPAT(17)/105/,I *LLPAT(18)/110/,ILLPAT(19)/32/,ILLPAT(20)/108/,ILLPAT(21)/101/,ILLP *AT(22)/102/,ILLPAT(23)/116/,ILLPAT(24)/32/,ILLPAT(25)/104/,ILLPAT( *26)/97/,ILLPAT(27)/110/,ILLPAT(28)/100/,ILLPAT(29)/32/,ILLPAT(30)/ *115/,ILLPAT(31)/105/,ILLPAT(32)/100/,ILLPAT(33)/101/,ILLPAT(34)/0/ DATA ILLSUB(1)/73/,ILLSUB(2)/108/,ILLSUB(3)/108/,ILLSUB(4)/101/,IL *LSUB(5)/103/,ILLSUB(6)/97/,ILLSUB(7)/108/,ILLSUB(8)/32/,ILLSUB(9)/ *115/,ILLSUB(10)/117/,ILLSUB(11)/98/,ILLSUB(12)/115/,ILLSUB(13)/116 */,ILLSUB(14)/105/,ILLSUB(15)/116/,ILLSUB(16)/117/,ILLSUB(17)/116/, *ILLSUB(18)/105/,ILLSUB(19)/111/,ILLSUB(20)/110/,ILLSUB(21)/32/,ILL *SUB(22)/115/,ILLSUB(23)/116/,ILLSUB(24)/114/,ILLSUB(25)/105/,ILLSU *B(26)/110/,ILLSUB(27)/103/,ILLSUB(28)/32/,ILLSUB(29)/105/,ILLSUB(3 *0)/110/,ILLSUB(31)/32/,ILLSUB(32)/114/,ILLSUB(33)/105/,ILLSUB(34)/ *103/,ILLSUB(35)/104/,ILLSUB(36)/116/,ILLSUB(37)/32/,ILLSUB(38)/104 */,ILLSUB(39)/97/,ILLSUB(40)/110/,ILLSUB(41)/100/,ILLSUB(42)/32/,IL *LSUB(43)/115/,ILLSUB(44)/105/,ILLSUB(45)/100/,ILLSUB(46)/101/,ILLS *UB(47)/0/ DATA PTROVF(1)/84/,PTROVF(2)/111/,PTROVF(3)/111/,PTROVF(4)/32/,PTR *OVF(5)/109/,PTROVF(6)/97/,PTROVF(7)/110/,PTROVF(8)/121/,PTROVF(9)/ *32/,PTROVF(10)/112/,PTROVF(11)/97/,PTROVF(12)/116/,PTROVF(13)/116/ *,PTROVF(14)/101/,PTROVF(15)/114/,PTROVF(16)/110/,PTROVF(17)/115/,P *TROVF(18)/32/,PTROVF(19)/102/,PTROVF(20)/111/,PTROVF(21)/114/,PTRO *VF(22)/32/,PTROVF(23)/105/,PTROVF(24)/110/,PTROVF(25)/116/,PTROVF( *26)/101/,PTROVF(27)/114/,PTROVF(28)/110/,PTROVF(29)/97/,PTROVF(30) */108/,PTROVF(31)/32/,PTROVF(32)/115/,PTROVF(33)/116/,PTROVF(34)/11 *1/,PTROVF(35)/114/,PTROVF(36)/97/,PTROVF(37)/103/,PTROVF(38)/101/, *PTROVF(39)/0/ DATA ST004Z(1)/69/,ST004Z(2)/114/,ST004Z(3)/114/,ST004Z(4)/111/,ST *004Z(5)/114/,ST004Z(6)/32/,ST004Z(7)/105/,ST004Z(8)/110/,ST004Z(9) */32/,ST004Z(10)/103/,ST004Z(11)/108/,ST004Z(12)/111/,ST004Z(13)/98 */,ST004Z(14)/97/,ST004Z(15)/108/,ST004Z(16)/32/,ST004Z(17)/112/,ST *004Z(18)/97/,ST004Z(19)/116/,ST004Z(20)/116/,ST004Z(21)/101/,ST004 *Z(22)/114/,ST004Z(23)/110/,ST004Z(24)/0/ LSTPTR = 0 VERBOS = 0 GBLPAT(1) = 0 CALL DSINIT(5000) I=1 23029 IF (.NOT.(GETARG(I, PATFIL, 36) .NE. -1))GOTO 23031 IF (.NOT.(PATFIL(1) .EQ. 45))GOTO 23032 IF (.NOT.(PATFIL(2) .EQ. 118 .OR. PATFIL(2) .EQ. 86))GOTO 23034 VERBOS = 1 GOTO 23035 23034 CONTINUE IF (.NOT.(PATFIL(2) .EQ. 103 .OR. PATFIL(2) .EQ. 71))GOTO 23036 IF (.NOT.(MAKPAT(PATFIL, 3, 0, GBLPAT) .EQ. -3))GOTO 23038 CALL ERROR(ST004Z) 23038 CONTINUE GOTO 23037 23036 CONTINUE CALL BADARG(PATFIL) 23037 CONTINUE 23035 CONTINUE GOTO 23033 23032 CONTINUE INT = OPEN(PATFIL, 1) IF (.NOT.(INT .EQ. -3))GOTO 23040 CALL CANT(PATFIL) 23040 CONTINUE 23042 IF (.NOT.(GETLIN(BUF, INT) .NE. -1))GOTO 23043 DELIM = BUF(1) J = MAKPAT(BUF, 2, DELIM, LHS) IF (.NOT.(J .EQ. -3))GOTO 23044 CALL FERROR(PATFIL, BUF, ILLPAT) 23044 CONTINUE J = MAKSUB(BUF, J+1, DELIM, RHS) IF (.NOT.(J .EQ. -3))GOTO 23046 CALL FERROR(PATFIL, BUF, ILLSUB) 23046 CONTINUE LSTPTR = LSTPTR + 1 IF (.NOT.(LSTPTR .GT. 100))GOTO 23048 CALL FERROR(PATFIL, BUF, PTROVF) 23048 CONTINUE PTR(LSTPTR) = ENTER(LHS, RHS) GOTO 23042 23043 CONTINUE CALL CLOSE(INT) 23033 CONTINUE 23030 I=I+1 GOTO 23029 23031 CONTINUE RETURN END SUBROUTINE REPLAC(OLD, PAT, SUB) LOGICAL*1 OLD(402), SUB(132), NEW(402) INTEGER J, LASTM, K, M, JUNK, PAT(132) INTEGER AMATCH, ADDSET LOGICAL*1 ST005Z(33) DATA ST005Z(1)/84/,ST005Z(2)/104/,ST005Z(3)/101/,ST005Z(4)/32/,ST0 *05Z(5)/110/,ST005Z(6)/101/,ST005Z(7)/120/,ST005Z(8)/116/,ST005Z(9) */32/,ST005Z(10)/108/,ST005Z(11)/105/,ST005Z(12)/110/,ST005Z(13)/10 *1/,ST005Z(14)/32/,ST005Z(15)/104/,ST005Z(16)/97/,ST005Z(17)/115/,S *T005Z(18)/32/,ST005Z(19)/98/,ST005Z(20)/101/,ST005Z(21)/101/,ST005 *Z(22)/110/,ST005Z(23)/32/,ST005Z(24)/116/,ST005Z(25)/114/,ST005Z(2 *6)/117/,ST005Z(27)/110/,ST005Z(28)/99/,ST005Z(29)/97/,ST005Z(30)/1 *16/,ST005Z(31)/101/,ST005Z(32)/100/,ST005Z(33)/0/ J = 1 LASTM = 0 K=1 23050 IF (.NOT.(OLD(K) .NE. 0))GOTO 23052 M = AMATCH(OLD, K, PAT) IF (.NOT.(M .GT. 0 .AND. LASTM .NE. M))GOTO 23053 CALL CATSUB(OLD, K, M, SUB, NEW, J, 402) LASTM = M 23053 CONTINUE IF (.NOT.(M .EQ. 0 .OR. M .EQ. K))GOTO 23055 JUNK = ADDSET(OLD(K), NEW, J, 402) K = K + 1 GOTO 23056 23055 CONTINUE K = M 23056 CONTINUE 23051 GOTO 23050 23052 CONTINUE IF (.NOT.(J .GT. 402))GOTO 23057 J = 402 CALL REMARK(ST005Z) 23057 CONTINUE NEW(J) = 0 CALL STRCPY(NEW, OLD) RETURN END