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

Diff for /src/usr.bin/awk/tran.c between version 1.38 and 1.39

version 1.38, 2023/10/30 17:52:54 version 1.39, 2024/05/04 22:59:21
Line 58 
Line 58 
 Cell    *ofsloc;        /* OFS */  Cell    *ofsloc;        /* OFS */
 Cell    *orsloc;        /* ORS */  Cell    *orsloc;        /* ORS */
 Cell    *rsloc;         /* RS */  Cell    *rsloc;         /* RS */
 Array   *ARGVtab;       /* symbol table containing ARGV[...] */  Cell    *ARGVcell;      /* cell with symbol table containing ARGV[...] */
 Array   *ENVtab;        /* symbol table containing ENVIRON[...] */  
 Cell    *rstartloc;     /* RSTART */  Cell    *rstartloc;     /* RSTART */
 Cell    *rlengthloc;    /* RLENGTH */  Cell    *rlengthloc;    /* RLENGTH */
 Cell    *subseploc;     /* SUBSEP */  Cell    *subseploc;     /* SUBSEP */
Line 108 
Line 107 
   
 void arginit(int ac, char **av) /* set up ARGV and ARGC */  void arginit(int ac, char **av) /* set up ARGV and ARGC */
 {  {
           Array *ap;
         Cell *cp;          Cell *cp;
         int i;          int i;
         char temp[50];          char temp[50];
   
         ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval;          ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval;
         cp = setsymtab("ARGV", "", 0.0, ARR, symtab);          cp = setsymtab("ARGV", "", 0.0, ARR, symtab);
         ARGVtab = makesymtab(NSYMTAB);  /* could be (int) ARGC as well */          ap = makesymtab(NSYMTAB);       /* could be (int) ARGC as well */
         free(cp->sval);          free(cp->sval);
         cp->sval = (char *) ARGVtab;          cp->sval = (char *) ap;
         for (i = 0; i < ac; i++) {          for (i = 0; i < ac; i++) {
                 double result;                  double result;
   
                 snprintf(temp, sizeof(temp), "%d", i);                  snprintf(temp, sizeof(temp), "%d", i);
                 if (is_number(*av, & result))                  if (is_number(*av, & result))
                         setsymtab(temp, *av, result, STR|NUM, ARGVtab);                          setsymtab(temp, *av, result, STR|NUM, ap);
                 else                  else
                         setsymtab(temp, *av, 0.0, STR, ARGVtab);                          setsymtab(temp, *av, 0.0, STR, ap);
                 av++;                  av++;
         }          }
           ARGVcell = cp;
 }  }
   
 void envinit(char **envp)       /* set up ENVIRON variable */  void envinit(char **envp)       /* set up ENVIRON variable */
 {  {
           Array *ap;
         Cell *cp;          Cell *cp;
         char *p;          char *p;
   
         cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab);          cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab);
         ENVtab = makesymtab(NSYMTAB);          ap = makesymtab(NSYMTAB);
         free(cp->sval);          free(cp->sval);
         cp->sval = (char *) ENVtab;          cp->sval = (char *) ap;
         for ( ; *envp; envp++) {          for ( ; *envp; envp++) {
                 double result;                  double result;
   
Line 147 
Line 149 
                         continue;                          continue;
                 *p++ = 0;       /* split into two strings at = */                  *p++ = 0;       /* split into two strings at = */
                 if (is_number(p, & result))                  if (is_number(p, & result))
                         setsymtab(*envp, p, result, STR|NUM, ENVtab);                          setsymtab(*envp, p, result, STR|NUM, ap);
                 else                  else
                         setsymtab(*envp, p, 0.0, STR, ENVtab);                          setsymtab(*envp, p, 0.0, STR, ap);
                 p[-1] = '=';    /* restore in case env is passed down to a shell */                  p[-1] = '=';    /* restore in case env is passed down to a shell */
         }          }
 }  }

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