word* copynwords(word *a, word *tail, int n) { word *v = 0, **end; for(end=&v;a && n-- != 0;a = a->next,end=&(*end)->next) *end = newword(a->word, 0); *end = tail; return v; } word* subwords(word *val, int len, word *sub, word *a) { int n, m; char *s; if(!sub) return a; s = sub->word; deglob(s); a = subwords(val, len, sub->next, a); n = 0; m = 0; while('0'<=*s && *s<='9') n = n*10+ *s++ -'0'; if(*s++ == '-'){ if(*s) while('0'<=*s && *s<='9') m = m*10+ *s++ -'0'; else m = len; m -= n; } if(n<1 || lennext; return copynwords(val, a, m+1); }