SCP: Make expression evaluation consistent

This commit is contained in:
Mark Pizzolato 2018-06-13 00:36:22 -07:00
parent 2bf523dea0
commit 3973963b0c

27
scp.c
View file

@ -3409,11 +3409,13 @@ do {
sim_do_ocptr[sim_do_depth] = cptr = read_line (cbuf, sizeof(cbuf), fpin);/* get cmd line */ sim_do_ocptr[sim_do_depth] = cptr = read_line (cbuf, sizeof(cbuf), fpin);/* get cmd line */
sim_goto_line[sim_do_depth] += 1; sim_goto_line[sim_do_depth] += 1;
} }
sim_sub_args (cbuf, sizeof(cbuf), do_arg); /* substitute args */
if (cptr == NULL) { /* EOF? */ if (cptr == NULL) { /* EOF? */
stat = SCPE_OK; /* set good return */ stat = SCPE_OK; /* set good return */
break; break;
} }
sim_debug (SIM_DBG_DO, sim_dflt_dev, "Input Command: %s\n", cbuf);
sim_sub_args (cbuf, sizeof(cbuf), do_arg); /* substitute args */
sim_debug (SIM_DBG_DO, sim_dflt_dev, "Expanded Command: %s\n", cbuf);
if (*cptr == 0) /* ignore blank */ if (*cptr == 0) /* ignore blank */
continue; continue;
if (echo) /* echo if -v */ if (echo) /* echo if -v */
@ -3442,6 +3444,7 @@ do {
} }
else else
stat = SCPE_UNK; /* bad cmd given */ stat = SCPE_UNK; /* bad cmd given */
sim_debug (SIM_DBG_DO, sim_dflt_dev, "Command '%s', Result: 0x%X - %s\n", cmdp->name, stat, sim_error_text (stat));
echo = sim_do_echo; /* Allow for SET VERIFY */ echo = sim_do_echo; /* Allow for SET VERIFY */
stat_nomessage = stat & SCPE_NOMESSAGE; /* extract possible message supression flag */ stat_nomessage = stat & SCPE_NOMESSAGE; /* extract possible message supression flag */
stat_nomessage = stat_nomessage || (!sim_show_message);/* Apply global suppression */ stat_nomessage = stat_nomessage || (!sim_show_message);/* Apply global suppression */
@ -13951,20 +13954,13 @@ if (isalpha (*data) || (*data == '_')) {
rptr = find_reg_glob (data, &gptr, &dptr); rptr = find_reg_glob (data, &gptr, &dptr);
if (rptr) { if (rptr) {
*svalue = (t_svalue)get_rval (rptr, 0); *svalue = (t_svalue)get_rval (rptr, 0);
sprint_val (string + 1, *svalue, 10, string_size - 2, PV_LEFTSIGN); sprint_val (string, *svalue, 10, string_size - 1, PV_LEFTSIGN);
*string = '"';
strlcpy (&string[strlen (string)], "\"", string_size - strlen (string));
return TRUE; return TRUE;
} }
gptr = _sim_get_env_special (data, string + 1, string_size - 2); gptr = _sim_get_env_special (data, string, string_size - 1);
if (gptr) { if (gptr) {
t_bool numeric; *svalue = strtotsv(string, &gptr, 0);
return ((*gptr == '\0') && (*string));
*string = '"';
*svalue = strtotsv(string + 1, &gptr, 0);
numeric = (*gptr == '\0') || ((*gptr == '"') && (gptr[1] == '\0'));
strlcpy (&string[strlen (string)], "\"", string_size - strlen (string));
return numeric;
} }
else { else {
data = ""; data = "";
@ -13978,12 +13974,11 @@ if ((data[0] == '"') && (data_size > 1) && (data[data_size - 1] == '"'))
strlcpy (string, data, string_size); strlcpy (string, data, string_size);
if (string[0] == '\0') { if (string[0] == '\0') {
*svalue = strtotsv(data, &gptr, 0); *svalue = strtotsv(data, &gptr, 0);
snprintf (string, string_size - 1, "\"%s\"", data); return ((*gptr == '\0') && (*data));
return (*gptr == '\0');
} }
sim_sub_args (string, string_size, sim_exp_argv); sim_sub_args (string, string_size, sim_exp_argv);
*svalue = strtotsv(string + 1, &gptr, 0); *svalue = strtotsv(string, &gptr, 0);
return ((*gptr == '\"') && ((gptr - string) == (strlen (string) - 2))); return ((*gptr == '\0') && (*string));
} }
/* /*