[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.38 and 1.39

version 1.38, 2001/09/27 22:38:28 version 1.39, 2001/09/29 15:43:48
Line 74 
Line 74 
 static void     doifelse __P((const char *[], int));  static void     doifelse __P((const char *[], int));
 static int      doincl __P((const char *));  static int      doincl __P((const char *));
 static int      dopaste __P((const char *));  static int      dopaste __P((const char *));
   static void     gnu_dochq __P((const char *[], int));
 static void     dochq __P((const char *[], int));  static void     dochq __P((const char *[], int));
   static void     gnu_dochc __P((const char *[], int));
 static void     dochc __P((const char *[], int));  static void     dochc __P((const char *[], int));
 static void     dodiv __P((int));  static void     dodiv __P((int));
 static void     doundiv __P((const char *[], int));  static void     doundiv __P((const char *[], int));
Line 89 
Line 91 
   
 /*  /*
  * eval - eval all macros and builtins calls   * eval - eval all macros and builtins calls
    *        argc - number of elements in argv.
    *        argv - element vector :
    *                      argv[0] = definition of a user
    *                                macro or nil if built-in.
    *                      argv[1] = name of the macro or
    *                                built-in.
    *                      argv[2] = parameters to user-defined
    *                         .      macro or built-in.
    *                         .
    *
    * A call in the form of macro-or-builtin() will result in:
    *                      argv[0] = nullstr
    *                      argv[1] = macro-or-builtin
    *                      argv[2] = nullstr
    *
    * argc is 3 for macro-or-builtin() and 2 for macro-or-builtin
  */   */
 void  void
 eval(argv, argc, td)  eval(argv, argc, td)
Line 114 
Line 132 
   
 /*  /*
  * expand_builtin - evaluate built-in macros.   * expand_builtin - evaluate built-in macros.
  *        argc - number of elements in argv.  
  *        argv - element vector :  
  *                      argv[0] = definition of a user  
  *                                macro or nil if built-in.  
  *                      argv[1] = name of the macro or  
  *                                built-in.  
  *                      argv[2] = parameters to user-defined  
  *                         .      macro or built-in.  
  *                         .  
  *  
  * Note that the minimum value for argc is 3. A call in the form  
  * of macro-or-builtin() will result in:  
  *                      argv[0] = nullstr  
  *                      argv[1] = macro-or-builtin  
  *                      argv[2] = nullstr  
  */   */
   
 void  void
 expand_builtin(argv, argc, td)  expand_builtin(argv, argc, td)
         const char *argv[];          const char *argv[];
Line 138 
Line 140 
         int td;          int td;
 {  {
         int c, n;          int c, n;
           int ac;
         static int sysval = 0;          static int sysval = 0;
   
 #ifdef DEBUG  #ifdef DEBUG
Line 151 
Line 154 
   * 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..
   */    */
           ac = argc;
   
         if (argc == 3 && !*(argv[2]))          if (argc == 3 && !*(argv[2]))
                 argc--;                  argc--;
   
Line 278 
Line 283 
                 break;                  break;
 #endif  #endif
         case CHNQTYPE:          case CHNQTYPE:
                 dochq(argv, argc);                  if (mimic_gnu)
                           gnu_dochq(argv, ac);
                   else
                           dochq(argv, argc);
                 break;                  break;
   
         case CHNCTYPE:          case CHNCTYPE:
                 dochc(argv, argc);                  if (mimic_gnu)
                           gnu_dochc(argv, ac);
                   else
                           dochc(argv, argc);
                 break;                  break;
   
         case SUBSTYPE:          case SUBSTYPE:
Line 766 
Line 777 
 }  }
 #endif  #endif
   
   static void
   gnu_dochq(argv, ac)
           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) {
                   lquote[0] = LQUOTE, lquote[1] = EOS;
                   rquote[0] = RQUOTE, rquote[1] = EOS;
           } else {
                   strlcpy(lquote, argv[2], sizeof(lquote));
                   if(ac > 3)
                           strlcpy(rquote, argv[3], sizeof(rquote));
                   else
                           rquote[0] = EOS;
           }
   }
   
 /*  /*
  * dochq - change quote characters   * dochq - change quote characters
  */   */
Line 774 
Line 804 
         const char *argv[];          const char *argv[];
         int argc;          int argc;
 {  {
         /* In gnu-m4 mode, having two empty arguments means no quotes at  
          * all.  */  
         if (mimic_gnu) {  
                 if (argc > 3 && !*argv[2] && !*argv[3]) {  
                         lquote[0] = EOS;  
                         rquote[0] = EOS;  
                         return;  
                 }  
         }  
         if (argc > 2) {          if (argc > 2) {
                 if (*argv[2])                  if (*argv[2])
                         strlcpy(lquote, argv[2], sizeof(lquote));                          strlcpy(lquote, argv[2], sizeof(lquote));
Line 801 
Line 822 
         }          }
 }  }
   
   static void
   gnu_dochc(argv, ac)
           const char *argv[];
           int ac;
   {
           /* In gnu-m4 mode, no arguments mean no comment
            * arguments at all. */
           if (ac == 2) {
                   scommt[0] = EOS;
                   ecommt[0] = EOS;
           } else {
                   if (*argv[2])
                           strlcpy(scommt, argv[2], sizeof(scommt));
                   else
                           scommt[0] = SCOMMT, scommt[1] = EOS;
                   if(ac > 3 && *argv[3])
                           strlcpy(ecommt, argv[3], sizeof(ecommt));
                   else
                           ecommt[0] = ECOMMT, ecommt[1] = EOS;
           }
   }
 /*  /*
  * dochc - change comment characters   * dochc - change comment characters
  */   */

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39