home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 4 / 4023 < prev    next >
Internet Message Format  |  1991-09-10  |  44KB

  1. Path: wupost!zaphod.mps.ohio-state.edu!rpi!crdgw1!barnett
  2. From: barnett@grymoire.crd.ge.com (Bruce Barnett)
  3. Newsgroups: alt.sources
  4. Subject: Official Ease 3.3 patch 3
  5. Message-ID: <BARNETT.91Sep9131214@grymoire.crd.ge.com>
  6. Date: 9 Sep 91 17:12:14 GMT
  7. Sender: news@crdgw1.crd.ge.com
  8. Reply-To: barnett@crdgw1.ge.com
  9. Distribution: alt
  10. Organization: GE Corp. R & D, Schenectady, NY
  11. Lines: 1515
  12.  
  13. History:
  14.     Ease is a high level language for sendmail .cf files
  15.     You can ftp ease from gatekeeper.dec.com
  16.  
  17.     This is the official Patch 3 for Ease.
  18.     It converts Ease 3.2 into Ease 3.3
  19.     Apply with
  20.  
  21.     patch -p <Patch3
  22.  
  23. Fixes:
  24.     bug with systems compiled without DATA_RW (systems that cannot
  25.     write into data segments).
  26.  
  27.     Better cf->ease->cf conversion with $? $| $. constructs,
  28.     especially Ying-Da Lee's sample sendmail.cf file
  29.     
  30.  
  31.  
  32.  
  33.  
  34. diff -r -c ./CONVERTING ../3.2/CONVERTING
  35. *** ./CONVERTING    Mon Sep  9 12:19:42 1991
  36. --- ../3.2/CONVERTING    Thu May 16 12:38:45 1991
  37. ***************
  38. *** 40,49 ****
  39.       CGI IRIS
  40.           => cfc -i -C FKSVN  
  41.   
  42. -     smail
  43. -         => cfc -C DUET
  44.   Step 2.  Convert the ease file to cf: 
  45.   
  46.       % et <sendmail.ease >sendmail.cf
  47. --- 40,45 ----
  48. diff -r -c ./Makefile ../3.2/Makefile
  49. *** ./Makefile    Mon Sep  9 12:43:20 1991
  50. --- ../3.2/Makefile    Thu May 16 12:43:04 1991
  51. ***************
  52. *** 1,9 ****
  53. ! #    $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/RCS/Makefile,v 3.3 1991/09/09 16:41:11 barnett Exp $
  54.   #
  55.   #    $Log: Makefile,v $
  56. - # Revision 3.3  1991/09/09  16:41:11  barnett
  57. - # added '-' to /bin/rm in "make all"
  58. - #
  59.   # Revision 3.2  1991/05/16  10:51:13  barnett
  60.   # Fixed a few typos and added the MAKE variable
  61.   #
  62. --- 1,6 ----
  63. ! #    $Header: /home/kreskin/u0/barnett/Src/ease/RCS/Makefile,v 3.2 1991/05/16 10:51:13 barnett Exp $
  64.   #
  65.   #    $Log: Makefile,v $
  66.   # Revision 3.2  1991/05/16  10:51:13  barnett
  67.   # Fixed a few typos and added the MAKE variable
  68.   #
  69. ***************
  70. *** 64,70 ****
  71.       cd src; ${MAKE} ${MFLAGS} $@
  72.       cd cfc; ${MAKE} ${MFLAGS} $@
  73.       cd utils; ${MAKE} ${MFLAGS} $@
  74. !     -/bin/rm all
  75.   
  76.   
  77.   debug:    all sendmail.ease
  78. --- 61,67 ----
  79.       cd src; ${MAKE} ${MFLAGS} $@
  80.       cd cfc; ${MAKE} ${MFLAGS} $@
  81.       cd utils; ${MAKE} ${MFLAGS} $@
  82. !     /bin/rm all
  83.   
  84.   
  85.   debug:    all sendmail.ease
  86. Only in .: Patch3
  87. diff -r -c ./README ../3.2/README
  88. *** ./README    Mon Sep  9 12:51:43 1991
  89. --- ../3.2/README    Thu May 16 12:38:20 1991
  90. ***************
  91. *** 1,5 ****
  92. ! This is release 3.3 of the CFC and Ease programs.
  93.   
  94.   Ease is a compiler for sendmail configuration files.  It reads a high-level
  95.   mail configuration language and produces a sendmail.cf file.  If you've ever
  96.   stared at a sendmail.cf, you know why this is valuable.
  97. --- 1,7 ----
  98. ! README - Tue May  1 14:46:33 PDT 1990
  99.   
  100. + This is release 3.2 of the CFC and Ease programs.
  101.   Ease is a compiler for sendmail configuration files.  It reads a high-level
  102.   mail configuration language and produces a sendmail.cf file.  If you've ever
  103.   stared at a sendmail.cf, you know why this is valuable.
  104. ***************
  105. *** 31,38 ****
  106.       Matt Heffron <heffron@falstaff.css.beckman.com>
  107.       William Roberts <liam@cs.qmw.ac.uk>
  108.       rainer@flyer.uni-duisburg.de (Rainer Bieniek)
  109. -     agq@dstos3.dsto.oz.au (Ashleigh Quick)
  110.   Cfc was written by Arnold D. Robbins, and has been enhanced by Bruce Barnett
  111.   (see below).
  112.   
  113. --- 33,38 ----
  114. ***************
  115. *** 42,58 ****
  116.   
  117.       -----------------------------------------------------------
  118.   
  119. !             Ease 3.3 Release Notes:
  120. !         Bruce Barnett <barnett@crdgw1.ge.com>
  121. !             July 1991
  122.   
  123. ! I sent some patches to the authors of Ease several years ago, but they never 
  124. ! released them. I now have their permission to be the current maintainer of 
  125. ! Ease and cfc.  Most of the changes to Ease since 2.0 have been mine, with some generous patches sent in from the people described above.
  126.   
  127. ! The main enhancement I added to Ease 3.0:
  128.   
  129.   
  130.       I subjected the Cfc/Ease programs to a test suite
  131.       that converted *.cf files to ease files, and back again.
  132.       I compared the input of cfc  (The original .cf file)
  133. --- 42,64 ----
  134.   
  135.       -----------------------------------------------------------
  136.   
  137. !         Ease 3.2 and cfc Release Notes:
  138. !         Bruce Barnett barnett@crdgw1.ge.com
  139. !         May 1991
  140.   
  141. ! This document describes Ease 3.2. This version was originally a
  142. ! modified version of the last official release of ease 2.1. I called it
  143. ! 2.1 Beta and sent it to several dozen people. I sent the patches to the authors
  144. ! of ease and cfc, but an updated version was never posted to the net.
  145. ! The authors have decided to let me post the changes, so I guess I have
  146. ! the baton now.
  147.   
  148. ! Since this is a major release, I decided to call it Ease 3.0
  149. ! Two updates have been release since then.
  150.   
  151. + The main feature of Ease/Cfc 3.2:
  152.   
  153.       I subjected the Cfc/Ease programs to a test suite
  154.       that converted *.cf files to ease files, and back again.
  155.       I compared the input of cfc  (The original .cf file)
  156. ***************
  157. *** 71,77 ****
  158.   langauge and feel confident that you won't break anything.
  159.       
  160.   
  161. ! Current status of Ease 3.3
  162.       It will handle 100% of the standard Ultrix, SunOS, HP, and Berkeley
  163.       versions of sendmail (I hope). It handles 99.5% of the IDA
  164.       enhancement package. It compiles of dozens of different machines.
  165. --- 77,83 ----
  166.   langauge and feel confident that you won't break anything.
  167.       
  168.   
  169. ! Current status of Ease 3.2
  170.       It will handle 100% of the standard Ultrix, SunOS, HP, and Berkeley
  171.       versions of sendmail (I hope). It handles 99.5% of the IDA
  172.       enhancement package. It compiles of dozens of different machines.
  173. ***************
  174. *** 205,219 ****
  175.   
  176.   Release Notes:
  177.   
  178. -     3.3:
  179. -         Support for $? $| $. on LHS
  180. -             added warning if $. is missing
  181. -         Support for $? after $#
  182. -         Fix DATA_RW compile option
  183. -         Eliminate warnings about "LOCAL" and "ERROR" 
  184. -             mailers being undefined. Case doesn't matter.
  185. -             but I don't want to convert to lower because the cfdiff
  186. -             might complain
  187.       3.2:
  188.       Added better support for IDA sendmail
  189.       Added better support for unusual values in mailer flags, and options
  190. --- 211,216 ----
  191. ***************
  192. *** 231,249 ****
  193.   Release 3.0:
  194.       First release of Bruce's changes to the net in alt.sources
  195.   
  196. - NOTE:
  197. - on some systems, you will get the warning:
  198. -     make: Warning: Infinite loop: Target `lexdefs.h' depends on itself
  199. - This is okay. If the line was removed, Make wouldn't work on other machines.
  200.   ============================================================================
  201.   
  202.   If you find these programs useful, or if you have suggestions or changes,
  203.   please drop me a line. I would really appreciate any patches to this
  204. ! package. I will merge any patches and release new versions, as they
  205.   are sent to me. 
  206.   
  207.       Bruce Barnett
  208. --- 228,239 ----
  209.   Release 3.0:
  210.       First release of Bruce's changes to the net in alt.sources
  211.   
  212.   ============================================================================
  213.   
  214.   If you find these programs useful, or if you have suggestions or changes,
  215.   please drop me a line. I would really appreciate any patches to this
  216. ! package, as I don't plan any major upgrade to support all of the IDA
  217. ! extensions. I will merge any patches and release new versions, as they
  218.   are sent to me. 
  219.   
  220.       Bruce Barnett
  221. diff -r -c ./TODO ../3.2/TODO
  222. *** ./TODO    Fri Sep  6 15:02:32 1991
  223. --- ../3.2/TODO    Thu May 16 12:38:28 1991
  224. ***************
  225. *** 3,51 ****
  226.   
  227.   Keyed databases definitions (OKP/usr/lib/aliases) should not need an asm()
  228.   
  229. ! Fix the following constructs so that cfc/et handles the conversion properly:
  230.   
  231.   HReceived: from $?s$s$|localhost$. by $w$?r with $r$.
  232.       id $i; $b; sendmail $v/$V
  233.       (from $f for $u)
  234.   
  235. ! DMroot
  236. ! T$M
  237.   
  238. - Eliminate the concat() construct, if possible.
  239.   check for if (exactly_one) next($2); type error.
  240.   check for matching < and > in rulesets
  241.   Check for mailers "local" and "prog" 
  242. - Add the new IDA/sendmail macro $m
  243. -     A new macro, $m, has been defined.  For single recipients in
  244. -     a local mail delivery, it's value is the original address before
  245. -     aliasing.  If all recipients for the current transaction derive
  246. -     from a single original recipient, use that for $m.  Else make
  247. -     $m undefined (to preserve Bcc: privacy).
  248. -     The Received header now has 'for $m' in place of 'for $u'.  The
  249. -     new code release supports $m as the recipient prior to aliasing.
  250. -     This will not cause any problems with earlier code releases, except
  251. -     that the 'for user' will no appear on the header unless you change
  252. -     this back to $u.
  253. - Add the IDA Os option:
  254. -     If Os (SuperSafe) is set in the sendmail.cf file, files in the spool
  255. -     area will either be open()ed with O_SYNC set or fsync()ed prior
  256. -     to close.
  257. - IDA:
  258. -     Simon J Gerraty (sjg@melb.bull.oz.au) contributed patch for SUN's
  259. -     $%x and $!x features ($!x added as $^x).
  260. -     * delayed macro evaluation using $&x syntax
  261. -     * RFC822 quoted macro expansion using $!x syntax
  262.   
  263.   CFC improvements
  264.       Make it a real two-pass parser. This way, it can
  265. --- 3,22 ----
  266.   
  267.   Keyed databases definitions (OKP/usr/lib/aliases) should not need an asm()
  268.   
  269. ! Ignore case when checking for mailer names existance
  270. !         (local vs. LOCAL)
  271.   
  272. + Fix the following construct so that cfc/et handles the conversion properly:
  273.   HReceived: from $?s$s$|localhost$. by $w$?r with $r$.
  274.       id $i; $b; sendmail $v/$V
  275.       (from $f for $u)
  276.   
  277. ! Eliminate the concat() construct.
  278.   
  279.   check for if (exactly_one) next($2); type error.
  280.   check for matching < and > in rulesets
  281.   Check for mailers "local" and "prog" 
  282.   
  283.   CFC improvements
  284.       Make it a real two-pass parser. This way, it can
  285. Common subdirectories: ./cfc and ../3.2/cfc
  286. Common subdirectories: ./debug and ../3.2/debug
  287. Common subdirectories: ./doc and ../3.2/doc
  288. Common subdirectories: ./src and ../3.2/src
  289. Common subdirectories: ./test and ../3.2/test
  290. Common subdirectories: ./utils and ../3.2/utils
  291. diff -r -c ./cfc/cfc.c ../3.2/cfc/cfc.c
  292. *** ./cfc/cfc.c    Mon Sep  9 12:44:10 1991
  293. --- ../3.2/cfc/cfc.c    Thu May 16 12:43:01 1991
  294. ***************
  295. *** 1,12 ****
  296.   #ifndef lint
  297. ! static char RCSid[] = "$Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/cfc/RCS/cfc.c,v 3.3 1991/09/09 16:34:44 barnett Exp $";
  298.   #endif
  299.   
  300.   /*
  301.    * $Log: cfc.c,v $
  302. -  * Revision 3.3  1991/09/09  16:34:44  barnett
  303. -  * Bug fixes. Better handling of those $? conditionals.
  304. -  *
  305.    * Revision 3.2  1991/05/16  10:49:33  barnett
  306.    * Support for IDA databases
  307.    * More tolerant handling of unusual conditions
  308. --- 1,9 ----
  309.   #ifndef lint
  310. ! static char RCSid[] = "$Header: /home/kreskin/u0/barnett/Src/ease/cfc/RCS/cfc.c,v 3.2 1991/05/16 10:49:33 barnett Exp $";
  311.   #endif
  312.   
  313.   /*
  314.    * $Log: cfc.c,v $
  315.    * Revision 3.2  1991/05/16  10:49:33  barnett
  316.    * Support for IDA databases
  317.    * More tolerant handling of unusual conditions
  318. ***************
  319. *** 141,147 ****
  320.               "warning: ignoring non-flag command line arguments\n");
  321.   
  322.       printf ("/***********************************************************/\n");
  323. !     printf ("/* This ease file generated by cfc version $Revision: 3.3 $*/\n");
  324.       printf ("/* automatically from a sendmail.cf file                   */\n");
  325.       printf ("/* It may need to be edited before feeding to ease.        */\n");
  326.       printf ("/***********************************************************/\n");
  327. --- 138,144 ----
  328.               "warning: ignoring non-flag command line arguments\n");
  329.   
  330.       printf ("/***********************************************************/\n");
  331. !     printf ("/* This ease file generated by cfc version $Revision: 3.2 $*/\n");
  332.       printf ("/* automatically from a sendmail.cf file                   */\n");
  333.       printf ("/* It may need to be edited before feeding to ease.        */\n");
  334.       printf ("/***********************************************************/\n");
  335. ***************
  336. *** 429,444 ****
  337.                   conditional++;ifset++;
  338.                   break;
  339.               case '|':
  340. !                 if ( ! conditional) complain("in left hand side of rule, found a '$|' without a previous '$?'");
  341.                   if ( ifset) {
  342. !                     /* I don't think I have to output a ", " */
  343. !                     /* but let's test */
  344. !                     if ( quoting ) 
  345. !                       printf("\", \""); 
  346. !                     else
  347. !                       printf(", ");
  348.                   } else {
  349. !                     complain("in left hand side of rule, found a '$|' without a previous '$?'");
  350.                       putchar (',');
  351.                   }
  352.                   break;
  353. --- 426,436 ----
  354.                   conditional++;ifset++;
  355.                   break;
  356.               case '|':
  357. !                 if ( ! conditional) die("lhs - $| without $?");
  358.                   if ( ifset) {
  359. !                     printf("\", \"");
  360.                   } else {
  361. !                     fprintf(stderr,"Got $| when not in ifset\n");
  362.                       putchar (',');
  363.                   }
  364.                   break;
  365. ***************
  366. *** 508,519 ****
  367.           putchar ('"');
  368.       while (open--)
  369.           putchar (')');
  370. !     if (conditional) { 
  371. !         /* the lhs was missing a $. - let's add one automatically */
  372. !         complain ("Expected '$.' on left hand side of rule - adding one anyway");
  373. !         putchar (')');
  374. !         conditional--;ifset--;
  375. !     }
  376.       printf (")");
  377.   }
  378.   
  379. --- 500,507 ----
  380.           putchar ('"');
  381.       while (open--)
  382.           putchar (')');
  383. !     if (conditional)
  384. !         die ("lhs");
  385.       printf (")");
  386.   }
  387.   
  388. ***************
  389. *** 610,620 ****
  390.                 quoting++;
  391.                 break;
  392.               case '|':
  393. !               if ( ! conditional) complain("right side of rule - found '$|' without '$?'");
  394.                 if ( ifset) {
  395.                 printf("\", \"");
  396.                 } else {
  397. !               complain("right side of rule - found '$|' without '$?'");
  398.                 putchar (',');
  399.                 }
  400.                 break;
  401. --- 598,608 ----
  402.                 quoting++;
  403.                 break;
  404.               case '|':
  405. !               if ( ! conditional) die("rhs - $| without $?");
  406.                 if ( ifset) {
  407.                 printf("\", \"");
  408.                 } else {
  409. !               fprintf(stderr,"Got $| when not in ifset\n");
  410.                 putchar (',');
  411.                 }
  412.                 break;
  413. ***************
  414. *** 622,628 ****
  415.                 if (ifset && quoting ) {
  416.                 putchar('"'); quoting--;
  417.                 }
  418. !               if (! ifset ) complain("right side of rule - found '$.' without '$?'");
  419.                 putchar (')');
  420.                 if (open) {
  421.                 putchar(')');
  422. --- 610,616 ----
  423.                 if (ifset && quoting ) {
  424.                 putchar('"'); quoting--;
  425.                 }
  426. !               if (! ifset ) fprintf(stderr,"Got $. while not in ifset\n");
  427.                 putchar (')');
  428.                 if (open) {
  429.                 putchar(')');
  430. ***************
  431. *** 704,710 ****
  432.                   printf ("${%s}", macro (*cp));
  433.                 else
  434.                   printf ("$%s", macro (*cp));
  435. !               } else { /* not in ifset() */
  436.                 if (quoting)
  437.                   printf ("${%s}", macro (*cp));
  438.                 else 
  439. --- 692,698 ----
  440.                   printf ("${%s}", macro (*cp));
  441.                 else
  442.                   printf ("$%s", macro (*cp));
  443. !               } else { /* not not in ifset() */
  444.                 if (quoting)
  445.                   printf ("${%s}", macro (*cp));
  446.                 else 
  447. ***************
  448. *** 760,770 ****
  449.   {
  450.       int quoting = 0;
  451.       int open = 0;
  452. -     int ifset = 0;
  453.       char *addrops;
  454.       addrops = ".:;%@!=/[]?#^,<>$"; /* should be defined from input file */
  455.       printf ("resolve (mailer (");
  456. !     /* this is a simple (idiotic) parser (hack) that scans the right
  457.          hand side of a $# rule
  458.          The format is usually
  459.          "$# mailer $@ host $: user" or
  460. --- 748,764 ----
  461.   {
  462.       int quoting = 0;
  463.       int open = 0;
  464.       char *addrops;
  465.       addrops = ".:;%@!=/[]?#^,<>$"; /* should be defined from input file */
  466.       printf ("resolve (mailer (");
  467. ! /*  if (strncmp (cp+1, "local", 5) == 0
  468. !     || strncmp (cp+1, "error", 5) == 0
  469. !     || strncmp (cp+1, "LOCAL", 5) == 0
  470. !     || strncmp (cp+1, "ERROR", 5) == 0)
  471. !     goto skiphost;
  472. ! loop1:
  473. ! */
  474. !     /* this is a simple parser that scans the right
  475.          hand side of a $# rule
  476.          The format is usually
  477.          "$# mailer $@ host $: user" or
  478. ***************
  479. *** 783,789 ****
  480.          */
  481.       /* pointing to '#' */
  482.       cp++;
  483. -     while( *cp == ' ') cp++; /* skip blanks */
  484.       /* output any character not a '$' */
  485.       while (cp && *cp && *cp != '$' ) {
  486.       /* skip spaces in the mailer field */
  487. --- 777,782 ----
  488. ***************
  489. *** 790,797 ****
  490.       if ( *cp != ' ' ) putchar(*cp); 
  491.       cp++;
  492.       }
  493. -   parsehost:
  494. -     while (cp && *cp && *cp == ' ') cp++;    /* advance to non-blank */
  495.       if (!cp || !*cp ) goto out;
  496.       /* currently pointing to a "$" */
  497.       /* we may now be pointing to:
  498. --- 783,788 ----
  499. ***************
  500. *** 800,832 ****
  501.          or a macro
  502.          or nothing?! (*cp == 0);
  503.          /* don't look at the '$' */
  504. !     if (*cp == '$') {
  505. !     cp++;    /* skip past $, expect a '@' */
  506. !     } else {
  507. !       fprintf(stderr,
  508. !           "Error: found %c when expecting a '$' on line %d\n",
  509. !           *cp,line);
  510. !     }
  511.       if (!cp || !*cp ) goto out;
  512.       if (*cp  == ':') goto parseuser;
  513. -     if (*cp == '?' ) {    /* handle $#$?G$@....$:...$|$@...$:...$. */
  514. -     cp++;
  515. -     printf ("),  ifset (%s,\n\t\t\t\t(", macro (*cp++));
  516. -     ifset++;
  517. -     while (cp && *cp && *cp == ' ') cp++;    /* advance to non-blank */
  518. -     if ( *cp == '$') {
  519. -         cp++;
  520. -     } else {
  521. -       fprintf(stderr,
  522. -           "Error: found %c when expecting a '$' on line %d\n",
  523. -           *cp,line);
  524. -     }
  525. -     }
  526.       if (*cp != '@' ) {
  527.       /* must be a macro name */
  528.       printf ("$%s",macro(*cp++));
  529.       /* now skip to the $@ */
  530. ! /*    if (!cp || !*cp ) goto out; */
  531.       while (cp && *cp && *cp == ' ') cp++;
  532.       if (!cp || !*cp ) goto out;
  533.       if (*cp == '$') cp++; 
  534. --- 791,804 ----
  535.          or a macro
  536.          or nothing?! (*cp == 0);
  537.          /* don't look at the '$' */
  538. !     cp++;
  539.       if (!cp || !*cp ) goto out;
  540.       if (*cp  == ':') goto parseuser;
  541.       if (*cp != '@' ) {
  542.       /* must be a macro name */
  543.       printf ("$%s",macro(*cp++));
  544.       /* now skip to the $@ */
  545. !     if (!cp || !*cp ) goto out;
  546.       while (cp && *cp && *cp == ' ') cp++;
  547.       if (!cp || !*cp ) goto out;
  548.       if (*cp == '$') cp++; 
  549. ***************
  550. *** 845,854 ****
  551.       cp++;
  552.       }
  553.       /* print host name ($@host ) */
  554. !     if (ifset)
  555. !       printf (" host (");
  556. !     else
  557. !       printf ("),\n\t\t\t\thost (");
  558.       for (;cp && *cp;cp++) {
  559.       if (*cp != '$') { 
  560.           putchar (*cp);
  561. --- 817,823 ----
  562.       cp++;
  563.       }
  564.       /* print host name ($@host ) */
  565. !     printf ("),\n\t\t\t\thost (");
  566.       for (;cp && *cp;cp++) {
  567.       if (*cp != '$') { 
  568.           putchar (*cp);
  569. ***************
  570. *** 905,911 ****
  571.       } else {    /* not quoting */
  572.           if ( *cp == '$' ) {
  573.           cp++;
  574. -         /* Could be $|, or $>, or $macro */
  575.           if (*cp == '>' ) { /* IDA sendmail */
  576.               cp++;
  577.               printf("retry (RULESET_");
  578. --- 874,879 ----
  579. ***************
  580. *** 912,941 ****
  581.               while (cp && *cp && *cp >= '0' && *cp <= '9') putchar(*cp++);
  582.               printf("("); open++;
  583.               open++;
  584. -         } else if ( *cp == '|') {
  585. -             /* This is the middle of an ifset */
  586. -             if ( ! ifset ) {
  587. -             fprintf(stderr,
  588. -                 "Found a '$|' in the user address without a '$?' on line %d\n",
  589. -                 *cp,line);
  590. -             cp++; /* ignore */
  591. -             } else { /* I expected this */
  592. -             printf(")),\n\t\t\t\t(");
  593. -             cp++;
  594. -             goto parsehost;
  595. -             }
  596. -         } else if ( *cp == '.') {
  597. -             /* This is the END of an ifset */
  598. -             if ( ! ifset ) {
  599. -             fprintf(stderr,
  600. -                 "Found a '$.' in the user address without a '$?' on line %d\n",
  601. -                 *cp,line);
  602. -             cp++; /* ignore */
  603. -             } else { /* I expected this */
  604. -             /* cp++; */ /* Don't do this, the for loop increments cp */
  605. -             printf("))");
  606. -             ifset = 0;
  607. -             }
  608.           } else {
  609.               putchar ('$'); /* print $ */
  610.               printf("%s",macro(*cp)); /* and macro */
  611. --- 880,885 ----
  612. ***************
  613. *** 952,963 ****
  614.       }
  615.       if (quoting) printf("\"");
  616.     out:
  617. -     if (ifset) {
  618. -     fprintf(stderr,
  619. -         "EOL while expecting '$.' on line  %d\n",
  620. -                 line);
  621. -     ifset = 0;
  622. -     }
  623.       while (open--) printf(")");
  624.       printf ("))");
  625.   } /* end parseresolve () */
  626. --- 896,901 ----
  627. ***************
  628. *** 1037,1043 ****
  629.                   if ( ifset) {
  630.                       printf("\", \"");
  631.                   } else {
  632. !                     complain("Got $| when not in ifset\n");
  633.                       putchar (',');
  634.                   }
  635.                   break;
  636. --- 975,981 ----
  637.                   if ( ifset) {
  638.                       printf("\", \"");
  639.                   } else {
  640. !                     fprintf(stderr,"Got $| when not in ifset\n");
  641.                       putchar (',');
  642.                   }
  643.                   break;
  644. ***************
  645. *** 1313,1323 ****
  646.       register char *cp = buffer + 1;
  647.       register int flags = 0;
  648.       register int conditional = 0;
  649. !     register int concat = 0;    /* true if in a concat( */
  650. !     register int needcomma = 0;    /* true if a concat is needed */
  651.       register int quote = 0;
  652. !     register int ifset = 0;        /* true if in a ifset 
  653. !                        (may be inside a concat) */
  654.   
  655.       printf ("header\n\t");
  656.       if (*cp == '?')        /* header for mailers  with these flags */
  657. --- 1251,1259 ----
  658.       register char *cp = buffer + 1;
  659.       register int flags = 0;
  660.       register int conditional = 0;
  661. !     register int concat = 0;
  662.       register int quote = 0;
  663. !     register int ifset = 0;
  664.   
  665.       printf ("header\n\t");
  666.       if (*cp == '?')        /* header for mailers  with these flags */
  667. ***************
  668. *** 1345,1354 ****
  669.       else if (cp && ! *cp ) printf("\", \"\"");
  670.       else if (!cp) {
  671.           printf("\"");
  672. !         complain("I didn't expect this!\n");
  673.       }
  674.   
  675. !     quote = concat = conditional = ifset = needcomma = 0;
  676.   body:
  677.       while (cp && *cp)
  678.       {
  679. --- 1281,1290 ----
  680.       else if (cp && ! *cp ) printf("\", \"\"");
  681.       else if (!cp) {
  682.           printf("\"");
  683. !         fprintf(stderr,"I didn't expect this!\n");
  684.       }
  685.   
  686. !     quote = concat = conditional = ifset = 0;
  687.   body:
  688.       while (cp && *cp)
  689.       {
  690. ***************
  691. *** 1356,1425 ****
  692.           case '$':
  693.               switch (*++cp) {
  694.               case '?':
  695. -                 /* if we are in the middle of a quote, end it */
  696. -                 if (quote) {
  697. -                 printf("\"");quote--;needcomma=1;
  698. -                 }
  699.                   /* if we are not in a concat, then start one */
  700.                   if ( ! concat ) {
  701. -                 if (needcomma) printf(", ");
  702.                   printf("concat (");
  703. !                 concat++;needcomma=0;
  704. !                 }  else { /* we are in a concat  */
  705. !                 if ( ifset ) { /* if in ifset(..) terminate */
  706. !                     printf("), concat ("); 
  707. !                     ifset--;needcomma=0;
  708. !                 } else {
  709. !                     /* otherwise - don't terminate the concat */
  710. !                     /* but add a comma to seperate the fields */
  711. !                     /* what do do if concat(X, */
  712. !                     /* if so, then don't put the comma */
  713. !                     /* instead - check needcomma */
  714. ! /*                    printf(", "); */
  715.                   }
  716.                   }
  717. !                 if ( ifset ) {
  718. !                 complain("found '$?' before terminating previous '$?' with a '$.'");
  719.                   }
  720. -                 if (needcomma) {
  721. -                 printf(", ");
  722. -                 needcomma=0;
  723. -                 }
  724.                   printf ("ifset (%s, \"", macro (*++cp));
  725.                   conditional++; quote++;ifset++;
  726.                   break;
  727.               case '|':
  728. !                 if (quote) {
  729. !                 putchar('"');quote--;
  730. !                 }
  731. !                 if ( ! conditional) complain("header - $| without $?");
  732. !                 if ( ifset) {
  733. !                 printf(", "); needcomma=0;
  734. !                 } else {
  735. !                 complain("Got '$|' without matching '$?'");
  736. !                 putchar (','); needcomma=0;
  737. !                 }
  738.                   break;
  739.               case '.':
  740.                   if (quote) {
  741.                   putchar('"');quote--;
  742.                   }
  743. -                 if (!ifset ) {
  744. -                 complain("found '$.' without matching '$?'");
  745. -                 }
  746.                   putchar (')');
  747.                   conditional--;ifset--;
  748.                   if (concat) {
  749.                   /* this is messy - There may be more than one $? on a line */
  750. -                 /* and the line may continue on to the next line. */
  751.   
  752. !                 if (*(cp+1)) { /* if there is more on the line */
  753. !                     putchar(')');concat--;
  754. !                     printf(", ");needcomma=0;
  755. !                 } else { 
  756. !                     /* may need to print a comma - delay decision */
  757. !                     /* see continuation line handler */
  758. !                     putchar(')');concat--;needcomma=1;
  759.                   }
  760.                   }
  761.                   break;
  762. --- 1292,1333 ----
  763.           case '$':
  764.               switch (*++cp) {
  765.               case '?':
  766.                   /* if we are not in a concat, then start one */
  767.                   if ( ! concat ) {
  768.                   printf("concat (");
  769. !                 concat++;
  770. !                 }  else { /* we are in one */
  771. !                 if (quote) {
  772. !                     printf("\"");quote--;
  773.                   }
  774. +                 printf("), concat (");
  775.                   }
  776. !                 if (quote) {
  777. !                 printf("\",");quote--;
  778.                   }
  779.                   printf ("ifset (%s, \"", macro (*++cp));
  780.                   conditional++; quote++;ifset++;
  781.                   break;
  782.               case '|':
  783. !                 if ( ! conditional) die("header - $| without $?");
  784. !                 if ( ifset) {
  785. !                     printf("\", \"");
  786. !                 } else {
  787. !                     fprintf(stderr,"Got $| when not in ifset\n");
  788. !                     putchar (',');
  789. !                 }
  790.                   break;
  791.               case '.':
  792.                   if (quote) {
  793.                   putchar('"');quote--;
  794.                   }
  795.                   putchar (')');
  796.                   conditional--;ifset--;
  797.                   if (concat) {
  798.                   /* this is messy - There may be more than one $? on a line */
  799.   
  800. !                 if (cp+1) { /* if there is more on the line */
  801. !                     printf(", ");
  802.                   }
  803.                   }
  804.                   break;
  805. ***************
  806. *** 1428,1439 ****
  807.                   if (!concat && (strlen(cp)>2) 
  808.                   && (*(cp+1) == '$')
  809.                   && (*(cp+2) == '?')) {
  810. -                 if ( quote) {
  811. -                     printf("\", ");
  812. -                     quote--;needcomma=0;
  813. -                 }
  814.                   printf ("concat (\"${%s}\", ", macro (*cp));
  815. !                 /* I'm in a concat */
  816.                   concat++;
  817.                   } else {
  818.                   if (!quote) {
  819. --- 1336,1343 ----
  820.                   if (!concat && (strlen(cp)>2) 
  821.                   && (*(cp+1) == '$')
  822.                   && (*(cp+2) == '?')) {
  823.                   printf ("concat (\"${%s}\", ", macro (*cp));
  824. !                 /* I'm gonna need a concat */
  825.                   concat++;
  826.                   } else {
  827.                   if (!quote) {
  828. ***************
  829. *** 1466,1479 ****
  830.           line++;
  831.           if (buffer[0] == '\t')
  832.           {
  833. -             if ( concat ) {
  834. -                 printf("), ");needcomma=0;
  835. -                 concat--;
  836. -             }
  837. -             if (needcomma) {
  838. -                 printf(", ");
  839. -                 needcomma=0;
  840. -             }
  841.               if ( ! quote ) {
  842.                   putchar('"');
  843.                   quote++;
  844. --- 1370,1375 ----
  845. ***************
  846. *** 1584,1597 ****
  847.               routine, line);
  848.       exit (1);
  849.   }
  850. - complain (problem)
  851. - char *problem;
  852. - {
  853. -     fprintf (stderr, "Warning: malformed input line %d: %s\n",
  854. -             line, problem);
  855. -     fflush(stderr);
  856. -     fflush(stdout);
  857. -     }
  858.   
  859.   /* macro --- return name for sendmail predefined macro */
  860.   
  861. --- 1480,1485 ----
  862. ***************
  863. *** 1684,1697 ****
  864.       case 'z':    /* The home directory of the recipient */
  865.           return ("m_rhdir");
  866.   
  867. !         case '"':    /* you can get a quote character in some macro definitions */
  868.           return ("\\\"");
  869.       default:
  870. -         if (!(isalpha(c) || isdigit(c))) /* if not a digit or letter */
  871. -           fprintf (stderr,
  872. -                "warning: expected letter as macro definition, found '%c' on line %d\n",
  873. -                c, line);
  874.           buf[0] = c;
  875.           return (buf);
  876.       }
  877. --- 1572,1580 ----
  878.       case 'z':    /* The home directory of the recipient */
  879.           return ("m_rhdir");
  880.   
  881. !         case '"':    /* you can get a quote charater in some macro definitions */
  882.           return ("\\\"");
  883.       default:
  884.           buf[0] = c;
  885.           return (buf);
  886.       }
  887. diff -r -c ./doc/Makefile ../3.2/doc/Makefile
  888. *** ./doc/Makefile    Thu Jun 27 10:48:17 1991
  889. --- ../3.2/doc/Makefile    Thu May 16 12:38:22 1991
  890. ***************
  891. *** 45,51 ****
  892.   install:
  893.       install -c ease.man $(MANDEST)/ease.${EXT}
  894.       install -c et.man $(MANDEST)/et.${EXT}
  895. !     install -c cfc.man $(MANDEST)/cfc.${EXT}
  896.   
  897.   printman: ease.man et.man cfc.man
  898.       ${ROFF} -man ease.man
  899. --- 45,51 ----
  900.   install:
  901.       install -c ease.man $(MANDEST)/ease.${EXT}
  902.       install -c et.man $(MANDEST)/et.${EXT}
  903. !     install -c cfc.man $(MANDEST)/cdc.${EXT}
  904.   
  905.   printman: ease.man et.man cfc.man
  906.       ${ROFF} -man ease.man
  907. diff -r -c ./doc/ap2 ../3.2/doc/ap2
  908. *** ./doc/ap2    Mon Sep  9 12:44:53 1991
  909. --- ../3.2/doc/ap2    Thu May 16 12:38:24 1991
  910. ***************
  911. *** 1,10 ****
  912.   ...
  913. ! ... $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/ap2,v 3.3 1991/09/09 16:36:05 barnett Exp $
  914.   ... 
  915.   ... $Log: ap2,v $
  916. - ... Revision 3.3  1991/09/09  16:36:05  barnett
  917. - ... minor bug fixes
  918. - ...
  919.   ... Revision 2.1  1990/01/30  12:57:42  jeff
  920.   ... Made changes corresponding to Ease release 2.1Alpha.
  921.   ... se.
  922. --- 1,7 ----
  923.   ...
  924. ! ... $Header: /home/kreskin/u0/barnett/Src/ease/doc/RCS/ap2,v 2.1 1990/01/30 12:57:42 jeff Exp barnett $
  925.   ... 
  926.   ... $Log: ap2,v $
  927.   ... Revision 2.1  1990/01/30  12:57:42  jeff
  928.   ... Made changes corresponding to Ease release 2.1Alpha.
  929.   ... se.
  930. diff -r -c ./doc/cfc.man ../3.2/doc/cfc.man
  931. *** ./doc/cfc.man    Mon Sep  9 12:44:51 1991
  932. --- ../3.2/doc/cfc.man    Thu May 16 12:38:23 1991
  933. ***************
  934. *** 1,10 ****
  935.   ...
  936. ! ... $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/cfc.man,v 3.3 1991/09/09 16:36:05 barnett Exp $
  937.   ... 
  938.   ... $Log: cfc.man,v $
  939. - ... Revision 3.3  1991/09/09  16:36:05  barnett
  940. - ... minor bug fixes
  941. - ...
  942.   ... Revision 1.2  1990/04/04  15:42:51  jeff
  943.   ... Reformatted somewhat for readability.  Added some bugs
  944.   ... described by Bruce Barnett.
  945. --- 1,7 ----
  946.   ...
  947. ! ... $Header: /home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/cfc.man,v 1.2 1990/04/04 15:42:51 jeff Exp barnett $
  948.   ... 
  949.   ... $Log: cfc.man,v $
  950.   ... Revision 1.2  1990/04/04  15:42:51  jeff
  951.   ... Reformatted somewhat for readability.  Added some bugs
  952.   ... described by Bruce Barnett.
  953. diff -r -c ./doc/cover ../3.2/doc/cover
  954. *** ./doc/cover    Mon Sep  9 12:44:51 1991
  955. --- ../3.2/doc/cover    Thu May 16 12:38:25 1991
  956. ***************
  957. *** 1,10 ****
  958.   ...
  959. ! ... $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/cover,v 3.3 1991/09/09 16:36:05 barnett Exp $
  960.   ...
  961.   ... $Log: cover,v $
  962. - ... Revision 3.3  1991/09/09  16:36:05  barnett
  963. - ... minor bug fixes
  964. - ...
  965.   ... Revision 2.0  1990/01/30  12:50:41  jeff
  966.   ... Baseline version, corresponding to netwide release 2.0.
  967.   ...
  968. --- 1,7 ----
  969.   ...
  970. ! ... $Header: /home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/cover,v 2.0 1990/01/30 12:50:41 jeff Exp barnett $
  971.   ...
  972.   ... $Log: cover,v $
  973.   ... Revision 2.0  1990/01/30  12:50:41  jeff
  974.   ... Baseline version, corresponding to netwide release 2.0.
  975.   ...
  976. diff -r -c ./doc/ease.paper ../3.2/doc/ease.paper
  977. *** ./doc/ease.paper    Mon Sep  9 12:44:52 1991
  978. --- ../3.2/doc/ease.paper    Thu May 16 12:38:27 1991
  979. ***************
  980. *** 1,10 ****
  981.   ...
  982. ! ... $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/ease.paper,v 3.3 1991/09/09 16:36:05 barnett Exp $
  983.   ... 
  984.   ... $Log: ease.paper,v $
  985. - ... Revision 3.3  1991/09/09  16:36:05  barnett
  986. - ... minor bug fixes
  987. - ...
  988.   ... Revision 2.0  1990/01/30  12:50:44  jeff
  989.   ... Baseline version, corresponding to netwide release 2.0.
  990.   ...
  991. --- 1,7 ----
  992.   ...
  993. ! ... $Header: /home/kreskin/u0/barnett/Src/Ease/ease/doc/RCS/ease.paper,v 2.0 1990/01/30 12:50:44 jeff Exp barnett $
  994.   ... 
  995.   ... $Log: ease.paper,v $
  996.   ... Revision 2.0  1990/01/30  12:50:44  jeff
  997.   ... Baseline version, corresponding to netwide release 2.0.
  998.   ...
  999. diff -r -c ./src/Makefile ../3.2/src/Makefile
  1000. *** ./src/Makefile    Mon Sep  9 12:44:34 1991
  1001. --- ../3.2/src/Makefile    Thu May 16 12:43:14 1991
  1002. ***************
  1003. *** 1,11 ****
  1004.   # Makefile for Ease Translator (et).
  1005.   #
  1006. ! #    $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/Makefile,v 3.3 1991/09/09 16:33:23 barnett Exp $
  1007.   #
  1008.   #    $Log: Makefile,v $
  1009. - # Revision 3.3  1991/09/09  16:33:23  barnett
  1010. - # Minor bug fix release
  1011. - #
  1012.   # Revision 3.2  1991/05/16  10:45:25  barnett
  1013.   # Better support for System V machines
  1014.   # Support for machines with read only text segments
  1015. --- 1,8 ----
  1016.   # Makefile for Ease Translator (et).
  1017.   #
  1018. ! #    $Header: /home/kreskin/u0/barnett/Src/ease/src/RCS/Makefile,v 3.2 1991/05/16 10:45:25 barnett Exp $
  1019.   #
  1020.   #    $Log: Makefile,v $
  1021.   # Revision 3.2  1991/05/16  10:45:25  barnett
  1022.   # Better support for System V machines
  1023.   # Support for machines with read only text segments
  1024. ***************
  1025. *** 43,49 ****
  1026.   #             - A sun 3/60 using gcc
  1027.   #         - A esix SysV PC  with gcc
  1028.   #                - A HP9000/845 with cc
  1029. - #         - Apollo/Domain with BSD4.3 environment
  1030.   #           The default is to define it, because this is what earlier versions 
  1031.   #           of Ease did.
  1032.   #
  1033. --- 40,45 ----
  1034. ***************
  1035. *** 56,62 ****
  1036.    
  1037.   DEFS = ${OFLAGS}
  1038.   LIBS = -ll
  1039. - # some people must remove the -O
  1040.   CFLAGS = -O ${DEFS} ${INCLUDE}
  1041.   CC = cc
  1042.   #CC = gcc
  1043. --- 52,57 ----
  1044. ***************
  1045. *** 74,83 ****
  1046.   # Special Debug flags
  1047.   # select this one to debug the grammar
  1048.   #DEFS =-DYYDEBUG
  1049. ! # The following two lines are used with the SunOS malloc() debug package.
  1050.   #DEFS = -DMALLOC_DEBUG    #  Part of the SunOS malloc package
  1051.   #LIBS = /usr/lib/debug/malloc.o -ll
  1052. ! CFLAGS = -g  ${DEFS} ${INCLUDE}
  1053.   
  1054.   
  1055.   HDR = symtab.h
  1056. --- 69,78 ----
  1057.   # Special Debug flags
  1058.   # select this one to debug the grammar
  1059.   #DEFS =-DYYDEBUG
  1060. ! # The following are used with the SunOS malloc() debug package.
  1061.   #DEFS = -DMALLOC_DEBUG    #  Part of the SunOS malloc package
  1062.   #LIBS = /usr/lib/debug/malloc.o -ll
  1063. ! #CFLAGS = -g  ${DEFS} ${INCLUDE}
  1064.   
  1065.   
  1066.   HDR = symtab.h
  1067. diff -r -c ./src/errors.c ../3.2/src/errors.c
  1068. *** ./src/errors.c    Mon Sep  9 12:44:35 1991
  1069. --- ../3.2/src/errors.c    Thu May 16 12:43:16 1991
  1070. ***************
  1071. *** 1,6 ****
  1072.   #ifdef FLUKE
  1073.   # ifndef LINT
  1074. !     static char RCSid[] = "@(#)FLUKE  $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/errors.c,v 2.3 1991/09/09 16:33:23 barnett Exp $";
  1075.   # endif LINT
  1076.   #endif FLUKE
  1077.   
  1078. --- 1,6 ----
  1079.   #ifdef FLUKE
  1080.   # ifndef LINT
  1081. !     static char RCSid[] = "@(#)FLUKE  $Header: /home/kreskin/u0/barnett/Src/ease/src/RCS/errors.c,v 2.2 1991/05/16 10:45:25 barnett Exp $";
  1082.   # endif LINT
  1083.   #endif FLUKE
  1084.   
  1085. ***************
  1086. *** 17,25 ****
  1087.    *    All rights reserved.
  1088.    *
  1089.    * $Log: errors.c,v $
  1090. -  * Revision 2.3  1991/09/09  16:33:23  barnett
  1091. -  * Minor bug fix release
  1092. -  *
  1093.    * Revision 2.2  1991/05/16  10:45:25  barnett
  1094.    * Better support for System V machines
  1095.    * Support for machines with read only text segments
  1096. --- 17,22 ----
  1097. ***************
  1098. *** 91,98 ****
  1099.       if (colon)
  1100.         fputs(": ",DIAGf);
  1101.       fflush(DIAGf);
  1102. -     fflush(stdout);
  1103. -     fflush(stderr); /* just to make sure */
  1104.   }
  1105.   
  1106.   
  1107. --- 88,93 ----
  1108. diff -r -c ./src/idman.c ../3.2/src/idman.c
  1109. *** ./src/idman.c    Fri Sep  6 14:20:15 1991
  1110. --- ../3.2/src/idman.c    Thu May 16 12:38:31 1991
  1111. ***************
  1112. *** 1,6 ****
  1113.   #ifdef FLUKE
  1114.   # ifndef LINT
  1115. !     static char RCSid[] = "@(#)FLUKE  $Header: /home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/idman.c,v 3.1 1991/02/25 22:09:52 barnett Exp barnett $";
  1116.   # endif LINT
  1117.   #endif FLUKE
  1118.   
  1119. --- 1,6 ----
  1120.   #ifdef FLUKE
  1121.   # ifndef LINT
  1122. !     static char RCSid[] = "@(#)FLUKE  $Header: /home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/idman.c,v 3.1 1991/02/25 22:09:52 barnett Exp $";
  1123.   # endif LINT
  1124.   #endif FLUKE
  1125.   
  1126. diff -r -c ./src/parser.y ../3.2/src/parser.y
  1127. *** ./src/parser.y    Mon Sep  9 12:44:40 1991
  1128. --- ../3.2/src/parser.y    Thu May 16 12:43:15 1991
  1129. ***************
  1130. *** 1,7 ****
  1131.   %{
  1132.   #ifdef FLUKE
  1133.   # ifndef LINT
  1134. !     static char RCSid[] = "@(#)FLUKE  $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/parser.y,v 3.3 1991/09/09 16:33:23 barnett Exp $";
  1135.   # endif LINT
  1136.   #endif FLUKE
  1137.   
  1138. --- 1,7 ----
  1139.   %{
  1140.   #ifdef FLUKE
  1141.   # ifndef LINT
  1142. !     static char RCSid[] = "@(#)FLUKE  $Header: /home/kreskin/u0/barnett/Src/ease/src/RCS/parser.y,v 3.2 1991/05/16 10:45:25 barnett Exp $";
  1143.   # endif LINT
  1144.   #endif FLUKE
  1145.   
  1146. ***************
  1147. *** 22,30 ****
  1148.    *    All rights reserved.
  1149.    *
  1150.    * $Log: parser.y,v $
  1151. -  * Revision 3.3  1991/09/09  16:33:23  barnett
  1152. -  * Minor bug fix release
  1153. -  *
  1154.    * Revision 3.2  1991/05/16  10:45:25  barnett
  1155.    * Better support for System V machines
  1156.    * Support for machines with read only text segments
  1157. --- 22,27 ----
  1158. ***************
  1159. *** 72,77 ****
  1160. --- 69,75 ----
  1161.   extern void       FatalError ();
  1162.   extern short RMatch;        /* ruleset match flag               */
  1163.   
  1164. + extern char *strdup(); 
  1165.   #ifdef DATA_RW
  1166.   char *Cbuf = " ";        /* character buffer                 */
  1167.   char *Mbuf = "$ ";        /* macro buffer                        */
  1168. ***************
  1169. *** 78,84 ****
  1170.   #else
  1171.   char *Cbuf = NULL;
  1172.   char *Mbuf = NULL;
  1173. - extern char *Strdup(); 
  1174.   #endif
  1175.   char *Tsb;            /* pointer to temporary string buffer */
  1176.   char *Tsb1;            /* pointer to another temporary string buffer */
  1177. --- 76,81 ----
  1178. ***************
  1179. *** 91,97 ****
  1180.   #ifndef    DATA_RW
  1181.   void InitParser()
  1182.   {
  1183. !     if(!(Cbuf = Strdup(" ")) || !(Mbuf = Strdup("$ ")))
  1184.           FatalError("Out of memory in InitParser()", (char *)NULL);
  1185.   }
  1186.   #endif
  1187. --- 88,94 ----
  1188.   #ifndef    DATA_RW
  1189.   void InitParser()
  1190.   {
  1191. !     if(!(Cbuf = strdup(" ")) || !(Mbuf = strdup("$ ")))
  1192.           FatalError("Out of memory in InitParser()", (char *)NULL);
  1193.   }
  1194.   #endif
  1195. ***************
  1196. *** 107,113 ****
  1197.             fprintf(stderr,"Free() returned an error\n");
  1198.         }
  1199.         }
  1200. -       fflush(stderr);
  1201.     };
  1202.   static char *
  1203.   yydisplay(ch)
  1204. --- 104,109 ----
  1205. ***************
  1206. *** 162,168 ****
  1207.       if (yydebug)
  1208.           printf("[yydebug] reading %s\n",
  1209.               yydisplay(yychar));
  1210. -         fflush(stdout);
  1211.   #endif
  1212.           return yychar;
  1213.       }
  1214. --- 158,163 ----
  1215. ***************
  1216. *** 218,227 ****
  1217.   %type    <optval>    optid
  1218.   %type    <flgval>    flagid
  1219.   %type    <mpval>        mvar
  1220. - %type    <psb>        ifresmatch elseresmatch ifresroute elseresroute 
  1221. - /* needed special class with no comma's allowed */
  1222. - %type    <ival>        anycharbutcomma
  1223. - %type    <psb>        matchaddrnocomma matchtoknocomma
  1224.   
  1225.   %left COMMA
  1226.   %left LPAREN RPAREN
  1227. --- 213,218 ----
  1228. ***************
  1229. *** 849,867 ****
  1230.               }
  1231.           ;
  1232.   
  1233. - /* just like matchaddr - but comma's aren't allowed */
  1234. - matchaddrnocomma    :    /* empty */ {
  1235. -                 $$ = NULL;
  1236. -             }
  1237. -         |    matchaddrnocomma matchtoknocomma {
  1238. -                 $$ = ListAppend ($1, $2, (char *) NULL);
  1239. -                 Free ($1); /* NULL */
  1240. -             }
  1241. -         |    error {
  1242. -                 $$ = NULL;
  1243. -             }
  1244. -         ;
  1245.   matchtok    :    IDENT {
  1246.                   $$ = GetField ($1);
  1247.               }
  1248. --- 840,845 ----
  1249. ***************
  1250. *** 886,945 ****
  1251.                   |       RESOLVED LPAREN matchtok RPAREN {
  1252.                    $$ = ListAppend("$#",$3,(char *) NULL);
  1253.           }
  1254. -         |    IFSET LPAREN IDENT COMMA ifresmatch RPAREN {
  1255. -                 $$ = MakeCond ($3, MacScan($5));
  1256. -             }
  1257.       ;
  1258.   
  1259. - /* the next one is just like matchtok - but you can't have a comma in it */
  1260. - matchtoknocomma    :    IDENT {
  1261. -                 $$ = GetField ($1);
  1262. -             }
  1263. -         |    anycharbutcomma {
  1264. -                 *Cbuf = $1;
  1265. -                 $$ = ListAppend (Cbuf, (char *) NULL, (char *) NULL);
  1266. -             }
  1267. -         |    mval {
  1268. -                 $$ = MacScan ($1);
  1269. -             }
  1270. -         |    DOLLAR IDENT {
  1271. -                 Mbuf[1] = MakeMac ($2, ID_MACRO);
  1272. -                 $$ = ListAppend (Mbuf, (char *) NULL, (char *) NULL);
  1273. -             }
  1274. -                 |       YPALIAS LPAREN matchtok RPAREN {
  1275. -                  $$ = ListAppend("${",$3,(char *) NULL);
  1276. - /*             Free ($3); */
  1277. -         }
  1278. -                 |       YPPASSWD LPAREN matchtok RPAREN {
  1279. -                  $$ = ListAppend("$\"",$3,(char *) NULL);
  1280. -         }
  1281. -                 |       RESOLVED LPAREN matchtok RPAREN {
  1282. -                  $$ = ListAppend("$#",$3,(char *) NULL);
  1283. -         }
  1284. -         |    IFSET LPAREN IDENT COMMA ifresmatch RPAREN {
  1285. -                 $$ = MakeCond ($3, MacScan($5));
  1286. -             }
  1287. -     ;
  1288. - ifresmatch    :    matchaddrnocomma elseresmatch {
  1289. -                 if ($2 != NULL) {
  1290. -                     $$ = ListAppend ($1, $2, "$|");
  1291. -                     Free ($1);
  1292. -                     Free ($2);
  1293. -                 } else
  1294. -                     $$ = $1;
  1295. -             }
  1296. -         |    error {
  1297. -                 $$ = NULL;
  1298. -             }
  1299. -         ;
  1300. - elseresmatch    :
  1301. -             COMMA matchaddrnocomma {
  1302. -                 $$ = $2;
  1303. -             }
  1304. -         ;
  1305.   actionstmt    :    action LPAREN rwaddr RPAREN SEMI {
  1306.                   $$ = ListAppend ($1, $3, (char *) NULL);
  1307.                   Free ($3);
  1308. --- 864,871 ----
  1309. ***************
  1310. *** 1160,1180 ****
  1311.               }
  1312.           ;
  1313.   
  1314. ! /* because of ifset, we have to treat comma's special
  1315. !  otherwise ifset(a,b,c) might be ambiguous if
  1316. !  c is an address with a comma in it.
  1317. ! */
  1318. ! anychar        :    anycharbutcomma {
  1319. !                   $$ = $1;
  1320. !         }
  1321. !           |    COMMA {
  1322. !                 $$ = ',';
  1323. !             }
  1324. !         ;
  1325. ! anycharbutcomma        :    SEPCHAR {
  1326.                   $$ = $1;
  1327.               }
  1328.           |    COLON {
  1329. --- 1086,1092 ----
  1330.               }
  1331.           ;
  1332.   
  1333. ! anychar        :    SEPCHAR {
  1334.                   $$ = $1;
  1335.               }
  1336.           |    COLON {
  1337. ***************
  1338. *** 1192,1197 ****
  1339. --- 1104,1112 ----
  1340.           |    RBRACE {
  1341.                   $$ = '}';
  1342.               }
  1343. +         |    COMMA {
  1344. +                 $$ = ',';
  1345. +             }
  1346.           |    SLASH {
  1347.                   $$ = '/';
  1348.               }
  1349. ***************
  1350. *** 1228,1255 ****
  1351.               }
  1352.           |    userspec {
  1353.                   $$ = $1;
  1354. -             }
  1355. -         |    IFSET LPAREN IDENT COMMA ifresroute RPAREN {
  1356. -                 $$ = MakeCond ($3, MacScan($5));
  1357. -             }
  1358. -         ;
  1359. - ifresroute        :    LPAREN route RPAREN  elseresroute {
  1360. -                 if ($4 != NULL) {
  1361. -                     $$ = ListAppend ($2, $4, "$|");
  1362. -                     Free ($2);
  1363. -                     Free ($4);
  1364. -                 } else
  1365. -                     $$ = $2;
  1366. -             }
  1367. -         |    error {
  1368. -                 $$ = NULL;
  1369. -             }
  1370. -         ;
  1371. - elseresroute    :
  1372. -             COMMA LPAREN route RPAREN {
  1373. -                 $$ = $3;
  1374.               }
  1375.           ;
  1376.   
  1377. --- 1143,1148 ----
  1378. diff -r -c ./src/strops.c ../3.2/src/strops.c
  1379. *** ./src/strops.c    Mon Sep  9 12:44:40 1991
  1380. --- ../3.2/src/strops.c    Thu May 16 12:43:21 1991
  1381. ***************
  1382. *** 1,6 ****
  1383.   #ifdef FLUKE
  1384.   # ifndef LINT
  1385. !     static char RCSid[] = "@(#)FLUKE  $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/strops.c,v 3.3 1991/09/09 16:33:23 barnett Exp $";
  1386.   # endif LINT
  1387.   #endif FLUKE
  1388.   
  1389. --- 1,6 ----
  1390.   #ifdef FLUKE
  1391.   # ifndef LINT
  1392. !     static char RCSid[] = "@(#)FLUKE  $Header: /home/kreskin/u0/barnett/Src/ease/src/RCS/strops.c,v 3.2 1991/05/16 10:45:25 barnett Exp $";
  1393.   # endif LINT
  1394.   #endif FLUKE
  1395.   
  1396. ***************
  1397. *** 18,26 ****
  1398.    *    All rights reserved.
  1399.    *
  1400.    * $Log: strops.c,v $
  1401. -  * Revision 3.3  1991/09/09  16:33:23  barnett
  1402. -  * Minor bug fix release
  1403. -  *
  1404.    * Revision 3.2  1991/05/16  10:45:25  barnett
  1405.    * Better support for System V machines
  1406.    * Support for machines with read only text segments
  1407. --- 18,23 ----
  1408. ***************
  1409. *** 93,99 ****
  1410.   char    *string;
  1411.   {
  1412.       char *s;
  1413. !     s=malloc(strlen(string));
  1414.       if (!s) return (nil);
  1415.       (void) sprintf(s,"%s",string);
  1416.       return (s);
  1417. --- 90,96 ----
  1418.   char    *string;
  1419.   {
  1420.       char *s;
  1421. !     s=malloc(length(string));
  1422.       if (!s) return (nil);
  1423.       (void) sprintf(s,"%s",string);
  1424.       return (s);
  1425. diff -r -c ./src/symtab.c ../3.2/src/symtab.c
  1426. *** ./src/symtab.c    Mon Sep  9 12:44:41 1991
  1427. --- ../3.2/src/symtab.c    Thu May 16 12:38:33 1991
  1428. ***************
  1429. *** 1,6 ****
  1430.   #ifdef FLUKE
  1431.   # ifndef LINT
  1432. !     static char RCSid[] = "@(#)FLUKE  $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/symtab.c,v 3.1 1991/09/09 16:33:23 barnett Exp $";
  1433.   # endif LINT
  1434.   #endif FLUKE
  1435.   
  1436. --- 1,6 ----
  1437.   #ifdef FLUKE
  1438.   # ifndef LINT
  1439. !     static char RCSid[] = "@(#)FLUKE  $Header: /tmp_mnt/home/kreskin/u0/barnett/Src/Ease/ease/src/RCS/symtab.c,v 3.0 1991/02/22 18:50:27 barnett Exp $";
  1440.   # endif LINT
  1441.   #endif FLUKE
  1442.   
  1443. ***************
  1444. *** 17,25 ****
  1445.    *    All rights reserved.
  1446.    *
  1447.    * $Log: symtab.c,v $
  1448. -  * Revision 3.1  1991/09/09  16:33:23  barnett
  1449. -  * Minor bug fix release
  1450. -  *
  1451.    * Revision 3.0  1991/02/22  18:50:27  barnett
  1452.    * Added support for HP/UX and IDA sendmail.
  1453.    *
  1454. --- 17,22 ----
  1455. ***************
  1456. *** 36,42 ****
  1457.   #include "symtab.h"
  1458.   
  1459.   #define ERRORMAILER "error"        /* predefined error mailer name */
  1460. - #define ERRORMAILERUC "ERROR"        /* predefined ERROR mailer name */
  1461.   
  1462.   extern void FatalError (),
  1463.           PrintWarning ();
  1464. --- 33,38 ----
  1465. ***************
  1466. *** 117,123 ****
  1467.                       !ISCLASS(hcsearch->idd))
  1468.   #endif
  1469.                       PrintWarning ("Class not defined: %s\n", hcsearch->psb);
  1470. !                 if (ISMAILER(hcsearch->idtype) && !ISMAILER(hcsearch->idd) && (strcmp(hcsearch->psb,"LOCAL")))
  1471.                       PrintWarning ("Mailer not defined: %s\n", hcsearch->psb);
  1472.                   if (ISRULESET(hcsearch->idtype) && !ISRULESET(hcsearch->idd))
  1473.                       PrintWarning ("Ruleset not defined: %s\n", hcsearch->psb);
  1474. --- 113,119 ----
  1475.                       !ISCLASS(hcsearch->idd))
  1476.   #endif
  1477.                       PrintWarning ("Class not defined: %s\n", hcsearch->psb);
  1478. !                 if (ISMAILER(hcsearch->idtype) && !ISMAILER(hcsearch->idd))
  1479.                       PrintWarning ("Mailer not defined: %s\n", hcsearch->psb);
  1480.                   if (ISRULESET(hcsearch->idtype) && !ISRULESET(hcsearch->idd))
  1481.                       PrintWarning ("Ruleset not defined: %s\n", hcsearch->psb);
  1482. ***************
  1483. *** 168,178 ****
  1484.   
  1485.       /* preload error mailer declaration */
  1486.       symptr = LookupSymbol (ERRORMAILER);
  1487. -     symptr->idtype |= ID_MAILER;
  1488. -     symptr->idd |= ID_MAILER;
  1489. -     /* preload ERROR mailer declaration */
  1490. -     symptr = LookupSymbol (ERRORMAILERUC);
  1491.       symptr->idtype |= ID_MAILER;
  1492.       symptr->idd |= ID_MAILER;
  1493.   }
  1494. --- 164,169 ----
  1495. --
  1496. Bruce G. Barnett    barnett@crdgw1.ge.com    uunet!crdgw1!barnett
  1497.