SUBROUTINE MAIN LOGICAL*1 ARG(128), LIN(402), NEW(402), TO(132) INTEGER FROM(132), PAT(132, 10) INTEGER ADDSET, AMATCH, GETARG, GETLIN, GETPAT, GETSUB INTEGER GMATCH, INDEXC, ITOC INTEGER ANDPAT, EXCEPT, FRARG, I, JUNK, K, LASTM, M, NARG INTEGER NPAT, STATUS, TOARG LOGICAL*1 USESTR(44) LOGICAL*1 ST001Z(46) LOGICAL*1 ST002Z(27) LOGICAL*1 ST003Z(17) LOGICAL*1 ST004Z(20) LOGICAL*1 ST005Z(18) 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)/9 *9/,USESTR(10)/104/,USESTR(11)/32/,USESTR(12)/91/,USESTR(13)/45/,US *ESTR(14)/97/,USESTR(15)/120/,USESTR(16)/93/,USESTR(17)/32/,USESTR( *18)/91/,USESTR(19)/101/,USESTR(20)/120/,USESTR(21)/112/,USESTR(22) */114/,USESTR(23)/101/,USESTR(24)/115/,USESTR(25)/115/,USESTR(26)/1 *05/,USESTR(27)/111/,USESTR(28)/110/,USESTR(29)/93/,USESTR(30)/32/, *USESTR(31)/46/,USESTR(32)/46/,USESTR(33)/46/,USESTR(34)/32/,USESTR *(35)/102/,USESTR(36)/114/,USESTR(37)/111/,USESTR(38)/109/,USESTR(3 *9)/32/,USESTR(40)/91/,USESTR(41)/116/,USESTR(42)/111/,USESTR(43)/9 *3/,USESTR(44)/0/ DATA ST001Z(1)/63/,ST001Z(2)/32/,ST001Z(3)/77/,ST001Z(4)/97/,ST001 *Z(5)/120/,ST001Z(6)/105/,ST001Z(7)/109/,ST001Z(8)/117/,ST001Z(9)/1 *09/,ST001Z(10)/32/,ST001Z(11)/110/,ST001Z(12)/117/,ST001Z(13)/109/ *,ST001Z(14)/98/,ST001Z(15)/101/,ST001Z(16)/114/,ST001Z(17)/32/,ST0 *01Z(18)/111/,ST001Z(19)/102/,ST001Z(20)/32/,ST001Z(21)/101/,ST001Z *(22)/120/,ST001Z(23)/112/,ST001Z(24)/114/,ST001Z(25)/101/,ST001Z(2 *6)/115/,ST001Z(27)/115/,ST001Z(28)/105/,ST001Z(29)/111/,ST001Z(30) */110/,ST001Z(31)/115/,ST001Z(32)/32/,ST001Z(33)/112/,ST001Z(34)/10 *1/,ST001Z(35)/114/,ST001Z(36)/109/,ST001Z(37)/105/,ST001Z(38)/116/ *,ST001Z(39)/116/,ST001Z(40)/101/,ST001Z(41)/100/,ST001Z(42)/32/,ST *001Z(43)/105/,ST001Z(44)/115/,ST001Z(45)/32/,ST001Z(46)/0/ DATA ST002Z(1)/63/,ST002Z(2)/32/,ST002Z(3)/73/,ST002Z(4)/108/,ST00 *2Z(5)/108/,ST002Z(6)/101/,ST002Z(7)/103/,ST002Z(8)/97/,ST002Z(9)/1 *08/,ST002Z(10)/32/,ST002Z(11)/102/,ST002Z(12)/114/,ST002Z(13)/111/ *,ST002Z(14)/109/,ST002Z(15)/101/,ST002Z(16)/120/,ST002Z(17)/112/,S *T002Z(18)/114/,ST002Z(19)/32/,ST002Z(20)/112/,ST002Z(21)/97/,ST002 *Z(22)/116/,ST002Z(23)/116/,ST002Z(24)/101/,ST002Z(25)/114/,ST002Z( *26)/110/,ST002Z(27)/0/ DATA ST003Z(1)/63/,ST003Z(2)/32/,ST003Z(3)/73/,ST003Z(4)/108/,ST00 *3Z(5)/108/,ST003Z(6)/101/,ST003Z(7)/103/,ST003Z(8)/97/,ST003Z(9)/1 *08/,ST003Z(10)/32/,ST003Z(11)/116/,ST003Z(12)/111/,ST003Z(13)/101/ *,ST003Z(14)/120/,ST003Z(15)/112/,ST003Z(16)/114/,ST003Z(17)/0/ DATA ST004Z(1)/63/,ST004Z(2)/32/,ST004Z(3)/73/,ST004Z(4)/108/,ST00 *4Z(5)/108/,ST004Z(6)/101/,ST004Z(7)/103/,ST004Z(8)/97/,ST004Z(9)/1 *08/,ST004Z(10)/32/,ST004Z(11)/112/,ST004Z(12)/97/,ST004Z(13)/116/, *ST004Z(14)/116/,ST004Z(15)/101/,ST004Z(16)/114/,ST004Z(17)/110/,ST *004Z(18)/58/,ST004Z(19)/32/,ST004Z(20)/0/ DATA ST005Z(1)/63/,ST005Z(2)/32/,ST005Z(3)/76/,ST005Z(4)/105/,ST00 *5Z(5)/110/,ST005Z(6)/101/,ST005Z(7)/32/,ST005Z(8)/116/,ST005Z(9)/1 *14/,ST005Z(10)/117/,ST005Z(11)/110/,ST005Z(12)/99/,ST005Z(13)/97/, *ST005Z(14)/116/,ST005Z(15)/101/,ST005Z(16)/100/,ST005Z(17)/58/,ST0 *05Z(18)/0/ CALL QUERY(USESTR) EXCEPT = 0 ANDPAT = 0 NARG = 0 I = 1 23000 IF (.NOT.(GETARG( I, ARG, 128) .NE. -1 ))GOTO 23002 IF (.NOT.( ARG(1) .EQ. 45 ))GOTO 23003 CALL STRCPY( ARG, LIN) CALL FOLD(LIN) IF (.NOT.( INDEXC( LIN, 97) .GT. 0 ))GOTO 23005 ANDPAT = 1 23005 CONTINUE IF (.NOT.( INDEXC( LIN, 120) .GT. 0 ))GOTO 23007 EXCEPT = 1 23007 CONTINUE CALL DELARG(I) I = I - 1 GOTO 23004 23003 CONTINUE NARG = NARG + 1 23004 CONTINUE 23001 I = I + 1 GOTO 23000 23002 CONTINUE IF (.NOT.( NARG .EQ. 0 ))GOTO 23009 CALL ERROR(USESTR) GOTO 23010 23009 CONTINUE IF (.NOT.( NARG .EQ. 1 .OR. NARG .EQ. 2 ))GOTO 23011 FRARG = 1 TOARG = 2 NPAT = 1 GOTO 23012 23011 CONTINUE TOARG = NARG FRARG = NARG - 1 NPAT = NARG - 2 23012 CONTINUE 23010 CONTINUE IF (.NOT.( NPAT .GT. 10 ))GOTO 23013 CALL PUTLIN( ST001Z, 3) I = ITOC( 10, ARG, 128) CALL ERROR(ARG) 23013 CONTINUE JUNK = GETARG( FRARG, ARG, 128) IF (.NOT.( GETPAT( ARG, FROM) .EQ. -3 ))GOTO 23015 CALL ERROR( ST002Z ) 23015 CONTINUE IF (.NOT.( GETARG( TOARG, ARG, 128) .EQ. -1 ))GOTO 23017 ARG(1) = 0 23017 CONTINUE IF (.NOT.( GETSUB( ARG, TO) .EQ. -3 ))GOTO 23019 CALL ERROR( ST003Z ) 23019 CONTINUE I = 1 23021 IF (.NOT.(I .LE. NPAT ))GOTO 23023 JUNK = GETARG( I, ARG, 128) IF (.NOT.( GETPAT( ARG, PAT( 1, I) ) .EQ. -3 ))GOTO 23024 CALL PUTLIN( ST004Z, 3) CALL ERROR(ARG) 23024 CONTINUE 23022 I = I + 1 GOTO 23021 23023 CONTINUE 23026 IF (.NOT.( GETLIN( LIN, 1) .NE. -1 ))GOTO 23027 STATUS = GMATCH( LIN, PAT, NPAT, ANDPAT) IF (.NOT.( ( STATUS .EQ. 1 .AND. EXCEPT .EQ. 0 ) .OR. ( STATUS .EQ *. 0 .AND. EXCEPT .EQ. 1 ) ))GOTO 23028 K = 1 LASTM = 0 I = 1 23030 IF (.NOT.(LIN(I) .NE. 0 ))GOTO 23032 M = AMATCH( LIN, I, FROM) IF (.NOT.( M .GT. 0 .AND. LASTM .NE. M ))GOTO 23033 CALL CATSUB( LIN, I, M, TO, NEW, K, 402) LASTM = M 23033 CONTINUE IF (.NOT.( M .EQ. 0 .OR. M .EQ. I ))GOTO 23035 JUNK = ADDSET( LIN(I), NEW, K, 402) I = I + 1 GOTO 23036 23035 CONTINUE I = M 23036 CONTINUE 23031 GOTO 23030 23032 CONTINUE IF (.NOT.( ADDSET( 0, NEW, K, 402) .EQ. 0 ))GOTO 23037 K = 402 JUNK = ADDSET( 0, NEW, K, 402) CALL REMARK( ST005Z ) CALL PUTLIN( NEW, 3) CALL PUTCH( 10, 3) 23037 CONTINUE CALL PUTLIN( NEW, 2) GOTO 23029 23028 CONTINUE CALL PUTLIN( LIN, 2) 23029 CONTINUE GOTO 23026 23027 CONTINUE RETURN END INTEGER FUNCTION GMATCH( LIN, PAT, ELEVEL, ANDPAT) LOGICAL*1 LIN(100) INTEGER ANDPAT, ELEVEL, I, PAT(132, 10), STATUS INTEGER MATCH I = 1 23039 IF (.NOT.(I .LE. ELEVEL ))GOTO 23041 STATUS = MATCH( LIN, PAT( 1, I) ) IF (.NOT.( ANDPAT .EQ. 0 .AND. STATUS .EQ. 1 ))GOTO 23042 GMATCH=(1) RETURN 23042 CONTINUE IF (.NOT.( ANDPAT .EQ. 1 .AND. STATUS .EQ. 0 ))GOTO 23044 GMATCH=(0) RETURN 23044 CONTINUE 23043 CONTINUE 23040 I = I + 1 GOTO 23039 23041 CONTINUE GMATCH=(ANDPAT) RETURN END