int match(char *filter, char *file) { for (;;) { switch (*filter) { case '*' : return(match(filter + 1, file) || ((*file != '\0') && match(filter, file + 1))); case '?' : if (*file == '\0') { return(0); } filter++; file++; break; case '\0' : if (*file == *filter) { return(1); } else { return(0); } default : if (*filter != *file) { return(0); } filter++; file++; break; } } }