- Let dynamically loaded (Shared Library) routines do argument checking
if they've been successfully loaded.
- Properly cast file descriptors into SOCKET when stored in the fd_handle
- Clean up error paths when opening tun/tap transports - potential leaks.
- Avoid possible string overflow when opening a tap device on Linux
- Try another way to ignore a return from fread() without getting
warnings.
These were possibly useful options when asynch support was being
added long ago. Async simulator I/O is quite stable and should always
be leveraged whenever pthreads is available.
Card decks will never be excessively large (> uint32) since there never
was a computer room big enough to hold that many cards. :-)
Hopper counts and size are all of type t_addr since they are referenced
relative to uptr->pos which tracks the hopper position. That state is
managed so position is properly managed across a SAVE/RESTORE.
On some systems that use sim_card, t_addr is 64bits, hence
make vax the primary build target and microvax3900 the copied result.
The microvax3900 binary name was added when all the different VAX
simulator models were add to simh and each was appropriately named
based on the system model name of each respective simulator.
The vax simulator name was the earliest vax implemented so a binary
of that name is produced for upward compatibility for existing users.
Producing the vax simulator and then copying it to microvax3900
produces equivalent results, but is easier to auto convert to cmake
build configuration files which then will generate a vax project
file when cmake is generating those.
Programmatic interval timers are not proper candidates for calibrated
clocks since the interval values can change arbitrarily under program
control and then interfer with attempts at proper calibration.
If libpcreposix isn't available, we can't fall back to the local
regex.h since the default C runtime on Linux and OS/X implementations
of the regex functionality doesn't ever match regular expressions
with imbedded newlines.