Annotation of 43BSDReno/contrib/isode-beta/others/quipu/uips/fred/MH-patches, revision 1.1.1.1

1.1       root        1: [ MH-patches - Tue Jul 18 00:47:38 1989 - WP patches to MH - /mtr ]
                      2: 
                      3: 
                      4: Here are patches to MH 6.5 to allow send/whom to expand names into addresses.
                      5: 
                      6:      The user specifies a name by bracketing a WhitePages query between
                      7:      '<<' and '>>' using fred's whois syntax, e.g.,
                      8: 
                      9:        To: << rose -org nyser >>
                     10: 
                     11:      At the "What now?" prompt, the user can say "whom" to have the
                     12:      names expanded into addresses.  Alternately, the "send" option can
                     13:      be used as well.  For each query appearing between '<<' and '>>',
                     14:      fred will be asked to perform a white pages resolution.  All
                     15:      matches are printed and the user is asked to select one.  If one is
                     16:      not selected, the user remains with fred, to make more queries,
                     17:      until eventually one is selected (or the user exits fred to abort
                     18:      the expansion process).
                     19: 
                     20:      Note that expansion can occur only if whom/send is invoked
                     21:      interactively.  If you use push, then the expansion will fail
                     22:      because fred will be unable to query you to select/confirm the
                     23:      right entry to use for the substitution.
                     24: 
                     25:      To enable these patches, add "options WP" to your MH config file,
                     26:      run mhconfig, apply the patches, and then do "make" from the
                     27:      top-level.  Note that this code has only been tested with
                     28: 
                     29:        #undef  BERK
                     30: 
                     31:      in effect.  I believe that it should work okay, but since I don't
                     32:      run with BERK defined, I have no way of knowing.
                     33: 
                     34: /mtr
                     35: diff -c sbr/*addrsbr.c
                     36: diff -c uip/_post.c uip/post.c
                     37: diff -c uip/*whom.c
                     38: diff -c uip/*whatnowsbr.c
                     39: diff -c zotnet/mf/*mf.c
                     40: *** sbr/:addrsbr.c     Mon Oct 30 17:22:49 1989
                     41: --- sbr/addrsbr.c      Sat Nov  4 22:18:39 1989
                     42: ***************
                     43: *** 103,108 ****
                     44: --- 103,117 ----
                     45:   
                     46:   char   *getusr ();
                     47:   
                     48: + 
                     49: + #ifdef       WP
                     50: + int  do_wp = 0;
                     51: + 
                     52: + #ifdef       BERK
                     53: + char   *wp_expand ();
                     54: + #endif
                     55: + #endif
                     56: + 
                     57:   /*  */
                     58:   
                     59:   char   *getname (addrs)
                     60: ***************
                     61: *** 171,176 ****
                     62: --- 180,214 ----
                     63:       while ( (c = *addrs++) == ',' || isspace(c))
                     64:        ;
                     65:       
                     66: + #ifdef       WP
                     67: +     if (do_wp && c == '<' && *addrs == '<') {
                     68: +      register char  *cp,
                     69: +                     *dp,
                     70: +                     *ep;
                     71: + 
                     72: +      if (cp = index (++addrs, '>')) {
                     73: +          *++cp = NULL;
                     74: +          if (dp = wp_expand (addrs, NULLCP)) {
                     75: +              *(addrs - 1) = NULL;
                     76: +              ep = concat (saved_addr, dp, cp, NULLCP);
                     77: +              addrs = ep + strlen (saved_addr);
                     78: +              while ((c = *addrs++) == ',' || isspace (c))
                     79: +                  continue;
                     80: +              free (saved_addr);
                     81: +              saved_addr = ep;
                     82: +              free (dp);
                     83: +          }
                     84: +          else {
                     85: +              err = "unable to expand WhitePages query";
                     86: +              (void) strcpy (adrtext, addrs);
                     87: +              addrs = cp;
                     88: +              goto out;
                     89: +          }
                     90: +          
                     91: +      }
                     92: +     }
                     93: + #endif
                     94: + 
                     95:       *nxtout = *adrcopy = '\0';
                     96:       while (state != EOA) {
                     97:        *adrcopy++ = c;
                     98: ***************
                     99: *** 267,280 ****
                    100:        * addr points to where we should start scanning next time.
                    101:        */
                    102:       *(nxtout-1) = *(adrcopy-1) = '\0';
                    103:       if (*adr && !err) {
                    104:        adr_ptr = addrs-1;
                    105: -      return adrtext;
                    106:       } else {
                    107:        free (saved_addr);
                    108:        adr_ptr = NULL;
                    109: -      return NULL;
                    110:       }
                    111:   #else        not BERK
                    112:       register struct adrx *ap;
                    113:   
                    114: --- 305,320 ----
                    115:        * addr points to where we should start scanning next time.
                    116:        */
                    117:       *(nxtout-1) = *(adrcopy-1) = '\0';
                    118: + #ifdef       WP
                    119: + out: ;
                    120: + #endif
                    121:       if (*adr && !err) {
                    122:        adr_ptr = addrs-1;
                    123:       } else {
                    124:        free (saved_addr);
                    125:        adr_ptr = NULL;
                    126:       }
                    127: +     return adrtext;
                    128:   #else        not BERK
                    129:       register struct adrx *ap;
                    130:   
                    131: ***************
                    132: *** 825,827 ****
                    133: --- 865,1013 ----
                    134:   
                    135:       return 0;
                    136:   }
                    137: + 
                    138: + /*  */
                    139: + 
                    140: + #ifdef       WP
                    141: + #include <signal.h>
                    142: + 
                    143: + 
                    144: + static char *fredproc = NULL;
                    145: + 
                    146: + 
                    147: + char   *wp_expand (query, error)
                    148: + char   *query,
                    149: +        *error;
                    150: + {
                    151: +     register int    cc,
                    152: +                  i,
                    153: +                  vecp;
                    154: +     int     (*istat) (), (*qstat) (), (*pstat) ();
                    155: +     register char  *bp,
                    156: +                 *cp;
                    157: +     char   *ep,
                    158: +          buffer[BUFSIZ],
                    159: +          fds[10],
                    160: +         *vec[10];
                    161: +     static int child_id = NOTOK,
                    162: +          pdi[2],
                    163: +          pdo[2];
                    164: + 
                    165: +     if (error)
                    166: +      (void) strcpy (error, "unable to expand WhitePages query: ");
                    167: + 
                    168: +     if (child_id == NOTOK || kill (child_id, 0) == NOTOK) {
                    169: +      if (!isatty (fileno (stdout))) {
                    170: +          if (error)
                    171: +              (void) strcat (error, "not a tty");
                    172: +          return NULLCP;
                    173: +      }
                    174: + 
                    175: +      if (fredproc == NULL && (fredproc = m_find ("fredproc")) == NULL)
                    176: +          fredproc = "fred";
                    177: + 
                    178: +      if (pipe (pdi) == NOTOK) {
                    179: +          if (error)
                    180: +              (void) strcat (error, "unable to pipe");
                    181: + 
                    182: +          return NULLCP;
                    183: +      }
                    184: + 
                    185: +      if (pipe (pdo) == NOTOK) {
                    186: +          if (error)
                    187: +              (void) strcat (error, "unable to pipe");
                    188: + 
                    189: + losing: ;
                    190: +          (void) close (pdi[0]);
                    191: +          (void) close (pdi[1]);
                    192: +          return NULLCP;
                    193: +      }
                    194: + 
                    195: +      for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
                    196: +          sleep (5);
                    197: + 
                    198: +      switch (child_id) {
                    199: +          case NOTOK:
                    200: +              if (error)
                    201: +                  (void) strcat (error, "unable to fork");
                    202: + 
                    203: +              (void) close (pdo[0]);
                    204: +              (void) close (pdo[1]);
                    205: +              goto losing;
                    206: + 
                    207: +          case OK:
                    208: +              (void) close (pdi[0]);
                    209: +              (void) close (pdo[1]);
                    210: +              (void) sprintf (fds, "%d %d", pdo[0], pdi[1]);
                    211: +              vecp = 0;
                    212: +              vec[vecp++] = r1bindex (fredproc, '/');
                    213: +              vec[vecp++] = "-q";
                    214: +              vec[vecp++] = fds;
                    215: +              vec[vecp] = NULL;
                    216: +              execvp (fredproc, vec);
                    217: +              _exit (-1);             /* NOTREACHED */
                    218: + 
                    219: +          default:
                    220: +              (void) close (pdi[1]);
                    221: +              (void) close (pdo[0]);
                    222: +              break;
                    223: +      }
                    224: +     }
                    225: + 
                    226: +     istat = signal (SIGINT, SIG_IGN);
                    227: +     qstat = signal (SIGQUIT, SIG_IGN);
                    228: + 
                    229: +     pstat = signal (SIGPIPE, SIG_IGN);
                    230: + 
                    231: +     (void) sprintf (buffer, "%s\n", query);
                    232: +     cc = write (pdo[1], buffer, i = strlen (buffer));
                    233: + 
                    234: +     (void) signal (SIGPIPE, pstat);
                    235: + 
                    236: +     if (cc != i) {
                    237: +      if (error)
                    238: +          (void) strcat (error, "write to pipe failed");
                    239: + 
                    240: + lost_child: ;
                    241: +      (void) kill (child_id, SIGTERM);
                    242: +      (void) close (pdi[0]);
                    243: +      (void) close (pdo[1]);
                    244: + 
                    245: +      child_id = NOTOK;
                    246: +      return NULLCP;
                    247: +     }
                    248: + 
                    249: +     for (ep = (bp = buffer) + sizeof buffer - 1;
                    250: +           (i = read (pdi[0], bp, ep - bp)) > 0; ) {
                    251: +      for (cp = bp + i; bp < cp; bp++)
                    252: +          if (*bp == '\n')
                    253: +              break;
                    254: +      if (bp < cp)
                    255: +          break;
                    256: +     }
                    257: + 
                    258: +     (void) signal (SIGINT, istat);
                    259: +     (void) signal (SIGQUIT, qstat);
                    260: + 
                    261: +     if (i == NOTOK) {
                    262: +      if (error)
                    263: +          (void) strcat (error, "read from pipe failed");
                    264: +      goto lost_child;
                    265: +     }
                    266: +     if (i == 0) {
                    267: +      if (error)
                    268: +          (void) sprintf (error + strlen (error), "%s exited prematurely",
                    269: +                          fredproc);
                    270: +      goto lost_child;
                    271: +     }
                    272: +     *bp = NULL;
                    273: + 
                    274: +     if (error)
                    275: +      if (bp != buffer)
                    276: +          error[0]  = NULL;
                    277: +      else
                    278: +          (void) strcpy (error, "unable to expand WhitePages query");
                    279: + 
                    280: +     return (*buffer ? getcpy (buffer) : NULLCP);
                    281: + }
                    282: + #endif
                    283: *** uip/_post.c        Mon Oct 30 17:22:54 1989
                    284: --- uip/post.c Tue Aug  8 20:28:58 1989
                    285: ***************
                    286: *** 91,97 ****
                    287:   #define      NWATCSW 17
                    288:       "nowatch", 0,
                    289:   
                    290: ! #define      WHOMSW  18      /* interface from whom */
                    291:       "whom", -4,              
                    292:   
                    293:   #define      WIDTHSW 19
                    294: --- 91,97 ----
                    295:   #define      NWATCSW 17
                    296:       "nowatch", 0,
                    297:   
                    298: ! #define      WHOMSW  18              /* interface from whom */
                    299:       "whom", -4,              
                    300:   
                    301:   #define      WIDTHSW 19
                    302: ***************
                    303: *** 122,127 ****
                    304: --- 122,130 ----
                    305:   #define      SNOOPSW 29
                    306:       "snoop", -5,
                    307:   
                    308: + #define      FILLSW  30
                    309: +     "fill-in file", -7,
                    310: + 
                    311:       NULL, NULL
                    312:   };
                    313:   
                    314: ***************
                    315: *** 284,289 ****
                    316: --- 287,298 ----
                    317:   static int  encryptsw = 0;   /* encrypt it */
                    318:   
                    319:   
                    320: + #ifdef       WP
                    321: + extern int   do_wp;          /* fill-in white pages queries */
                    322: + #endif
                    323: + static char    *fill_in = NULLCP;
                    324: + 
                    325: + 
                    326:   long lseek (), time ();
                    327:   
                    328:   /*    MAIN */
                    329: ***************
                    330: *** 486,491 ****
                    331: --- 495,507 ----
                    332:                    snoop++;
                    333:                    continue;
                    334:   #endif       SENDMTS
                    335: + 
                    336: +              case FILLSW:
                    337: + #ifdef       WP
                    338: +                  if (!(fill_in = *argp++) || *fill_in == '-')
                    339: +                      adios (NULLCP, "missing argument to %s", argp[-2]);
                    340: + #endif
                    341: +                  continue;
                    342:            }
                    343:        if (msg)
                    344:            adios (NULLCP, "only one message at a time!");
                    345: ***************
                    346: *** 494,499 ****
                    347: --- 510,518 ----
                    348:       }
                    349:   
                    350:       (void) alias (AliasFile);
                    351: + #ifdef       WP
                    352: +     do_wp++;
                    353: + #endif
                    354:   
                    355:   /*  */
                    356:   
                    357: ***************
                    358: *** 534,540 ****
                    359:       else
                    360:   #endif       MHMTS
                    361:        if (whomsw) {
                    362: !          if ((out = fopen ("/dev/null", "w")) == NULL)
                    363:                adios ("/dev/null", "unable to open");
                    364:        }
                    365:        else {
                    366: --- 553,559 ----
                    367:       else
                    368:   #endif       MHMTS
                    369:        if (whomsw) {
                    370: !          if ((out = fopen (fill_in ? fill_in : "/dev/null", "w")) == NULL)
                    371:                adios ("/dev/null", "unable to open");
                    372:        }
                    373:        else {
                    374: ***************
                    375: *** 575,581 ****
                    376:            case BODY: 
                    377:            case BODYEOF: 
                    378:                finish_headers (out);
                    379: !              if (whomsw)
                    380:                    break;
                    381:                fprintf (out, "\n%s", buf);
                    382:                while (state == BODY) {
                    383: --- 594,600 ----
                    384:            case BODY: 
                    385:            case BODYEOF: 
                    386:                finish_headers (out);
                    387: !              if (whomsw && !fill_in)
                    388:                    break;
                    389:                fprintf (out, "\n%s", buf);
                    390:                while (state == BODY) {
                    391: ***************
                    392: *** 699,709 ****
                    393:       }
                    394:   
                    395:       hdr = &hdrtab[i];
                    396: !     if (hdr -> flags & HIGN)
                    397:        return;
                    398:       if (hdr -> flags & HBAD) {
                    399: !      advise (NULLCP, "illegal header line -- %s:", name);
                    400: !      badmsg++;
                    401:        return;
                    402:       }
                    403:       msgflags |= (hdr -> set & ~(MVIS | MINV));
                    404: --- 718,735 ----
                    405:       }
                    406:   
                    407:       hdr = &hdrtab[i];
                    408: !     if (hdr -> flags & HIGN) {
                    409: !      if (fill_in)
                    410: !          fprintf (out, "%s: %s", name, str);
                    411:        return;
                    412: +     }
                    413:       if (hdr -> flags & HBAD) {
                    414: !      if (fill_in)
                    415: !          fprintf (out, "%s: %s", name, str);
                    416: !      else {
                    417: !          advise (NULLCP, "illegal header line -- %s:", name);
                    418: !          badmsg++;
                    419: !      }
                    420:        return;
                    421:       }
                    422:       msgflags |= (hdr -> set & ~(MVIS | MINV));
                    423: ***************
                    424: *** 711,716 ****
                    425: --- 737,747 ----
                    426:       if (hdr -> flags & HSUB)
                    427:        subject = subject ? add (str, add ("\t", subject)) : getcpy (str);
                    428:       if (hdr -> flags & HFCC) {
                    429: +      if (fill_in) {
                    430: +          fprintf (out, "%s: %s", name, str);
                    431: +          return;
                    432: +      }
                    433: + 
                    434:        if (cp = rindex (str, '\n'))
                    435:            *cp = NULL;
                    436:        for (cp = pp = str; cp = index (pp, ','); pp = cp) {
                    437: ***************
                    438: *** 759,765 ****
                    439:   
                    440:       nameoutput = linepos = 0;
                    441:       (void) sprintf (namep, "%s%s",
                    442: !          (hdr -> flags & HMNG) ? "Original-" : "", name);
                    443:   
                    444:       for (grp = 0, mp = tmpaddrs.m_next; mp; mp = np)
                    445:        if (mp -> m_nohost) {   /* also used to test (hdr -> flags & HTRY) */
                    446: --- 790,797 ----
                    447:   
                    448:       nameoutput = linepos = 0;
                    449:       (void) sprintf (namep, "%s%s",
                    450: !                  !fill_in && (hdr -> flags & HMNG) ? "Original-" : "",
                    451: !                  name);
                    452:   
                    453:       for (grp = 0, mp = tmpaddrs.m_next; mp; mp = np)
                    454:        if (mp -> m_nohost) {   /* also used to test (hdr -> flags & HTRY) */
                    455: ***************
                    456: *** 810,817 ****
                    457:        advise (NULLCP, "%s: field does not allow groups", name);
                    458:        badmsg++;
                    459:       }
                    460: !     if (linepos)
                    461:        (void) putc ('\n', out);
                    462:   }
                    463:   
                    464:   /*  */
                    465: --- 842,852 ----
                    466:        advise (NULLCP, "%s: field does not allow groups", name);
                    467:        badmsg++;
                    468:       }
                    469: !     if (linepos) {
                    470: !      if (fill_in && grp > 0)
                    471: !          (void) putc (';', out);
                    472:        (void) putc ('\n', out);
                    473: +     }
                    474:   }
                    475:   
                    476:   /*  */
                    477: ***************
                    478: *** 942,948 ****
                    479:   
                    480:       if (mp -> m_mbox == NULL || ((flags & HTRY) && !insert (mp)))
                    481:        return 0;
                    482: !     if ((flags & HBCC) || mp -> m_ingrp)
                    483:        return 1;
                    484:   
                    485:       if (!nameoutput) {
                    486: --- 977,983 ----
                    487:   
                    488:       if (mp -> m_mbox == NULL || ((flags & HTRY) && !insert (mp)))
                    489:        return 0;
                    490: !     if (!fill_in && ((flags & HBCC) || mp -> m_ingrp))
                    491:        return 1;
                    492:   
                    493:       if (!nameoutput) {
                    494: ***************
                    495: *** 953,959 ****
                    496:       if (*aka && mp -> m_type != UUCPHOST && !mp -> m_pers)
                    497:        mp -> m_pers = getcpy (aka);
                    498:       if (format) {
                    499: !      if (mp -> m_gname)
                    500:            (void) sprintf (cp = buffer, "%s;", mp -> m_gname);
                    501:        else
                    502:            cp = adrformat (mp);
                    503: --- 988,994 ----
                    504:       if (*aka && mp -> m_type != UUCPHOST && !mp -> m_pers)
                    505:        mp -> m_pers = getcpy (aka);
                    506:       if (format) {
                    507: !      if (mp -> m_gname && !fill_in)
                    508:            (void) sprintf (cp = buffer, "%s;", mp -> m_gname);
                    509:        else
                    510:            cp = adrformat (mp);
                    511: ***************
                    512: *** 987,1004 ****
                    513:       int     len;
                    514:       char   *cp;
                    515:   
                    516: !     if (flags & HBCC)
                    517:        return;
                    518:   
                    519:       if (!nameoutput) {
                    520:        fprintf (out, "%s: ", name);
                    521:        linepos += (nameoutput = strlen (name) + 2);
                    522:       }
                    523:   
                    524: !     cp = concat (group, ";", NULLCP);
                    525:       len = strlen (cp);
                    526:   
                    527: !     if (linepos != nameoutput)
                    528:        if (len + linepos + 2 > outputlinelen) {
                    529:            fprintf (out, ",\n%*s", nameoutput, "");
                    530:            linepos = nameoutput;
                    531: --- 1022,1041 ----
                    532:       int     len;
                    533:       char   *cp;
                    534:   
                    535: !     if (!fill_in && (flags & HBCC))
                    536:        return;
                    537:   
                    538:       if (!nameoutput) {
                    539:        fprintf (out, "%s: ", name);
                    540:        linepos += (nameoutput = strlen (name) + 2);
                    541: +      if (fill_in)
                    542: +          linepos -= strlen (group);
                    543:       }
                    544:   
                    545: !     cp = fill_in ? group : concat (group, ";", NULLCP);
                    546:       len = strlen (cp);
                    547:   
                    548: !     if (linepos > nameoutput)
                    549:        if (len + linepos + 2 > outputlinelen) {
                    550:            fprintf (out, ",\n%*s", nameoutput, "");
                    551:            linepos = nameoutput;
                    552: *** uip/_whom.c        Mon Oct 30 17:22:52 1989
                    553: --- uip/whom.c Mon Jul 17 09:22:31 1989
                    554: ***************
                    555: *** 35,40 ****
                    556: --- 35,43 ----
                    557:   #define      SNOOPSW 10
                    558:       "snoop", -5,
                    559:   
                    560: + #define      FILLSW  11
                    561: +     "fill-in file", -7,
                    562: + 
                    563:       NULL, NULL
                    564:   };
                    565:   
                    566: ***************
                    567: *** 125,130 ****
                    568: --- 128,134 ----
                    569:                case ALIASW: 
                    570:                case CLIESW: 
                    571:                case SERVSW: 
                    572: +              case FILLSW:
                    573:                    vec[vecp++] = --cp;
                    574:                    if (!(cp = *argp++) || *cp == '-')
                    575:                        adios (NULLCP, "missing argument to %s", argp[-2]);
                    576: *** uip/_whatnowsbr.c  Mon Oct 30 17:22:57 1989
                    577: --- uip/whatnowsbr.c   Mon Jul 17 12:04:19 1989
                    578: ***************
                    579: *** 758,764 ****
                    580: --- 758,773 ----
                    581:       int     pid;
                    582:       register int    vecp;
                    583:       char   *vec[MAXARGS];
                    584: + #ifdef       WP
                    585: +     char   *cp,
                    586: +          draft[BUFSIZ],
                    587: +          backup[BUFSIZ];
                    588: + #endif
                    589:   
                    590: + #ifdef       WP
                    591: +     (void) strcpy (draft, m_scratch (file, invo_name));
                    592: + #endif
                    593: + 
                    594:       m_update ();
                    595:       (void) fflush (stdout);
                    596:   
                    597: ***************
                    598: *** 774,779 ****
                    599: --- 783,792 ----
                    600:            if (arg)
                    601:                while (*arg)
                    602:                    vec[vecp++] = *arg++;
                    603: + #ifdef       WP
                    604: +          vec[vecp++] = "-fill-in";
                    605: +          vec[vecp++] = draft;
                    606: + #endif
                    607:            vec[vecp] = NULL;
                    608:   
                    609:            execvp (whomproc, vec);
                    610: ***************
                    611: *** 782,787 ****
                    612: --- 795,822 ----
                    613:            _exit (-1);         /* NOTREACHED */
                    614:   
                    615:        default: 
                    616: + #ifndef      WP
                    617:            return (pidwait (pid, NOTOK) & 0377 ? 1 : 0);
                    618: + #else
                    619: +          if (pidwait (pid, NOTOK)) {
                    620: +              (void) unlink (draft);
                    621: +              return 1;
                    622: +          }
                    623: +          break;
                    624: + #endif
                    625:       }
                    626: + 
                    627: + #ifdef       WP
                    628: +     if (rename (file, cp = m_backup (file)) == NOTOK) {
                    629: +      advise (cp, "unable to rename %s to", file);
                    630: +      (void) unlink (draft);
                    631: +      return 1;
                    632: +     }
                    633: +     if (rename (draft, file) == NOTOK) {
                    634: +      advise (file, "unable to rename %s to ", draft);
                    635: +      return 1;
                    636: +     }
                    637: + 
                    638: +     return 0;
                    639: + #endif
                    640:   }
                    641: *** zotnet/mf/_mf.c    Mon Oct 30 17:22:59 1989
                    642: --- zotnet/mf/mf.c     Mon Oct 30 20:32:38 1989
                    643: ***************
                    644: *** 298,303 ****
                    645: --- 298,306 ----
                    646:   
                    647:   #define      QUOTE   '\\'
                    648:   
                    649: + #ifdef       WP
                    650: + #define      LX_WP   (-1)
                    651: + #endif
                    652:   #define      LX_END  0
                    653:   #define      LX_ERR  1
                    654:   #define      LX_ATOM 2
                    655: ***************
                    656: *** 351,361 ****
                    657: --- 354,375 ----
                    658:   
                    659:   static struct adrx  adrxs2;
                    660:   
                    661: + 
                    662: + #ifdef       WP
                    663: + char   *concat ();
                    664: + 
                    665: + extern int   do_wp;
                    666: + char   *wp_expand ();
                    667: + #endif
                    668: + 
                    669:   /*  */
                    670:   
                    671:   struct adrx *getadrx (addrs)
                    672:   register char   *addrs;
                    673:   {
                    674: + #ifdef       WP
                    675: +     int          save_lex;
                    676: + #endif
                    677:       register char   *bp;
                    678:       register struct adrx *adrxp = &adrxs2;
                    679:   
                    680: ***************
                    681: *** 385,390 ****
                    682: --- 399,427 ----
                    683:            return NULL;
                    684:        }
                    685:   
                    686: + #ifdef       WP
                    687: +     bp = cp, save_lex = last_lex;
                    688: +     if (my_lex (adr) == LX_WP) {
                    689: +      register char *ep,
                    690: +                    *fp;
                    691: + 
                    692: +      if (fp = wp_expand (adr, err)) {
                    693: +          *bp = NULL;
                    694: +          ep = concat (dp, fp, cp, (char *) NULL);
                    695: +          cp = ep + strlen (dp), last_lex = save_lex;
                    696: +          free (dp);
                    697: +          dp = ep;
                    698: +          free (fp);
                    699: +      }
                    700: +      else {
                    701: +          ap = bp, save_lex = last_lex;
                    702: +          goto out;
                    703: +      }
                    704: +     }
                    705: +     else
                    706: +      cp = bp, last_lex = save_lex;
                    707: + #endif
                    708: + 
                    709:       switch (parse_address ()) {
                    710:        case DONE:
                    711:            free (dp);
                    712: ***************
                    713: *** 409,414 ****
                    714: --- 446,454 ----
                    715:            break;
                    716:        }
                    717:   
                    718: + #ifdef       WP
                    719: + out: ;
                    720: + #endif
                    721:       if (err[0])
                    722:        for (;;) {
                    723:            switch (last_lex) {
                    724: ***************
                    725: *** 798,803 ****
                    726: --- 838,858 ----
                    727:        cp = NULL;
                    728:        return (last_lex = LX_END);
                    729:       }
                    730: + 
                    731: + #ifdef       WP
                    732: +     if (do_wp && c == '<' && *cp == '<')
                    733: +      for (cp++;;)
                    734: +          switch (c = *cp++) {
                    735: +              case '>':
                    736: +                  *bp = NULL;
                    737: +                  cp++;
                    738: +                  return (last_lex = LX_WP);
                    739: + 
                    740: +              default:
                    741: +                  *bp++ = c;
                    742: +                  continue;
                    743: +          }
                    744: + #endif
                    745:   
                    746:       if (c == '(')
                    747:        for (*bp++ = c, i = 0;;)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.