2022-10-27 SMS. DIRSORT V2.0 is based on DIRSORT V1.2-4. The original program was written by Lyle W. West. The changes for V2.0 were made by Steven M. Schweda (who claims no rights to any of this material). - Added support for ODS5 extended file names. (dirsort.c, vms_rms.h (new)) - Removed/relaxed various string length restrictions (command line, file names, date-time format, ...) (dirsort.c) - Program exit status could be SYSTEM-S-NORMAL (1) after a CLI (syntax) error/warning and its error message. (The wrong variable value was passed to exit().) The mix of exit() and sys$exit() has been resolved in favor of exit(). Various errors could cause program exit with no (or useless) message. (dirsort.c) - Changed behavior to agree with that of DIRECTORY when no matching files were found: - No header (or trailer) is put out. - Message at exit is now "%DIRSORT-W-NOFILES, no files found". - Exit status is now %X10018290 (%RMS-W-FNF). (dirsort.c) - A truncated file specification (/LAYOUT = TRUNCATED) is now displayed with ">" as its last character. So, for example, "123456789012345678901234.txt;12" is a complete 31-character spec, and "123456789012345678901234.txt;1>" is a truncated 32-character (or longer) spec. (dirsort.c) - Updated documentation (/HELP), and removed references to privileges in the /VERSION report. (Note that, despite contrary comments, the function CheckPrv() was absent from V1.2-4.) (AAAREADME.TXT, dirsort.c) - /VERSION report now includes the date-time format, default and the DIRSORT_FORMAT logical name value, if defined. An error message is provided if the format string is illegal. (dirsort.c) - Removed tab characters from messages for reliable rendering. (dirsort.c) - Undocumented use of "PATH" environment variable has been disabled by default. Define C macro ENABLE_PATH_ENVAR at build time to enable it. (dirsort.c) - Translation of the logical name DIRSORT_FORMAT is no longer limited to the process logical name table, so, for example, a system-wide value can be specified. Specify a white-space value (like " ") to restore the default format if an existing definition in a lower-priority table is undesired. (dirsort.c) - Simplified the CLI parsing code preparation. Replaced the program name extracted from the DCL environment with a constant, "DIRSORT". One consequence is that the program no longers claims that its name is "MCR" when invoked using a command like, "mcr sys$disk:[]dirsort /version". (dirsort.c) - Replaced much local code used for parsing file specifications with more use of $PARSE features. This should avoid problems with special characters in ODS5 extended file specs. It also allows the user to specify a general file spec in the parameter, and get a list of files more like that which DIRECTORY gives for the same spec. Some examples of cases where V1.2-4 behaves worse: ; Default directory, highest version of all files. [.dir];-1 Directory "[.dir]", version ;-1 of all files. [.dir]v* Directory "[.dir]", files matching "v*.*;*". (dirsort.c) - Eliminated separate support.c module, and header files: defs.h, support.h, and version.h. Incorporated remaining code into dirsort.c. Removed various constant definitions (in old defs.h) in favor of values from system header files. Removed some unused variables. Moved many variables out of global scope, into main(). Reformed some goofy code. - Eliminated fixdates.com from the kit. (Useful only to Mr. West?) - Removed CC option "/standard=vaxc" from the (new) builders, and the need for it from the C code. (dirsort.c) - Replaced builders to: - Support Alpha, IA64, VAX, and X86_64 hardware architectures. - Place product files in architecture-specific subdirectories. - Eliminate the optional object library (and the DCL script to create it, create-lib.com). Plain object files in a product kit created using "zip -V" should work for a re-LINK. - (MMS) Generate dependencies for C modules automatically. (build_dirsort.com (new), descrip.mms (new), descrip_mkdeps.mms (new, generated), descrip_mkdeps.mms (new), descrip_src.mms (new)) - Bugs: - Program can't deal with more than one directory at a time. - Sub-optimal page layout (wasted space) with /LAYOUT = FILEFIRST or /LAYOUT = TRUNCATE. The maximum length of a truncated name is fixed at 31, not user-specifiable. /TRUNCATE could be independent of /LAYOUT, and could take a length value. - There could still be ignored error conditions, and other coding errors (old and/or new). With changes this extensive, many things are possible, and testing was minimal.