123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include "mk.h"
- int
- match(char *name, char *template, char *stem)
- {
- Rune r;
- int n;
- while(*name && *template){
- n = chartorune(&r, template);
- if (PERCENT(r))
- break;
- while (n--)
- if(*name++ != *template++)
- return 0;
- }
- if(!PERCENT(*template))
- return 0;
- n = strlen(name)-strlen(template+1);
- if (n < 0)
- return 0;
- if (strcmp(template+1, name+n))
- return 0;
- strncpy(stem, name, n);
- stem[n] = 0;
- if(*template == '&')
- return !charin(stem, "./");
- return 1;
- }
- void
- subst(char *stem, char *template, char *dest, int dlen)
- {
- Rune r;
- char *s, *e;
- int n;
- e = dest+dlen-1;
- while(*template){
- n = chartorune(&r, template);
- if (PERCENT(r)) {
- template += n;
- for (s = stem; *s; s++)
- if(dest < e)
- *dest++ = *s;
- } else
- while (n--){
- if(dest < e)
- *dest++ = *template;
- template++;
- }
- }
- *dest = 0;
- }
|