import java.io.*; import java.net.*; import java.lang.*; class WildCard { private static char WildCharMask = 0x7C00; private String sourceStr; private String pattern; private String patternUpper; private static char WildChar(char c) { return( (char) ( c | WildCharMask ) ); }; public WildCard() { sourceStr = pattern = patternUpper = null; }; public WildCard(String in_pattern) { StringBuffer patwork = new StringBuffer(in_pattern.length()); int i=0; char c,lastc=0; sourceStr = new String(in_pattern); while(i= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } // System.err.println(" pat: " + pat + " ,pi: " + pi + ",char:" + pat.charAt(pi)); // System.err.println(" src: " + src + " ,si: " + si); if ( (pat.charAt(pi) & WildCharMask) == WildCharMask ) { switch( pat.charAt(pi) ) { case '?'|0x7C00: /* match any */ if ( si >= src.length() ) return(false); pi++; si++; break; case '['|0x7C00: /* match several */ if ( si >= src.length() ) return(false); else { char s = src.charAt(si++); pi++; if ( pi >= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } if ( pat.charAt(pi+1) == '-' ) /* range */ { if ( s < pat.charAt(pi) || s > pat.charAt(pi+2) ) return(false); pi += 3; } else /* list */ { while ( pat.charAt(pi++) != s ) { if ( pat.charAt(pi) == WildChar(']') ) return(false); pi++; /* pass , */ } } if ( pi >= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } while( pat.charAt(pi) != WildChar(']') ) { pi++; if ( pi >= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } } pi++; } break; case '~'|0x7C00: /* NOT */ pi++; return( ! matchPair(pat,pi,src,si) ); case '*'|0x7C00: /* WILD */ pi++; if ( pi >= pat.length() ) return(true); while( si < src.length() ) { if ( matchPair(pat,pi,src,si) ) return(true); si++; } return( false ); case '('|0x7C00 : /* OR */ do { pi++; if ( pi >= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } if ( matchPair(pat,pi,src,si) ) return(true); while ( pat.charAt(pi) != WildChar('|') && pat.charAt(pi) != WildChar(')') ) pi++; } while( pat.charAt(pi) != WildChar(')') ); return(false); case '|'|0x7C00: /* leftover from OR , skip */ while ( pat.charAt(pi) != WildChar(')') ) { pi++; if ( pi >= pat.length() ) { if ( si >= src.length() ) return(true); else return(false); } } pi++; break; case ')'|0x7C00: /* leftover from OR , ignore */ pi++; break; default: System.err.println("wild error: got: " + pat.charAt(pi)); return(false); } } else { /* raw character */ if ( si >= src.length() ) return(false); if ( src.charAt(si) != pat.charAt(pi) ) return(false); si++; pi++; } } }; public String toString() { return( sourceStr ); }; };