home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Log: arcmatch.c,v $
- * Revision 1.2 88/04/11 18:20:43 hyc
- * fixup pattern matching for BSD...
- *
- * Revision 1.1 88/04/11 18:12:56 hyc
- * Initial revision
- *
- * Revision 1.2 87/12/19 04:39:35 hyc
- * Don't convert names to upper case for BSD...
- *
- * Revision 1.1 87/12/19 04:39:06 hyc
- * Initial revision
- *
- * Revision 1.3 87/08/13 17:05:01 hyc
- * Run thru indent, fixed some signed vs. unsigned problems
- * with bp <-> buf, and inbuf and localbuf...
- * Revision 1.2 87/07/21 08:48:16 hyc ***
- * empty log message ***
- *
- */
-
- /*
- * ARC - Archive utility - ARCMATCH
- *
- * Version 2.17, created on 12/17/85 at 20:32:18
- *
- * (C) COPYRIGHT 1985 by System Enhancement Associates; ALL RIGHTS RESERVED
- *
- * By: Thom Henderson
- *
- * Description: This file contains service routines needed to maintain an
- * archive.
- *
- * Language: Computer Innovations Optimizing C86
- */
- #include <stdio.h>
- #include "arc.h"
-
- INT
- match(n, t) /* test name against template */
- char *n; /* name to test */
- char *t; /* template to test against */
- {
- #ifdef MTS
- fortran patbuild(), patmatch(), patfree();
- static int patlen = (-1);
- static int patwork = 0;
- static int patswch = 0;
- char patccid[4];
- static char patchar[2] = "?";
- static char oldtemp[16] = 0;
- int namlen, RETCODE;
-
- if (strcmp(t, oldtemp)) {
- if (patwork)
- patfree(&patwork);
- strcpy(oldtemp, t);
- patlen = strlen(oldtemp);
- patbuild(oldtemp, &patlen, &patwork, &patswch, patccid, patchar, _retcode RETCODE);
- if (RETCODE > 8) {
- printf("MTS: patbuild returned %d\n", RETCODE);
- arc_abort("bad wildcard in filename");
- }
- }
- namlen = strlen(n);
- patmatch(n, &namlen, &patwork, _retcode RETCODE);
- switch (RETCODE) {
- case 0:
- return (1);
- case 4:
- return (0);
- default:
- arc_abort("wildcard pattern match failed");
- }
- }
-
- #else
- #ifndef BSD
- upper(n);
- upper(t); /* avoid case problems */
-
- /* first match name part */
-
- while ((*n && *n != '.') || (*t && *t != '.')) {
- if (*n != *t && *t != '?') { /* match fail? */
- if (*t != '*') /* wildcard fail? */
- return 0; /* then no match */
- else { /* else jump over wildcard */
- while (*n && *n != '.')
- n++;
- while (*t && *t != '.')
- t++;
- break; /* name part matches wildcard */
- }
- } else { /* match good for this char */
- n++; /* advance to next char */
- t++;
- }
- }
-
- if (*n && *n == '.')
- n++; /* skip extension delimiters */
- if (*t && *t == '.')
- t++;
-
- #endif /* BSD */
-
- /* now match name part */
-
- while (*n || *t) {
- if (*n != *t && *t != '?') { /* match fail? */
- if (*t != '*') /* wildcard fail? */
- return 0; /* then no match */
- else
- return 1; /* else good enough */
- } else { /* match good for this char */
- n++; /* advance to next char */
- t++;
- }
- }
-
- return 1; /* match worked */
- }
- #endif
-
- INT
- rempath(nargs, arg) /* remove paths from filenames */
- INT nargs; /* number of names */
- char *arg[]; /* pointers to names */
- {
- char *i, *rindex(); /* string index, reverse indexer */
- INT n; /* index */
-
- for (n = 0; n < nargs; n++) { /* for each supplied name */
- if (!(i = rindex(arg[n], '\\'))) /* search for end of
- * path */
- if (!(i = rindex(arg[n], '/')))
- i = rindex(arg[n], ':');
- if (i) /* if path was found */
- arg[n] = i + 1; /* then skip it */
- }
- }
-