Virtual selectors

Where ordinary selectors specify a value stored in some object,
virtual selectors specify a function to call to compute a value
associated with some object.

Use them to replace the special case xdump ver by new table
EF_VERSION.

Move configkeys[] to lib/common because nsc_init() needs it to
initialize empfile[EF_VERSION].cadef.
This commit is contained in:
Markus Armbruster 2008-03-04 21:02:00 +01:00
parent 38047a62f7
commit da8a1daeef
12 changed files with 541 additions and 482 deletions

View file

@ -69,6 +69,17 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
valtype = val->val_type;
break;
case NSC_OFF:
if (val->val_as.sym.get) {
do {
ptr = val->val_as.sym.get(val, cnum, ptr);
} while (ptr && val->val_as.sym.get);
if (!ptr) {
valtype = val->val_type;
val->val_cat = NSC_VAL;
break;
}
}
valtype = NSC_LONG;
memb_ptr = ptr;
memb_ptr += val->val_as.sym.off;