SCP: Added routine to format time in seconds down to usecs
This commit is contained in:
parent
67213a53da
commit
efabcb9856
2 changed files with 83 additions and 14 deletions
76
scp.c
76
scp.c
|
@ -228,6 +228,7 @@
|
|||
#include <signal.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#if defined(_WIN32)
|
||||
#include <direct.h>
|
||||
#include <io.h>
|
||||
|
@ -4617,6 +4618,8 @@ if (sim_clock_queue == QUEUE_LIST_END)
|
|||
fprintf (st, "%s event queue empty, time = %.0f, executing %.0f instructios/sec\n",
|
||||
sim_name, sim_time, sim_timer_inst_per_sec ());
|
||||
else {
|
||||
const char *tim;
|
||||
|
||||
fprintf (st, "%s event queue status, time = %.0f, executing %.0f instructions/sec\n",
|
||||
sim_name, sim_time, sim_timer_inst_per_sec ());
|
||||
accum = 0;
|
||||
|
@ -4627,13 +4630,17 @@ else {
|
|||
if (uptr == &sim_expect_unit)
|
||||
fprintf (st, " Expect fired");
|
||||
else
|
||||
if ((dptr = find_dev_from_unit (uptr)) != NULL)
|
||||
if ((dptr = find_dev_from_unit (uptr)) != NULL) {
|
||||
fprintf (st, " %s", sim_dname (dptr));
|
||||
if (dptr->numunits > 1)
|
||||
fprintf (st, " unit %d", (int32) (uptr - dptr->units));
|
||||
}
|
||||
else
|
||||
fprintf (st, " Unknown");
|
||||
fprintf (st, " at %d (%.0f usecs) %s\n", accum + uptr->time,
|
||||
((accum + uptr->time)*1000000.0)/sim_timer_inst_per_sec (),
|
||||
(uptr->flags & UNIT_IDLE) ? " (Idle capable)" : "");
|
||||
tim = sim_fmt_secs((accum + uptr->time)/sim_timer_inst_per_sec ());
|
||||
fprintf (st, " at %d%s%s%s%s\n", accum + uptr->time,
|
||||
(*tim) ? " (" : "", tim, (*tim) ? ")" : "",
|
||||
(uptr->flags & UNIT_IDLE) ? " (Idle capable)" : "");
|
||||
accum = accum + uptr->time;
|
||||
}
|
||||
}
|
||||
|
@ -8657,6 +8664,67 @@ if (sim_deb && (sim_deb != stdout))
|
|||
return SCPE_OK;
|
||||
}
|
||||
|
||||
const char *sim_fmt_secs (double seconds)
|
||||
{
|
||||
static char buf[60];
|
||||
char frac[16] = "";
|
||||
char *sign = "";
|
||||
double val = seconds;
|
||||
double days, hours, mins, secs, msecs, usecs;
|
||||
|
||||
if (val == 0.0)
|
||||
return "";
|
||||
if (val < 0.0) {
|
||||
sign = "-";
|
||||
val = -val;
|
||||
}
|
||||
days = floor (val / (24.0*60.0*60.0));
|
||||
val -= (days * 24.0*60.0*60.0);
|
||||
hours = floor (val / (60.0*60.0));
|
||||
val -= (hours * 60.0 * 60.0);
|
||||
mins = floor (val / 60.0);
|
||||
val -= (mins * 60.0);
|
||||
secs = floor (val);
|
||||
val -= secs;
|
||||
val *= 1000.0;
|
||||
msecs = floor (val);
|
||||
val -= msecs;
|
||||
val *= 1000.0;
|
||||
usecs = floor (val+0.5);
|
||||
if (usecs == 1000.0) {
|
||||
usecs = 0.0;
|
||||
msecs += 1;
|
||||
}
|
||||
if ((msecs > 0.0) || (usecs > 0.0)) {
|
||||
sprintf (frac, ".%03.0f%03.0f", msecs, usecs);
|
||||
while (frac[strlen (frac) - 1] == '0')
|
||||
frac[strlen (frac) - 1] = '\0';
|
||||
if (strlen (frac) == 1)
|
||||
frac[0] = '\0';
|
||||
}
|
||||
if (days > 0)
|
||||
sprintf (buf, "%s%.0f %02.0f:%02.0f:%02.0f%s days", sign, days, hours, mins, secs, frac);
|
||||
else
|
||||
if (hours > 0)
|
||||
sprintf (buf, "%s.0f:%02.0f:%02.0f%s hours", sign, hours, mins, secs, frac);
|
||||
else
|
||||
if (mins > 0)
|
||||
sprintf (buf, "%s%.0f:%02.0f%s minutes", sign, mins, secs, frac);
|
||||
else
|
||||
if (secs > 0)
|
||||
sprintf (buf, "%s%.0f%s seconds", sign, secs, frac);
|
||||
else
|
||||
if (msecs > 0) {
|
||||
if (usecs > 0)
|
||||
sprintf (buf, "%s%.0f%03.0f usecs", sign, msecs, usecs);
|
||||
else
|
||||
sprintf (buf, "%s%.0f msecs", sign, msecs);
|
||||
}
|
||||
else
|
||||
sprintf (buf, "%s%.0f usecs", sign, usecs);
|
||||
return buf;
|
||||
}
|
||||
|
||||
/* Event queue package
|
||||
|
||||
sim_activate add entry to event queue
|
||||
|
|
21
scp.h
21
scp.h
|
@ -148,7 +148,7 @@ int sim_isprint (char c);
|
|||
int sim_isdigit (char c);
|
||||
int sim_isgraph (char c);
|
||||
int sim_isalnum (char c);
|
||||
int sim_strncasecmp (const char* string1, const char* string2, size_t len);
|
||||
int sim_strncasecmp (const char *string1, const char *string2, size_t len);
|
||||
CONST char *get_sim_opt (int32 opt, CONST char *cptr, t_stat *st);
|
||||
const char *put_switches (char *buf, size_t bufsize, uint32 sw);
|
||||
CONST char *get_glyph (const char *iptr, char *optr, char mchar);
|
||||
|
@ -162,12 +162,13 @@ t_stat sim_decode_quoted_string (const char *iptr, uint8 *optr, uint32 *osize);
|
|||
char *sim_encode_quoted_string (const uint8 *iptr, uint32 size);
|
||||
void fprint_buffer_string (FILE *st, const uint8 *buf, uint32 size);
|
||||
t_value strtotv (CONST char *cptr, CONST char **endptr, uint32 radix);
|
||||
int Fprintf (FILE *f, const char* fmt, ...) GCC_FMT_ATTR(2, 3);
|
||||
int Fprintf (FILE *f, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
|
||||
t_stat sim_set_memory_load_file (const unsigned char *data, size_t size);
|
||||
int Fgetc (FILE *f);
|
||||
t_stat fprint_val (FILE *stream, t_value val, uint32 rdx, uint32 wid, uint32 fmt);
|
||||
t_stat sprint_val (char *buf, t_value val, uint32 rdx, uint32 wid, uint32 fmt);
|
||||
t_stat sim_print_val (t_value val, uint32 radix, uint32 width, uint32 format);
|
||||
const char *sim_fmt_secs (double seconds);
|
||||
char *read_line (char *cptr, int32 size, FILE *stream);
|
||||
void fprint_reg_help (FILE *st, DEVICE *dptr);
|
||||
void fprint_set_help (FILE *st, DEVICE *dptr);
|
||||
|
@ -208,9 +209,9 @@ t_stat show_dev_debug (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST cha
|
|||
const char *sim_error_text (t_stat stat);
|
||||
t_stat sim_string_to_stat (const char *cptr, t_stat *cond);
|
||||
t_stat sim_cancel_step (void);
|
||||
void sim_printf (const char* fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
void sim_perror (const char* msg);
|
||||
t_stat sim_messagef (t_stat stat, const char* fmt, ...) GCC_FMT_ATTR(2, 3);
|
||||
void sim_printf (const char *fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
void sim_perror (const char *msg);
|
||||
t_stat sim_messagef (t_stat stat, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
|
||||
void sim_data_trace(DEVICE *dptr, UNIT *uptr, const uint8 *data, const char *position, size_t len, const char *txt, uint32 reason);
|
||||
void sim_debug_bits_hdr (uint32 dbits, DEVICE* dptr, const char *header,
|
||||
BITFIELD* bitdefs, uint32 before, uint32 after, int terminate);
|
||||
|
@ -222,17 +223,17 @@ void sim_debug_bits (uint32 dbits, DEVICE* dptr, BITFIELD* bitdefs,
|
|||
#if defined(__cplusplus)
|
||||
#ifdef CANT_USE_MACRO_VA_ARGS
|
||||
#define _sim_debug sim_debug
|
||||
void sim_debug (uint32 dbits, void* dptr, const char* fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
void sim_debug (uint32 dbits, void* dptr, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
#else
|
||||
void _sim_debug (uint32 dbits, void* dptr, const char* fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
void _sim_debug (uint32 dbits, void* dptr, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
#define sim_debug(dbits, dptr, ...) do { if (sim_deb && dptr && ((dptr)->dctrl & dbits)) _sim_debug (dbits, dptr, __VA_ARGS__);} while (0)
|
||||
#endif
|
||||
#else
|
||||
#ifdef CANT_USE_MACRO_VA_ARGS
|
||||
#define _sim_debug sim_debug
|
||||
void sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
void sim_debug (uint32 dbits, DEVICE* dptr, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
#else
|
||||
void _sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
void _sim_debug (uint32 dbits, DEVICE* dptr, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
|
||||
#define sim_debug(dbits, dptr, ...) do { if (sim_deb && dptr && ((dptr)->dctrl & dbits)) _sim_debug (dbits, dptr, __VA_ARGS__);} while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
@ -299,7 +300,7 @@ extern t_stat parse_sym (CONST char *cptr, t_addr addr, UNIT *uptr, t_value *val
|
|||
The other per-simulator pointers can be overrriden by the init routine */
|
||||
|
||||
WEAK extern void (*sim_vm_init) (void);
|
||||
extern char* (*sim_vm_read) (char *ptr, int32 size, FILE *stream);
|
||||
extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream);
|
||||
extern void (*sim_vm_post) (t_bool from_scp);
|
||||
extern CTAB *sim_vm_cmd;
|
||||
extern void (*sim_vm_sprint_addr) (char *buf, DEVICE *dptr, t_addr addr);
|
||||
|
|
Loading…
Add table
Reference in a new issue