[BACK]Return to eval.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / m4

Diff for /src/usr.bin/m4/eval.c between version 1.57 and 1.58

version 1.57, 2005/08/06 16:22:26 version 1.58, 2005/09/06 15:33:21
Line 61 
Line 61 
 static void     doifelse(const char *[], int);  static void     doifelse(const char *[], int);
 static int      doincl(const char *);  static int      doincl(const char *);
 static int      dopaste(const char *);  static int      dopaste(const char *);
 static void     gnu_dochq(const char *[], int);  
 static void     dochq(const char *[], int);  static void     dochq(const char *[], int);
 static void     gnu_dochc(const char *[], int);  
 static void     dochc(const char *[], int);  static void     dochc(const char *[], int);
 static void     dom4wrap(const char *);  static void     dom4wrap(const char *);
 static void     dodiv(int);  static void     dodiv(int);
Line 137 
Line 135 
   * have macro-or-builtin() type call. We adjust    * have macro-or-builtin() type call. We adjust
   * argc to avoid further checking..    * argc to avoid further checking..
   */    */
    /* we keep the initial value for those built-ins that differentiate
     * between builtin() and builtin.
     */
         ac = argc;          ac = argc;
   
         if (argc == 3 && !*(argv[2]))          if (argc == 3 && !*(argv[2]))
Line 286 
Line 287 
                 break;                  break;
 #endif  #endif
         case CHNQTYPE:          case CHNQTYPE:
                 if (mimic_gnu)                  dochq(argv, ac);
                         gnu_dochq(argv, ac);  
                 else  
                         dochq(argv, argc);  
                 break;                  break;
   
         case CHNCTYPE:          case CHNCTYPE:
                 if (mimic_gnu)                  dochc(argv, argc);
                         gnu_dochc(argv, ac);  
                 else  
                         dochc(argv, argc);  
                 break;                  break;
   
         case SUBSTYPE:          case SUBSTYPE:
Line 319 
Line 314 
                                 pbstr(rquote);                                  pbstr(rquote);
                                 pbstr(argv[n]);                                  pbstr(argv[n]);
                                 pbstr(lquote);                                  pbstr(lquote);
                                 putback(COMMA);                                  pushback(COMMA);
                         }                          }
                         pbstr(rquote);                          pbstr(rquote);
                         pbstr(argv[3]);                          pbstr(argv[3]);
Line 518 
Line 513 
         p--;                           /* last character of defn */          p--;                           /* last character of defn */
         while (p > t) {          while (p > t) {
                 if (*(p - 1) != ARGFLAG)                  if (*(p - 1) != ARGFLAG)
                         PUTBACK(*p);                          PUSHBACK(*p);
                 else {                  else {
                         switch (*p) {                          switch (*p) {
   
Line 542 
Line 537 
                                 if (argc > 2) {                                  if (argc > 2) {
                                         for (n = argc - 1; n > 2; n--) {                                          for (n = argc - 1; n > 2; n--) {
                                                 pbstr(argv[n]);                                                  pbstr(argv[n]);
                                                 putback(COMMA);                                                  pushback(COMMA);
                                         }                                          }
                                         pbstr(argv[2]);                                          pbstr(argv[2]);
                                 }                                  }
Line 553 
Line 548 
                                                 pbstr(rquote);                                                  pbstr(rquote);
                                                 pbstr(argv[n]);                                                  pbstr(argv[n]);
                                                 pbstr(lquote);                                                  pbstr(lquote);
                                                 putback(COMMA);                                                  pushback(COMMA);
                                         }                                          }
                                         pbstr(rquote);                                          pbstr(rquote);
                                         pbstr(argv[2]);                                          pbstr(argv[2]);
Line 561 
Line 556 
                                 }                                  }
                                 break;                                  break;
                         default:                          default:
                                 PUTBACK(*p);                                  PUSHBACK(*p);
                                 PUTBACK('$');                                  PUSHBACK('$');
                                 break;                                  break;
                         }                          }
                         p--;                          p--;
Line 570 
Line 565 
                 p--;                  p--;
         }          }
         if (p == t)                    /* do last character */          if (p == t)                    /* do last character */
                 PUTBACK(*p);                  PUSHBACK(*p);
 }  }
   
   
