mirror of
https://github.com/simh/simh.git
synced 2026-01-14 07:39:29 +00:00
SCP: Provide a pseudo environment variable SIM_RUNLIMIT_REMAINING
This is available for simh scripts which may want to display the runlimit information via: sim> echo %SIM_RUNLIMIT_REMAINING%
This commit is contained in:
parent
41ab668e97
commit
f79b03f2b7
35
scp.c
35
scp.c
@ -583,6 +583,7 @@ static t_stat sim_sanity_check_register_declarations (DEVICE **devices);
|
||||
static t_stat sim_device_unit_tests (const char *cptr);
|
||||
static void fix_writelock_mtab (DEVICE *dptr);
|
||||
static t_stat _sim_debug_flush (void);
|
||||
static const char *_get_runlimit (void);
|
||||
|
||||
/* Global data */
|
||||
|
||||
@ -3080,6 +3081,7 @@ if (!sim_quiet) {
|
||||
show_version (stdout, NULL, NULL, 0, NULL);
|
||||
}
|
||||
sim_timer_precalibrate_execution_rate ();
|
||||
sim_time = sim_rtime = 0;
|
||||
show_version (stdnul, NULL, NULL, 1, NULL); /* Quietly set SIM_OSTYPE */
|
||||
#if defined (HAVE_PCRE_H)
|
||||
setenv ("SIM_REGEX_TYPE", "PCRE", 1); /* Publish regex type */
|
||||
@ -4913,6 +4915,9 @@ if (!ap) { /* no environment variable found? */
|
||||
sprintf (rbuf, "%s", sim_vm_interval_units);
|
||||
ap = rbuf;
|
||||
}
|
||||
else if (!strcmp ("SIM_RUNLIMIT_REMAINING", gbuf)) {
|
||||
ap = _get_runlimit ();
|
||||
}
|
||||
}
|
||||
if (ap && fixup_needed) { /* substring/substituted needed? */
|
||||
strlcpy (tgbuf, ap, tgbuf_size);
|
||||
@ -8136,34 +8141,44 @@ t_stat set_runlimit (int32 flag, CONST char *cptr)
|
||||
return runlimit_cmd (flag, cptr);
|
||||
}
|
||||
|
||||
t_stat show_runlimit (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr)
|
||||
static const char *_get_runlimit (void)
|
||||
{
|
||||
static char msg[CBUFSIZE];
|
||||
char msgend[CBUFSIZE] = "";
|
||||
|
||||
if (sim_runlimit_enabled) {
|
||||
if (sim_runlimit_switches & SWMASK ('T')) {
|
||||
if (sim_runlimit_d_initial != sim_runlimit_d) {
|
||||
fprintf (st, "%s initially, ", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0));
|
||||
snprintf (msg, sizeof (msg), "%s initially, ", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0));
|
||||
if (sim_is_active (&sim_runlimit_unit))
|
||||
fprintf (st, "and %s remaining\n", sim_fmt_secs (sim_runlimit_d / 1000000.0));
|
||||
snprintf (msgend, sizeof (msgend), "and %s remaining", sim_fmt_secs (sim_runlimit_d / 1000000.0));
|
||||
else
|
||||
fprintf (st, "expired now\n");
|
||||
snprintf (msgend, sizeof (msgend), "expired now");
|
||||
}
|
||||
else
|
||||
fprintf (st, "%s\n", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0));
|
||||
snprintf (msg, sizeof (msg), "%s", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0));
|
||||
}
|
||||
else {
|
||||
if (sim_runlimit_initial != sim_runlimit) {
|
||||
fprintf (st, "%s %s initially, ", sim_fmt_numeric ((double)sim_runlimit_initial), sim_vm_interval_units);
|
||||
snprintf (msg, sizeof (msg), "%s %s initially, ", sim_fmt_numeric ((double)sim_runlimit_initial), sim_vm_interval_units);
|
||||
if (sim_is_active (&sim_runlimit_unit))
|
||||
fprintf (st, "and %s %s remaining\n", sim_fmt_numeric ((double)sim_activate_time (&sim_runlimit_unit)), sim_vm_interval_units);
|
||||
snprintf (msgend, sizeof (msgend), "and %s %s remaining", sim_fmt_numeric ((double)sim_activate_time (&sim_runlimit_unit)), sim_vm_interval_units);
|
||||
else
|
||||
fprintf (st, "expired now\n");
|
||||
snprintf (msgend, sizeof (msgend), "expired now");
|
||||
}
|
||||
else
|
||||
fprintf (st, "%s %s\n", sim_fmt_numeric ((double)sim_runlimit_initial), sim_vm_interval_units);
|
||||
snprintf (msg, sizeof (msg), "%s %s\n", sim_fmt_numeric ((double)sim_runlimit_initial), sim_vm_interval_units);
|
||||
}
|
||||
}
|
||||
else
|
||||
fprintf (st, "Run Limit Disabled\n");
|
||||
snprintf (msg, sizeof (msg), "Run Limit Disabled");
|
||||
strlcat (msg, msgend, sizeof (msg));
|
||||
return msg;
|
||||
}
|
||||
|
||||
t_stat show_runlimit (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr)
|
||||
{
|
||||
fprintf (st, "%s\n", _get_runlimit ());
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user