--------------------- HERCULES TODO IDEAS --------------------- (in absolutely *NO* particular order) ------------------------------------------------------------------------------- *BUG*: FIX PORTABILITY ISSUES that have crept in over time. Remove all "#if defined(__APPLE__) || defined(__FreeBSD__)" statements. You should NOT test for specific platforms. Instead, create a configure.ac test for specific functionality or for feature a specific that your code requires, and then #define HAVE_FEATURE_ABCXYZ if a platform supports it. Then simply use #if defined(HAVE_FEATURE_ABCXYZ) in your Hercules code. That way if a given platform begins supporting a feature that it previously did not support, YOU DON'T HAVE TO CHANGE ANY HERCULES CODE AT ALL. This is called "Writing portable code". ONLY if you cannot design a test for the needed FEATURE within configure.ac may you then add a test for a given platform, and then ONLY in "hostopts.h". Our "hostopts.h" header is the ONLY SOURCE MODULE where tests for specific platforms should be done. Test for the platform and #define your FEATURE accordingly. Elsewhere in Hercules you then test for that #define FEATURE. Windows is the only allowed exception to the rule. You may test for _MSVC_ or _WIN32, etc, but for non-Windows platforms #define HAVE_FEATURE_ABCXYZ and then test for that instead. Refer to "hostopts.h" for an example of the technique I'm referring to. ------------------------------------------------------------------------------- *BUG*: printer FCB parsing is FUBAR (wrong): Old (original) style was: "fcb=66010713192531374361495561", which yields: 66 1 7 13 19 25 31 37 43 61 49 55 61 int FCBMASK[] = {66,1,7,13,19,25,31,37,43,63,49,55,61}; Notice the old style is a string of 26 digits (13 pairs), which are NOT separated by commas. The current parsing code presumes comma separators which is WRONG and incorrectly causes old format to always be rejected. Also notice channel 9 and 12 are on same line number 61. This is valid for old 1403 paper carraige-control tapes, but is invalid on newer 3211 FCB image printers which support only one channel defined per line. We need to fix this (provide supported for BOTH) which is REQUIRED to fix the incorrect parsing/support of the original "fcb=" option format. ------------------------------------------------------------------------------- "Generic-ize" the 'qd' command so that it works for ANY device instead of just dasd devices. SenseId and RDC (Read Device Characteristics) information is valuable information to display for devices other than dasd! (e.g. tape devices for example) ------------------------------------------------------------------------------- BUG: instruction tracing: control registers not being shown for some instructions which use/modify them. We need a better way to determine if FPRs/CRs/ARs should be traced or not. (New bits in OPCODE table?) (see "display_inst_regs" function in "hscmisc.c") Modify/enhance instruction/device tracing to write raw trace information to a file (instead of formatting it to console which is slow/inefficient) and develop a new offline utility to then format/display only the desired information (selected registers, instructions, time range, buffers, etc). Instruction Tracing: ability to specify multiple disparate trace ranges. ------------------------------------------------------------------------------- DUMP command (Windows only) to create on-demand mini-dump. modify fthread to maintain the thread's name in its FTHREAD list of threads and provide a function to return a copy of that information (linked list of thread ids and thread names), and then modify the minidump BuildUserStreams function in bootstrap.c to save that info so we can know which threads are which when we analyze a crash dump. Add thread naming support to *Nix: autoconf: check for availability of pthread_setname_np and pthread_getname_np functions. ------------------------------------------------------------------------------- Suspend/Resume: Add filename option to suspend/Resume command. Resume option to issue start command if resume is successful. Suspend/Resume command needs prompts/error messages: Ask Y/N confirmation during suspend if overwriting existing suspend file, error message when resume command given and machine is not in the reset state. Add missing Suspend/Resume support to tape devices. Add missing Suspend/Resume support to CTC devices. ------------------------------------------------------------------------------- Add 'const' to as many functions' arguments as possible. ------------------------------------------------------------------------------- Document all DIAGNOSE instruction support ------------------------------------------------------------------------------- Per Mark Gaubatz, we need a new dasd util to fix CE/SA alt cyl issue for existing dasds created using the old dasdinit. ------------------------------------------------------------------------------- Card reader: @stack support, like Ivan's tape autoloader, to provide ability to specify different options (ascii/ebcdic) for each i/p file. Then you could stack a VM USERID card in ebcdic followed by a normal ascii text file (which would be auto-translated to ebcdic of course), or vice-versa: an ascii USERID card followed by ebcdic binary data. Would make getting VMARC files into VM much easier without having to mess with a ebcdic USERID card. ------------------------------------------------------------------------------- Maxrates off: reset/disable automatic maxrates ------------------------------------------------------------------------------- Design a more platform generic host cpu features runtime check that checks for the availability of certain host processor features and then point any needed function-pointers to the correct function. That way we can exploit certain host processor features when they're available. Going through a function pointer is inefficient of course (depending on where the function is being used), but depending on what the function provides, it may be more of a gain than a loss. E.g. (WIN64): init_hostinfo: BOOL WINAPI IsProcessorFeaturePresent( PF_COMPARE_EXCHANGE128 ); _INTEGRAL_MAX_BITS (machdep.h ==> _InterlockedCompareExchange128 ==> cmpxchg16b) ------------------------------------------------------------------------------- Design a way for users to define command synonyms. (dynmod?) ------------------------------------------------------------------------------- Windows block device support (i.e. ability to define an entire drive (Windows drive letter / partition) as a Hercules dasd) ------------------------------------------------------------------------------- Full 2540 reader/punch support! mode=1 (normal), mode=2 (binary/"card image") hopper selection, etc. ------------------------------------------------------------------------------- Ability to specify highlighting for console messages via regex pattern. ------------------------------------------------------------------------------- ISSUE: there's the possibility for "socketpair" function to connect to some other socket other than the pair's listening socket due to some other socket on the host already listening for connections on INADDR_LOOPBACK. Fix is to change the "socketpair" function to use a starting port# and SO_REUSEADDR in a 'setsockopt' call and detect (HSO_errno == HSO_EADDRINUSE) return code in its 'bind' call and auto-retry again using next port# (in a loop). Refer to the "console_connection_handler" function for reference. ------------------------------------------------------------------------------- Device or facility per Gerhard Postpischil's 9/20/2007 suggestion that allows one to generate random "problems" (i/o errors, machine checks, etc) for better software error recovery testing. ------------------------------------------------------------------------------- Add new "+rdbwd" 3590-device-only option to set flag in TapeCommands3590 table to allow/accept Read Backward CCW. (Requested by "herc_fun" = Charlie ) ------------------------------------------------------------------------------- Generic native host SCSI support (mostly for tape, but having it opens other interesting possibilities) -------------------------------------------------------------------------------