Line 736 
Line 731 
 }  }
 #endif  #endif
   
   /*
    * dochq - change quote characters
    */
 static void  static void
 gnu_dochq(const char *argv[], int ac)  dochq(const char *argv[], int ac)
 {  {
         /* In gnu-m4 mode, the only way to restore quotes is to have no  
          * arguments at all. */  
         if (ac == 2) {          if (ac == 2) {
                 lquote[0] = LQUOTE, lquote[1] = EOS;                  lquote[0] = LQUOTE; lquote[1] = EOS;
                 rquote[0] = RQUOTE, rquote[1] = EOS;                  rquote[0] = RQUOTE; rquote[1] = EOS;
         } else {          } else {
                 strlcpy(lquote, argv[2], sizeof(lquote));                  strlcpy(lquote, argv[2], sizeof(lquote));
                 if(ac > 3)                  if (ac > 3) {
                         strlcpy(rquote, argv[3], sizeof(rquote));                          strlcpy(rquote, argv[3], sizeof(rquote));
                 else                  } else {
                         rquote[0] = EOS;                          rquote[0] = ECOMMT; rquote[1] = EOS;
                   }
         }          }
 }  }
   
 /*  /*
  * dochq - change quote characters   * dochc - change comment characters
  */   */
 static void  static void
 dochq(const char *argv[], int argc)  dochc(const char *argv[], int argc)
 {  {
         if (argc > 2) {  /* XXX Note that there is no difference between no argument and a single
                 if (*argv[2])   * empty argument.
                         strlcpy(lquote, argv[2], sizeof(lquote));   */
                 else {          if (argc == 2) {
                         lquote[0] = LQUOTE;  
                         lquote[1] = EOS;  
                 }  
                 if (argc > 3) {  
                         if (*argv[3])  
                                 strlcpy(rquote, argv[3], sizeof(rquote));  
                 } else  
                         strlcpy(rquote, lquote, sizeof(rquote));  
         } else {  
                 lquote[0] = LQUOTE, lquote[1] = EOS;  
                 rquote[0] = RQUOTE, rquote[1] = EOS;  
         }  
 }  
   
 static void  
 gnu_dochc(const char *argv[], int ac)  
 {  
         /* In gnu-m4 mode, no arguments mean no comment  
          * arguments at all. */  
         if (ac == 2) {  
                 scommt[0] = EOS;                  scommt[0] = EOS;
                 ecommt[0] = EOS;                  ecommt[0] = EOS;
         } else {          } else {
                 if (*argv[2])                  strlcpy(scommt, argv[2], sizeof(scommt));
                         strlcpy(scommt, argv[2], sizeof(scommt));                  if (argc == 3) {
                 else                          ecommt[0] = ECOMMT; ecommt[1] = EOS;
                         scommt[0] = SCOMMT, scommt[1] = EOS;                  } else {
                 if(ac > 3 && *argv[3])  
                         strlcpy(ecommt, argv[3], sizeof(ecommt));                          strlcpy(ecommt, argv[3], sizeof(ecommt));
                 else  
                         ecommt[0] = ECOMMT, ecommt[1] = EOS;  
         }  
 }  
 /*  
  * dochc - change comment characters  
  */  
 static void  
 dochc(const char *argv[], int argc)  
 {  
         if (argc > 2) {  
                 if (*argv[2])  
                         strlcpy(scommt, argv[2], sizeof(scommt));  
                 if (argc > 3) {  
                         if (*argv[3])  
                                 strlcpy(ecommt, argv[3], sizeof(ecommt));  
                 }                  }
                 else  
                         ecommt[0] = ECOMMT, ecommt[1] = EOS;  
         }          }
         else {  
                 scommt[0] = SCOMMT, scommt[1] = EOS;  
                 ecommt[0] = ECOMMT, ecommt[1] = EOS;  
         }  
 }  }
   
 /*  /*
Line 918 
Line 872 
 #endif  #endif
         if (fc >= ap && fc < ap + strlen(ap))          if (fc >= ap && fc < ap + strlen(ap))
                 for (k = fc + nc - 1; k >= fc; k--)                  for (k = fc + nc - 1; k >= fc; k--)
                         putback(*k);                          pushback(*k);
 }  }
   
 /*  /*

Legend:
Removed from v.1.57  
changed lines
  Added in v.1.58