Lines Matching refs:pattern
191 skipinterp(const char *pattern, const char *stoppers)
194 while (*pattern && (!stoppers || !strchr(stoppers,*pattern))) {
197 printf("skipinterp till %s at %s\r\n",stoppers?stoppers:"",pattern);
199 if (*pattern == '%' && pattern[1]) {
200 switch (*++pattern) {
202 for (pattern++; *pattern && *pattern != '}'; pattern++)
203 if (*pattern == '\\')
204 pattern++;
208 pattern = skipinterp(pattern+1,"!=");
209 if (!*pattern)
211 for (pattern++; *pattern && *pattern != '?'; pattern++)
212 if (*pattern == '\\')
213 pattern++;
214 if (!*pattern)
216 pattern = skipinterp(pattern+1,":)");
217 if (*pattern == ':')
218 pattern = skipinterp(pattern+1,")");
224 pattern = skipinterp(pattern+1,"`");
230 pattern = skipinterp(pattern+1,"\"");
236 pattern++;
239 if (*pattern == '^' && pattern[1])
240 pattern += 2;
241 else if (*pattern == '\\' && pattern[1])
242 pattern += 2;
244 pattern++;
248 return __UNCONST(pattern); /* where we left off */
270 dointerp(char *dest, size_t destsize, const char *pattern, const char *stoppers)
279 while (*pattern && (!stoppers || !strchr(stoppers,*pattern))) {
282 printf("dointerp till %s at %s\r\n",stoppers?stoppers:"",pattern);
284 if (*pattern == '%' && pattern[1]) {
288 switch (*++pattern) {
296 pattern = cpytill(scrbuf,pattern+1,'}');
308 pattern = dointerp(dest,destsize,pattern+1,"!=");
309 rch = *pattern;
311 pattern++;
312 if (*pattern != '=')
314 pattern = cpytill(scrbuf,pattern+1,'?');
315 if (!*pattern)
324 pattern = dointerp(dest,destsize,pattern+1,":)");
325 if (*pattern == ':')
326 pattern = skipinterp(pattern+1,")");
329 pattern = skipinterp(pattern+1,":)");
330 if (*pattern == ':')
331 pattern++;
332 pattern = dointerp(dest,destsize,pattern,")");
342 pattern = dointerp(scrbuf,(sizeof scrbuf),pattern+1,"`");
370 pattern = dointerp(scrbuf,(sizeof scrbuf),pattern+1,"\"");
412 *dest++ = *pattern | metabit;
419 pattern++;
453 if (*pattern == '^' && pattern[1]) {
454 ++pattern; /* skip uparrow */
455 i = *pattern; /* get char into a register */
468 pattern++;
470 else if (*pattern == '\\' && pattern[1]) {
471 ++pattern; /* skip backslash */
472 i = *pattern; /* get char into a register */
478 while (i < 01000 && *pattern >= '0' && *pattern <= '7') {
480 i += *pattern++ - '0';
483 --pattern;
497 pattern++;
500 *dest++ = *pattern++ | metabit;
505 return __UNCONST(pattern); /* where we left off */
509 interp(char *dest, size_t destsize, const char *pattern)
511 (void) dointerp(dest,destsize,pattern,NULL);