55 lines
856 B
C
55 lines
856 B
C
#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;
|
|
}
|