From de9fc84fd46058e0ca8df689186a27698d553631 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 29 Dec 2014 14:03:43 -0800 Subject: [PATCH] SCP: added flexibility to search specifier parsing to fallback to register value format if the VM supplied parse_sym() doesn't handle the value provided. --- scp.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/scp.c b/scp.c index 77f85763..b4cc29e5 100644 --- a/scp.c +++ b/scp.c @@ -401,8 +401,8 @@ FILE *stdnul; /* Commands support routines */ -SCHTAB *get_rsearch (char *cptr, int32 radix, SCHTAB *schptr); -SCHTAB *get_asearch (char *cptr, int32 radix, SCHTAB *schptr); +SCHTAB *get_rsearch (const char *cptr, int32 radix, SCHTAB *schptr); +SCHTAB *get_asearch (const char *cptr, int32 radix, SCHTAB *schptr); int32 test_search (t_value *val, SCHTAB *schptr); static const char *get_glyph_gen (const char *iptr, char *optr, char mchar, t_bool uc, t_bool quote, char escape_char); int32 get_switches (char *cptr); @@ -7644,7 +7644,7 @@ return pptr; schptr if valid search specification */ -SCHTAB *get_rsearch (char *cptr, int32 radix, SCHTAB *schptr) +SCHTAB *get_rsearch (const char *cptr, int32 radix, SCHTAB *schptr) { int32 c, logop, cmpop; t_value logval, cmpval; @@ -7676,6 +7676,12 @@ for (logop = cmpop = -1; (c = *cptr++); ) { /* loop thru clauses */ } else return NULL; } /* end for */ +if (schptr->count != 1) { + free (schptr->mask); + schptr->mask = calloc (sim_emax, sizeof(*schptr->mask)); + free (schptr->comp); + schptr->comp = calloc (sim_emax, sizeof(*schptr->comp)); + } if (logop >= 0) { schptr->logic = logop; schptr->mask[0] = logval; @@ -7699,11 +7705,12 @@ return schptr; schptr if valid search specification */ -SCHTAB *get_asearch (char *cptr, int32 radix, SCHTAB *schptr) +SCHTAB *get_asearch (const char *cptr, int32 radix, SCHTAB *schptr) { int32 c, logop, cmpop; t_value *logval, *cmpval; t_stat reason; +const char *ocptr = cptr; const char *sptr; char gbuf[CBUFSIZE]; const char logstr[] = "|&^", cmpstr[] = "=!><"; @@ -7720,7 +7727,7 @@ for (logop = cmpop = -1; (c = *cptr++); ) { /* loop thru clauses */ if (reason > 0) { free (logval); free (cmpval); - return NULL; + return get_rsearch (ocptr, radix, schptr); } } else if ((sptr = strchr (cmpstr, c))) { /* check for boolop */ @@ -7734,7 +7741,7 @@ for (logop = cmpop = -1; (c = *cptr++); ) { /* loop thru clauses */ if (reason > 0) { free (logval); free (cmpval); - return NULL; + return get_rsearch (ocptr, radix, schptr); } } else {