If you have a few examine lines in your SDA.INIT file it may be confusing to have data displayed without knowing which field is which. I often wanted a way to do something like a WRITE SYS$OUTPUT or SET VERIFY or DEBUG within SDA. As far as I know there is no way to do any of these. I finally went ahead and created my own SDA extension to simply write text to the screen.
Now you can add DISPLAY lines to your SDA.INIT to tell you want is being looked at. You can also add comments to the output file if you do SET OUTPUT in SDA to document what you are looking at.
Now my SDA.INIT looks like this.
display IN SYS$LOGIN:SDA.INIT display . display "EXE$GQ_BOOTTIME - Last Boot time" examine/time EXE$GQ_BOOTTIME display "EXE$GQ_SYSTIME - Current System Time" examine/time EXE$GQ_SYSTIME display "EXE$GQ_UTC - UTC Time" examine/time EXE$GQ_UTC display "EXE$GQ_TDF - Time zone Differential Factor" examine/time EXE$GQ_TDF display . display "EXE$GL_ABSTIM - Uptime in Seconds" examine EXE$GL_ABSTIM display "EXE$GL_ABSTIM_TICS - Uptime in elapsed soft ticks (10 -milliseconds" examine EXE$GL_ABSTIM_TICS display "EXE$GQ_TODCBASE - Time the clock was last adjusted" examine/time EXE$GQ_TODCBASE display "EXE$GQ_SAVED_HWCLOCK - Time of last time adjustment" examine/time EXE$GQ_SAVED_HWCLOCK display . display "EXE$GQ_1ST_TIME - Expiration time of most imminent time -dependent request" examine/time EXE$GQ_1ST_TIME display "EXE$GL_DTSSFLAGS - Least Significant bit set if DTSS is enabled" examine EXE$GL_DTSSFLAGS display . display "EXE$GQ_CPUTYPE - CPU type" examine EXE$GQ_CPUTYPE display . display "EXE$GL_TIMEADJUST - Time Adjust - Drifting Time" exam EXE$GL_TIMEADJUST display "exe$gl_ticklength - Tick Length for Drifting Time" exam exe$gl_ticklength display . ! This only works on VAX systems, Alpha Systems ! will stop processing the SDA.INIT if this ! line is uncommented in SDA.INIT. ! examine/time EXE$GL_TODR - only on VAX display "Done SYS$LOGIN:SDA.INIT"
This is the code used for display$sda.c, build instructions are in the comments.
////////////////////////////////////////////// // // DISPLAY$SDA.C // // Peter Weaver 27-OCT-2025 Copied MBX$SDA.C and removed a lot of code // // A simple program that takes whatever is passed to it and displays it on the screen. // This is useful in SDA.INIT files to tell the user what is being done. If the word DISPLAY // is followed by a single space and a period, then a blank line is displayed. If DISPLAY // is followed by whitespace then the whitespace is displayed. // If quotes are not used then SDA converts the line to uppercase. // // For example, SDA.INIT might look like this; // display "Look at EXE$GQ_BOOTTIME - Last Boot Time" // examine EXE$GQ_BOOTTIME // display . // display "EXE$GQ_SYSTIME - Current System Time" // examine/time EXE$GQ_SYSTIME // display "EXE$GQ_UTC - UTC Time" // examine/time EXE$GQ_UTC // display . // display "EXE$GQ_TODCBASE - Time the clock was last adjusted" // examine/time EXE$GQ_TODCBASE // display "EXE$GQ_SAVED_HWCLOCK - Time of last time adjustment" // examine/time EXE$GQ_SAVED_HWCLOCK // display . // display "EXE$GL_TIMEADJUST - Time Adjust - Drifting Time" // examine EXE$GL_TIMEADJUST // display "exe$gl_ticklength - Tick Length for Drifting Time" // examine exe$gl_ticklength // display SDA.INIT COMPLETE // // Build with these commands; // $! // $ cc display$sda+sys$library:sys$lib_c/lib // $ link/share - // display$sda.obj, - // sys$library:vms$volatile_private_interfaces /library, - // sys$input/option // symbol_vector=(sda$extend=procedure) // symbol_vector=(sda$extend_version=data) // $ // $ define display$sda sys$disk:[]display$sda ! or, copy display$sda.exe sys$library: // // ////////////////////////////////////////////// // Imported definitions #define __NEW_STARLET 1 #include#include #include #include // Global variables int sda$extend_version = SDA_FLAGS$K_VERSION; /////////////////////////////////////////////////////////////////////////////// // // This is the main entry point in SDA extension routine called from // within SDA. // // sda$extend transfer_table, cmd_line, sda_flags // // transfer_table - pointer to the routine transfer table // cmd_line - address of descriptor of the command line passed // sda_flags - flags // void sda$extend (int *transfer_table, struct dsc$descriptor_s *cmd_line, SDA_FLAGS sda_flags) { int status; // // Initialize the table and establish the condition handler // sda$vector_table = transfer_table; lib$establish ( sda$cond_handler ); // // If invoked with no parameter, display the announcement and exit // if ( cmd_line->dsc$w_length == 0 ) { status = sda$print ( "DISPLAY - Displays text on the terminal" ); sda$skip_lines (1); return; } if (strncmp (cmd_line->dsc$a_pointer, " .", cmd_line->dsc$w_length) == 0) { status = sda$print ( "" ); return; } sda$print ("!AS", cmd_line); return; }