SCP: Add . pseudo symbol to reference the most recent address
Useful in EXAMINE and DEPOSIT.
This commit is contained in:
parent
da3f5359bb
commit
9122a9f196
2 changed files with 24 additions and 10 deletions
BIN
doc/simh_doc.doc
BIN
doc/simh_doc.doc
Binary file not shown.
34
scp.c
34
scp.c
|
@ -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,17 +7529,27 @@ if (max && strncmp (cptr, "ALL", strlen ("ALL")) == 0) { /* ALL? */
|
|||
*hi = max;
|
||||
}
|
||||
else {
|
||||
if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */
|
||||
tptr = cptr + strlen ("$");
|
||||
*hi = *lo = (t_addr)sim_last_val;
|
||||
if ((strncmp (cptr, ".", strlen (".")) == 0) && /* .? */
|
||||
((cptr[1] == '\0') ||
|
||||
(cptr[1] == '-') ||
|
||||
(cptr[1] == ':') ||
|
||||
(cptr[1] == '/'))) {
|
||||
tptr = cptr + strlen (".");
|
||||
*lo = *hi = sim_last_addr;
|
||||
}
|
||||
else {
|
||||
if (dptr && sim_vm_parse_addr) /* get low */
|
||||
*lo = sim_vm_parse_addr (dptr, cptr, &tptr);
|
||||
else
|
||||
*lo = (t_addr) strtotv (cptr, &tptr, rdx);
|
||||
if (cptr == tptr) /* error? */
|
||||
return NULL;
|
||||
if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */
|
||||
tptr = cptr + strlen ("$");
|
||||
*hi = *lo = (t_addr)sim_last_val;
|
||||
}
|
||||
else {
|
||||
if (dptr && sim_vm_parse_addr) /* get low */
|
||||
*lo = sim_vm_parse_addr (dptr, cptr, &tptr);
|
||||
else
|
||||
*lo = (t_addr) strtotv (cptr, &tptr, rdx);
|
||||
if (cptr == tptr) /* error? */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if ((*tptr == '-') || (*tptr == ':')) { /* range? */
|
||||
cptr = tptr + 1;
|
||||
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue