gawk: Symbol table by name

 
 16.4.10.1 Variable Access and Update by Name
 ............................................
 
 The following routines provide the ability to access and update global
 'awk'-level variables by name.  In compiler terminology, identifiers of
 different kinds are termed "symbols", thus the "sym" in the routines'
 names.  The data structure that stores information about symbols is
 termed a "symbol table".  The functions are as follows:
 
 'awk_bool_t sym_lookup(const char *name,'
 '                      awk_valtype_t wanted,'
 '                      awk_value_t *result);'
      Fill in the 'awk_value_t' structure pointed to by 'result' with the
      value of the variable named by the string 'name', which is a
      regular C string.  'wanted' indicates the type of value expected.
      Return true if the actual type matches 'wanted', and false
      otherwise.  In the latter case, 'result->val_type' indicates the
      actual type (SeeTable 16.1 table-value-types-returned.).
 
 'awk_bool_t sym_update(const char *name, awk_value_t *value);'
      Update the variable named by the string 'name', which is a regular
      C string.  The variable is added to 'gawk''s symbol table if it is
      not there.  Return true if everything worked, and false otherwise.
 
      Changing types (scalar to array or vice versa) of an existing
      variable is _not_ allowed, nor may this routine be used to update
      an array.  This routine cannot be used to update any of the
      predefined variables (such as 'ARGC' or 'NF').
 
    An extension can look up the value of 'gawk''s special variables.
 However, with the exception of the 'PROCINFO' array, an extension cannot
 change any of those variables.