405 ep += 32;
406 continue;
407 }
408 return (0);
409 /*FALLTHRU*/
410
411 case NCCL:
412 neg = 1;
413 /*FALLTHRU*/
414
415 case CCL:
416 c = *lp++;
417 if (((c & 0200) == 0 && ISTHERE(c)) ^ neg) {
418 ep += 16;
419 continue;
420 }
421 return (0);
422 /*FALLTHRU*/
423
424 case CBRA:
425 braslist[*ep++] = (char *)lp;
426 continue;
427 /*FALLTHRU*/
428
429 case CKET:
430 braelist[*ep++] = (char *)lp;
431 continue;
432 /*FALLTHRU*/
433
434 case CCHR | RNGE:
435 c = *ep++;
436 getrnge(ep);
437 while (low--)
438 if (*lp++ != c)
439 return (0);
440 curlp = lp;
441 while (size--)
442 if (*lp++ != c)
443 break;
444 if (size < 0)
445 lp++;
446 ep += 2;
447 goto star;
448 /*FALLTHRU*/
449
450 case CDOT | RNGE:
488 case CCL | RNGE:
489 getrnge(ep + 16);
490 while (low--) {
491 c = *lp++;
492 if (((c & 0200) || !ISTHERE(c)) ^ neg)
493 return (0);
494 }
495 curlp = lp;
496 while (size--) {
497 c = *lp++;
498 if (((c & 0200) || !ISTHERE(c)) ^ neg)
499 break;
500 }
501 if (size < 0)
502 lp++;
503 ep += 18; /* 16 + 2 */
504 goto star;
505 /*FALLTHRU*/
506
507 case CBACK:
508 bbeg = braslist[*ep];
509 ct = braelist[*ep++] - bbeg;
510
511 if (ecmp(bbeg, lp, ct)) {
512 lp += ct;
513 continue;
514 }
515 return (0);
516 /*FALLTHRU*/
517
518 case CBACK | STAR:
519 bbeg = braslist[*ep];
520 ct = braelist[*ep++] - bbeg;
521 curlp = lp;
522 while (ecmp(bbeg, lp, ct))
523 lp += ct;
524
525 while (lp >= curlp) {
526 if (advance(lp, ep))
527 return (1);
528 lp -= ct;
529 }
530 return (0);
531 /*FALLTHRU*/
532
533 case CDOT | STAR:
534 curlp = lp;
535 while (*lp++);
536 goto star;
537 /*FALLTHRU*/
538
539 case CCHR | STAR:
540 curlp = lp;
|
405 ep += 32;
406 continue;
407 }
408 return (0);
409 /*FALLTHRU*/
410
411 case NCCL:
412 neg = 1;
413 /*FALLTHRU*/
414
415 case CCL:
416 c = *lp++;
417 if (((c & 0200) == 0 && ISTHERE(c)) ^ neg) {
418 ep += 16;
419 continue;
420 }
421 return (0);
422 /*FALLTHRU*/
423
424 case CBRA:
425 braslist[(int)*ep++] = (char *)lp;
426 continue;
427 /*FALLTHRU*/
428
429 case CKET:
430 braelist[(int)*ep++] = (char *)lp;
431 continue;
432 /*FALLTHRU*/
433
434 case CCHR | RNGE:
435 c = *ep++;
436 getrnge(ep);
437 while (low--)
438 if (*lp++ != c)
439 return (0);
440 curlp = lp;
441 while (size--)
442 if (*lp++ != c)
443 break;
444 if (size < 0)
445 lp++;
446 ep += 2;
447 goto star;
448 /*FALLTHRU*/
449
450 case CDOT | RNGE:
488 case CCL | RNGE:
489 getrnge(ep + 16);
490 while (low--) {
491 c = *lp++;
492 if (((c & 0200) || !ISTHERE(c)) ^ neg)
493 return (0);
494 }
495 curlp = lp;
496 while (size--) {
497 c = *lp++;
498 if (((c & 0200) || !ISTHERE(c)) ^ neg)
499 break;
500 }
501 if (size < 0)
502 lp++;
503 ep += 18; /* 16 + 2 */
504 goto star;
505 /*FALLTHRU*/
506
507 case CBACK:
508 bbeg = braslist[(int)*ep];
509 ct = braelist[(int)*ep++] - bbeg;
510
511 if (ecmp(bbeg, lp, ct)) {
512 lp += ct;
513 continue;
514 }
515 return (0);
516 /*FALLTHRU*/
517
518 case CBACK | STAR:
519 bbeg = braslist[(int)*ep];
520 ct = braelist[(int)*ep++] - bbeg;
521 curlp = lp;
522 while (ecmp(bbeg, lp, ct))
523 lp += ct;
524
525 while (lp >= curlp) {
526 if (advance(lp, ep))
527 return (1);
528 lp -= ct;
529 }
530 return (0);
531 /*FALLTHRU*/
532
533 case CDOT | STAR:
534 curlp = lp;
535 while (*lp++);
536 goto star;
537 /*FALLTHRU*/
538
539 case CCHR | STAR:
540 curlp = lp;
|