diff -rc ../gawk-2.11.orig/Makefile ./Makefile
*** ../gawk-2.11.orig/Makefile Mon Nov 13 13:51:42 1989
--- ./Makefile Fri Aug 17 15:50:18 1990
# need to customize this file below this point.
! FLAGS= $(MISSING) $(DEBUG)
CFLAGS= $(FLAGS) $(DEBUGGER) $(PROFILE) $(OPTIMIZE) $(WARN)
AWKOBJS = main.o eval.o builtin.o msg.o debug.o io.o field.o array.o node.o \
ALLOBJS = $(AWKOBJS) awk.tab.o
# need to customize this file below this point.
! FLAGS= $(MISSING) $(DEBUG) -DSNMP
CFLAGS= $(FLAGS) $(DEBUGGER) $(PROFILE) $(OPTIMIZE) $(WARN)
+ SNMP-LIB= -lisnmp -lisode
AWKOBJS = main.o eval.o builtin.o msg.o debug.o io.o field.o array.o node.o \
! version.o missing.o $(SNMP-O)
ALLOBJS = $(AWKOBJS) awk.tab.o
# source and documentation files
SRC = main.c eval.c builtin.c msg.c \
! debug.c io.c field.c array.c node.c missing.c
# source and documentation files
SRC = main.c eval.c builtin.c msg.c \
! debug.c io.c field.c array.c node.c missing.c $(SNMP-C)
gawk: $(ALLOBJS) $(GNUOBJS)
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) -lm
gawk: $(ALLOBJS) $(GNUOBJS)
! $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) $(SNMP-LIB) -lm
diff -rc ../gawk-2.11.orig/array.c ./array.c
*** ../gawk-2.11.orig/array.c Mon Nov 13 13:51:44 1989
--- ./array.c Fri Aug 17 15:21:52 1990
#define MAKE_POS(v) (v & ~0x80000000) /* make number positive */
r = force_string(tree_eval(tree->lnode));
+ subseplen = Ndot_string -> stlen;
+ subsep = Ndot_string -> stptr;
subseplen = SUBSEP_node->lnode->stlen;
subsep = SUBSEP_node->lnode->stptr;
len = r->stlen + subseplen + 1;
emalloc(str, char *, len, "concat_exp");
memcpy(str, r->stptr, r->stlen+1);
+ fatal ("split into SNMP array variable not allowed");
if (symbol->var_array == 0)
for (i = 0; i < ASSOC_HASHSIZE; i++) {
+ fatal ("assoc_find: internal error");
for (bucket = symbol->var_array[hash1]; bucket; bucket = bucket->ahnext) {
if (cmp_nodes(bucket->ahname, subs))
if (symbol->type == Node_param_list)
symbol = stack_ptr[symbol->param_cnt];
+ return *assoc_lookup (symbol, concat_exp (subs, 1))
if (symbol->var_array == 0)
+ subs = concat_exp(subs,0);
if (assoc_find(symbol, subs, hash1) == NULL) {
+ snmp_get (symbol, force_string (subs) -> stptr);
+ return &symbol -> var_value;
if (symbol->var_array == 0) { /* this table really should grow
emalloc(symbol->var_array, NODE **, (sizeof(NODE *) *
register NODE *bucket, *last;
+ fatal ("delete into SNMP array variable not allowed");
if (symbol->var_array == 0)
+ subs = concat_exp(tree,0);
+ assoc_scan(symbol,instance)
+ return snmp_assoc_scan (symbol,instance);
emalloc(lookat, struct search *, sizeof(struct search), "assoc_scan");
lookat->numleft = ASSOC_HASHSIZE;
lookat->arr_ptr = symbol->var_array;
lookat->bucket = symbol->var_array[0];
return assoc_next(lookat);
+ return assoc_next(symbol, lookat);
+ assoc_next(symbol, lookat)
+ return snmp_assoc_next (lookat, 0);
for (; lookat->numleft; lookat->numleft--) {
while (lookat->bucket != 0) {
lookat->retval = lookat->bucket->ahname;
diff -rc ../gawk-2.11.orig/awk.h ./awk.h
*** ../gawk-2.11.orig/awk.h Mon Nov 13 13:51:46 1989
--- ./awk.h Fri Aug 17 15:21:53 1990
! extern void *malloc(unsigned), *realloc(void *, unsigned);
extern void free(char *);
extern char *getenv(char *);
! extern char *malloc(unsigned), *realloc(void *, unsigned);
extern void free(char *);
extern char *getenv(char *);
Node_K_while, /* lnode is condtional, rnode is stuff to run */
Node_K_for, /* lnode is for_struct, rnode is stuff to run */
Node_K_arrayfor, /* lnode is for_struct, rnode is stuff to run */
+ cond: instance (optional)
Node_K_break, /* no subs */
Node_K_continue, /* no stuff */
Node_K_print, /* lnode is exp_list, rnode is redirect */
Node_var, /* rnode is value, lnode is array stuff */
+ /* magic is pointer to (OT) */
Node_var_array, /* array is ptr to elements, asize num of
Node_val, /* node is a value - type in flags */
AWKNUM fltnum; /* this is here for optimal packing of
#define lnode sub.nodep.l.lptr
#define nextp sub.nodep.l.nextnode
#define rnode sub.nodep.r.rptr
+ #define magic sub.nodep.cookie
#define source_file sub.nodep.name
#define source_line sub.nodep.number
#define param_cnt sub.nodep.number
extern NODE **get_lhs(NODE *, int);
extern void do_deref(void );
extern struct search *assoc_scan(NODE *);
extern struct search *assoc_next(struct search *);
+ extern struct search *assoc_next(NODE *symbol, struct search *lookat);
extern NODE **assoc_lookup(NODE *, NODE *);
extern double r_force_number(NODE *);
extern NODE *r_force_string(NODE *);
extern char casetable[]; /* for case-independent regexp matching */
+ extern NODE *AGENT_node,
+ extern NODE *Ndot_string;
+ extern int snmp_enabled;
+ extern char *snmp_file;
+ int check_snmp(NODE *r, char *name);
+ int snmp_get(NODE *ptr, char *instname);
+ char *snmp_name(NODE *ptr);
+ struct search *snmp_assoc_scan(NODE *symbol);
+ struct search *snmp_assoc_next(struct search *lookat, int done);
+ struct search *snmp_assoc_scan (), *snmp_assoc_next ();
diff -rc ../gawk-2.11.orig/builtin.c ./builtin.c
*** ../gawk-2.11.orig/builtin.c Mon Nov 13 13:51:49 1989
--- ./builtin.c Fri Aug 17 15:14:58 1990
+ get_two (tree, &s1, &s2);
+ d1 = (unsigned long) l;
+ d1 = (unsigned long) force_number (s1);
+ d2 = (unsigned long) l;
+ d2 = (unsigned long) force_number (s2);
+ return tmp_number ((AWKNUM) ((unsigned long) (d1 & d2)));
+ get_two (tree, &s1, &s2);
+ d1 = (unsigned long) l;
+ d1 = (unsigned long) force_number (s1);
+ d2 = (unsigned long) l;
+ d2 = (unsigned long) force_number (s2);
+ return tmp_number ((AWKNUM) ((unsigned long) (d1 | d2)));
diff -rc ../gawk-2.11.orig/debug.c ./debug.c
*** ../gawk-2.11.orig/debug.c Mon Nov 13 13:51:51 1989
--- ./debug.c Fri Aug 17 15:14:59 1990
printf("(0x%x Array)\n", ptr);
for (l = assoc_scan(ptr); l; l = assoc_next(l)) {
+ printf("(0x%x Array%s)\n", ptr,
+ ptr -> magic ? " {SNMP}": "");
+ for (l = assoc_scan(ptr); l; l = assoc_next(ptr, l)) {
print_parse_tree(l->retval);
for (buc = variables[n]; buc; buc = buc->hnext) {
if (buc->hvalue == ptr) {
printf("%.*s", buc->hlength, buc->hname);
diff -rc ../gawk-2.11.orig/eval.c ./eval.c
*** ../gawk-2.11.orig/eval.c Mon Nov 13 13:51:53 1989
--- ./eval.c Fri Aug 17 15:21:52 1990
if (t->type == Node_param_list)
t = stack_ptr[t->param_cnt];
for (l = assoc_scan(t); l; l = assoc_next((struct search *)l)) {
+ for (l = assoc_scan (t, tree -> forloop -> cond);
+ l = assoc_next (t, l)) {
deref = *((NODE **) lhs);
*lhs = dupnode(l->retval);
+ (void) snmp_assoc_next (l, 1);
RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid);
if (arg->type == Node_param_list)
arg = stack_ptr[arg->param_cnt];
if (arg->type == Node_var_array)
+ if (arg -> type == Node_var_array && !arg -> magic)
if (arg->type == Node_var && n->type == Node_var_array) {
+ fatal ("array assignment to SNMP scalar variable \"%s\"",
arg->var_array = n->var_array;
arg->type = Node_var_array;
+ fatal ("attempt to set SNMP %s variable \"%s\"",
+ ptr -> type == Node_var ? "scalar" : "array",
+ snmp_get (ptr, (char *) NULL);
if (ptr == NF_node && (int) NF_node->var_value->numbr == -1)
(void) get_field(HUGE-1, assign); /* parse record */
if (n->type == Node_param_list)
n = stack_ptr[n->param_cnt];
+ if (n -> magic && assign)
+ fatal ("attempt to set SNMP array variable \"%s\"",
+ concat_exp(ptr->rnode, n -> magic ? 1 : 0));
aptr = assoc_lookup(n, concat_exp(ptr->rnode));
if (deref->type != Node_val)
diff -rc ../gawk-2.11.orig/node.c ./node.c
*** ../gawk-2.11.orig/node.c Mon Nov 13 13:52:13 1989
--- ./node.c Fri Aug 17 15:15:01 1990
fprintf(stderr, "node: new: %0x\n", it);
*** ../gawk-2.11.orig/awk.y Mon Nov 13 13:51:48 1989
--- awk.y Fri Aug 17 16:57:20 1990
{ $$ = node ($3, Node_K_while, $6); }
| LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls
{ $$ = node ($6, Node_K_do, $3); }
+ | LEX_FOR '(' NAME LEX_IN NAME comma exp r_paren opt_nls statement
+ $$ = node ($10, Node_K_arrayfor, make_for_loop(variable($3),
| LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement
$$ = node ($8, Node_K_arrayfor, make_for_loop(variable($3),
*do_split(), *do_system(), *do_int(), *do_close(),
*do_atan2(), *do_sin(), *do_cos(), *do_rand(),
*do_srand(), *do_match(), *do_tolower(), *do_toupper(),
+ *do_band (), *do_bor (),
/* Special functions for debugging */
{ "BEGIN", Node_illegal, LEX_BEGIN, 0, 0 },
{ "END", Node_illegal, LEX_END, 0, 0 },
{ "atan2", Node_builtin, LEX_BUILTIN, 0, do_atan2 },
+ { "bit_and", Node_builtin, LEX_BUILTIN, 0, do_band },
+ { "bit_or", Node_builtin, LEX_BUILTIN, 0, do_bor },
{ "bp", Node_builtin, LEX_BUILTIN, 0, do_bp },
if ((r = lookup(variables, name)) == NULL)
r = install(variables, name,
node(Nnull_string, Node_var, (NODE *) NULL));
*** ../gawk-2.11.orig/main.c Mon Nov 13 13:52:08 1989
--- main.c Fri Aug 17 17:00:30 1990
#define EXTENSIONS 8 /* where to clear */
char awk_opts[] = "F:f:v:caeCVdD";
+ char awk_opts[] = "F:f:v:caeCVdDsS";
char awk_opts[] = "F:f:v:caeCV";
RSTART_node = spc_var("RSTART", make_number(0.0));
SUBSEP_node = spc_var("SUBSEP", make_string("\034", 1));
IGNORECASE_node = spc_var("IGNORECASE", make_number(0.0));
+ AGENT_node = spc_var ("AGENT", make_string ("localhost", 9));
+ COMMUNITY_node = spc_var ("COMMUNITY", make_string ("public", 6));
+ DIAGNOSTIC_node = spc_var ("DIAGNOSTIC", Nnull_string);
+ ERROR_node = spc_var ("ERROR", make_number (0.0));
+ RETRIES_node = spc_var ("RETRIES", make_number (3.0));
+ TIMEOUT_node = spc_var ("TIMEOUT", make_number (10.0));
ENVIRON_node = spc_var("ENVIRON", Nnull_string);
for (i = 0; environ[i]; i++) {