Index: trunk/src_plugins/order/constraint.c =================================================================== --- trunk/src_plugins/order/constraint.c (revision 36871) +++ trunk/src_plugins/order/constraint.c (revision 36872) @@ -340,7 +340,12 @@ break; case PCB_ORDC_VAR: - printf("var '$%s'\n", node->val.s); + dst->type = PCB_ORDC_VERR; /* assume error and let var_cb override it */ + + if (ctx->var_cb == NULL) + break; /* everything evaluates to error */ + + ctx->var_cb(ctx, dst, node->val.s); /* no need to convert; grammar ensures static string */ break; case PCB_ORDC_INT: Index: trunk/src_plugins/order/constraint.h =================================================================== --- trunk/src_plugins/order/constraint.h (revision 36871) +++ trunk/src_plugins/order/constraint.h (revision 36872) @@ -68,6 +68,7 @@ /*** application provided callbacks ***/ void (*error_cb)(pcb_ordc_ctx_t *ctx, const char *varname, const char *msg); + void (*var_cb)(pcb_ordc_ctx_t *ctx, pcb_ordc_val_t *dst, const char *varname); }; int pcb_ordc_parse_str(pcb_ordc_ctx_t *ctx, const char *script); @@ -77,7 +78,7 @@ void pcb_ordc_free_tree(pcb_ordc_ctx_t *ctx, pcb_ordc_node_t *node); -pcb_ordc_exec(pcb_ordc_ctx_t *ctx); +int pcb_ordc_exec(pcb_ordc_ctx_t *ctx); /*** For debug ***/ void pcb_ordc_print_tree(FILE *f, pcb_ordc_ctx_t *ctx, pcb_ordc_node_t *node, int indlev);