SCP: Add . pseudo symbol to reference the most recent address

Useful in EXAMINE and DEPOSIT.
This commit is contained in:
Mark Pizzolato 2016-09-26 18:23:55 -07:00
parent da3f5359bb
commit 9122a9f196
2 changed files with 24 additions and 10 deletions

Binary file not shown.

16
scp.c
View file

@ -493,6 +493,7 @@ volatile int32 stop_cpu = 0;
static char **sim_argv;
t_value *sim_eval = NULL;
static t_value sim_last_val;
static t_addr sim_last_addr;
FILE *sim_log = NULL; /* log file */
FILEREF *sim_log_ref = NULL; /* log file file reference */
FILE *sim_deb = NULL; /* debug file */
@ -7528,6 +7529,15 @@ if (max && strncmp (cptr, "ALL", strlen ("ALL")) == 0) { /* ALL? */
*hi = max;
}
else {
if ((strncmp (cptr, ".", strlen (".")) == 0) && /* .? */
((cptr[1] == '\0') ||
(cptr[1] == '-') ||
(cptr[1] == ':') ||
(cptr[1] == '/'))) {
tptr = cptr + strlen (".");
*lo = *hi = sim_last_addr;
}
else {
if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */
tptr = cptr + strlen ("$");
*hi = *lo = (t_addr)sim_last_val;
@ -7540,6 +7550,7 @@ else {
if (cptr == tptr) /* error? */
return NULL;
}
}
if ((*tptr == '-') || (*tptr == ':')) { /* range? */
cptr = tptr + 1;
if (dptr && sim_vm_parse_addr) /* get high */
@ -7559,6 +7570,7 @@ else {
}
else *hi = *lo;
}
sim_last_addr = *hi;
if (term && (*tptr++ != term))
return NULL;
return tptr;
@ -9469,6 +9481,7 @@ t_stat sim_set_expect (EXPECT *exp, CONST char *cptr)
char gbuf[CBUFSIZE];
CONST char *tptr;
CONST char *c1ptr;
t_bool after_set = FALSE;
uint32 after = exp->after;
int32 cnt = 0;
t_stat r;
@ -9488,13 +9501,14 @@ if ((!strncmp(gbuf, "HALTAFTER=", 10)) && (gbuf[10])) {
after = (uint32)get_uint (&gbuf[10], 10, 100000000, &r);
if (r != SCPE_OK)
return sim_messagef (SCPE_ARG, "Invalid Halt After Value\n");
after_set = TRUE;
cptr = tptr;
}
if ((*cptr != '"') && (*cptr != '\''))
return sim_messagef (SCPE_ARG, "String must be quote delimited\n");
cptr = get_glyph_quoted (cptr, gbuf, 0);
return sim_exp_set (exp, gbuf, cnt, (after ? after : exp->after), sim_switches, cptr);
return sim_exp_set (exp, gbuf, cnt, (after_set ? after : exp->after), sim_switches, cptr);
}
/* Clear expect */