The SD Directory Program This documentation file concerns SD-NEW.ASM and SD-NEW.OBJ, version 4.1 as of October 20, 1981. Version 4.1 is a significant upgrade of the standard "super-directory" program that most RCP/M systems are now using as their "DIR" executor. SD-41 implements many new features over version 3, and has been tested on a wide variety of CP/M systems prior to release. However, due to the large number of equates in the source file, all possible permutations have NOT been tested, and it should be understood that revision 4.1 is experimental in nature, and should not be placed on-line in remote applications until sufficient time has elapsed to allow for initial bug reports from the field. The most significant difference between version 4.1 and version 3.X concerns the ability of SD to search a range of drives and/or user areas for a specified file. This capability is patterned after FILEFIND, but is significantly more useful in that SD will report the sizes of files matched. A new BDOS intercept routine has been added, which although more involved than the FILEFIND method, is more generally applicable and should run "as-is" on most CP/M systems. Thus, by using SD-41, the use of a separate FILEFIND program should be unnecessary. The basic operation of SD is as in previous releases. You merely type "SD", followed by an optional ambiguous or unambiguous filename (as you would with the CCP directory command). Omitting the filename (i.e., "SD [CR]"), will be interpreted as "SD *.*". Similarly, "SD A:" would imply "SD A:*.*" and "SD B:" would imply "SD B:*.*". In addition to the filename option, up to 8 command line options may be specified. If options are to be specified, then the filename must be EXPLICITLY specified by at least a drive code. Option fields are preceded by a single dollar sign as with most Digital Research programs such as MAC, and may be essentially free-form in format. Example: SD A: $s a D rn u0 fp. Note that the reference to the A drives in "A:" is mandatory. Invoking SD with a command of the form "SD $s a D rn u0 fp" would result in SD thinking that $S was the file to be searched for. Note also that spaces and case within the option field are insignificant (i.e., "$ SADrNu0F p" is equivalent to "$ S A D R N U0 F P"). The only exception concerns the "USER" option which will be explained later. Users should also be aware of two restrictions on the command line format. SD scans the entire command line for a dollar sign preceded by at least 1 blank to delimit the beginning of the option field. For this reason, invoking SD with a command line such as "SD $ $AR" is illegal since SD will consider the first dollar sign to be the option field delimiter. If you need to specify a a filename whose first character is a dollar sign, precede it with a drive code as in "SD A:$ $AR". In this instance, SD will consider the first dollar sign insignificant as it is not preceded by a blank. 1 SD-41 Documentation Notes The second restriction is that command line options may be specified once and only once per invocation. That is, "SD A: $SDS" would be illegal since the "S" option is specified twice. This shortcoming is due to the fact that options can be made into defaults at assembly time. The eight options recognized are: "S" - system option : system files will be included in the output rather than being suppressed. "F" - file option : the directory output will be echoed to a disk file named "SD.DIR" on the DEFAULT drive. If SD.DIR already exists, then the directory output will be APPENDED to the end of the file. Otherwise, SD.DIR will be created as a new file. The append feature allows you to build up one massive file on the default drive containing the directories of all of your disks, without having to concantenate a swarm of individual directory files. If you plan to use this feature often, it willbe simpler for you to have a dedicated version on your MASTCAT disk with RESFLG set TRUE. The advantage of this is that you can work through a pile of disks without having to CTRL-C or specify the "R" option everytime you SD a new disk. Failing to do this will result in the allocation vector being invalid, and FREE size will be wrong. "U" - user option : allows the specification of the user number for the directory of the form "Uxx" where the user # is greater than 0, but not greater than a specified value not to exceed 15. The user option specification will be illegal if the user # is out of range, omitted, or if U is specified on a pre-CP/M 2 system. Note that since the user option requires a parameter (i.e., the user number), the user number must immediately follow the "U" option on the command field. That is, "U1" is legal, but "U 1" is not. In this respect, the U option differs from the other options in that embedded spaces ARE significant. "A" - all users : causes SD to display directories of all user areas starting at the user area specified in the U option or, if U option is omitted, the default user area and continuing up to MAXUSR. "R" - reset option : allows for automatic resetting of the disk prior to performing directory search so that the allocation vector will be updated. Same as doing a CTRL-C when changing disks, but handy if you didn't (such as when running a 2 SD-41 Documentation Notes SUBMIT file). Note that the RESFLG equate will force the R option unconditionally each time SD is run. Useful for SDing a stack of disks with the "F" option, but slows down SD considerably in normal use. "N" - no page option : unconditionally disables the page pause option. Useful when running SD in the "F" and/or "A" modes when you don't want the page prompt slowing you down. Note that SD-41 will not put the page-pause prompt into the output file. "P" - printer option : forces all console output to be echoed to the CP/M list device, with the most significant bit set to 0. "D" - all disk option : allows SD to search all disk drives on-line starting with the disk drive specified or implied with the command line filename. For example, "SD B: $D" will result in SD searching all drives beginning with drive B. "SD *.* $D" will result in SD searching all drives beginning with the drive that is logged in. If an unrecognized option (or illegal user option specification) is detected, then the command line will be played back to the console up to the point where the error was detected. However, if the REPERR option is disabled, then SD will keep its mouth shut and ignore everything on the command line past the illegal field. In this situation, an illegally specified user number would default back to the current user number. The option of DISABLING error reporting was included primarily for systems with hidden doors and secret passageways. Shooting off rockets and clanging bells everytime a holswap starts "experimenting" just calls attention to the fact that there really IS something behind that hollow- sounding wall after all (if you get my drift). As an added convenience, it is possible to "hard-wire" some or all of the command line options. For example, if you want SD to ALWAYS perform a reset of the disk system before putting its show on the road, you can do just that. For details, see the comments preceding the option field lookup table in the assembler source file. Finally, if the all-disk and/or all-user options are enabled, it may be desirable to restrict searches. To facilitate this, a table is included in SD (beginning at label "LODRV" and continuing through "HIDRV"). The table consists of a single byte for each drive to be searched beginning with A. Each byte may be in the range of 0-15 mod 15 and defines the highest user number that SD will search for that particular drive. The highest drive number to search is defined by the length of the table. If four DBs are present between LODRV and 3 SD-41 Documentation Notes HIDRV, then drives A-D can be searched. The source file includes the LODRV-HIDRV table in its maximum configuration for 16 drives. However, it is recommended that you delete DBs referencing drives that aren't available on your system. Although SD will intercept attempts to search non-existant drives, there really isn't any point in allowing SD to always search drive C when you only have 2 logical drives; and depending on how your BIOS is constructed and how long it monkeys around before advising the BDOS of the select error, it could save some time. A THOUGHT FROM "THE LAST REVISOR" If you sit down and figure out the number of permutations of options and equates in the latest versions of SD, you'll understand why there aren't any warranties as to the absence of entomological cybernoids. I leave it to the CP/M community to smoke out what bugs may pop-up when a certain combination of variables occurs. If you find any bugs, please leave an advisory or a fix on either TCBBS or the Hyde Park RCP/M so that they can be exterminated. Finally, my latest revisions expanded the size of the load module considerably, and it is now weighing in at just under 2K if all of the options are enabled. A program of this type has a tendency to be widely propogated throughout a disk library, and since 2K is the block size of most double and quad-density systems, I feel that it is important to try and keep SD under 2K if at all possible. That's why some of my code may be cryptic in some places - I've sacrified clarity for code reductions. If you plan to make public-domain enhancements to SD which would push it over the 2K mark, ask yourself whether its worth tying up an additional disk block. This is also an invitation for someone less lazy than myself to further optimize the code to reduce SD to as compact a package as possible (thus making room for more enhancements). For my part, I quit when I got it under 2K. It works, it fits and I'm ready to move onto something else. I pass the torch. David Boruff Knoxville, Tennessee 4 SD-41 Documentation Notes .