A directory utility by Don Schmidt Atree v1.3 -- May 25, 1989 -- Copyright 1989 (pending) This version of Atree supercedes version 1.1 and contains a great many of the "Future Enhancements" listed at the end of the DOC file accompanying that version. However, most of the new routines have been rendered non functional in this version -- you will have to become a registered user to obtain the fully functional version of Atree v1.3. Atree is "freeware" at this time. It may be freely distributed, but not sold, by anyone. If you acquire the program and like it, please support the author and become a registered user by sending $20 to: Don Schmidt 9425 Stanfield Ct. Stockton, California. 95209 A fully functional version of Atree v1.3 will be returned to you. If you wish, include a phone number or User ID number and I will upload the functional version to you. Registered users will be entitled to one free version update and to reduced rates on all subsequent versions. Atree has no warranty or guarantee. The author assumes no responsibility whatsoever for any effects, good or bad, that Atree may have on hardware or software. No portion of this program was intentionally designed by its author to do any damage to hardware or software or to cause any destruction or distortion of any data, i.e., it contains no intentional trojan horses or viruses of any kind. However, the author advises that caution be used with versions of the program not received directly by registered users from the author. About Atree: Atree is a disk utility which imitates similar utilities widely available on IBM compatibles (PC Tools, XTree, QuickDos, etc.). The intent is to allow the user a graphic representation of the entire (or any portion of the entire) directory structure on a disk device, including the files in each directory, and the capability of moving quickly through the "tree" to a directory to access its files for purposes of copying, deleting, moving, viewing, editing, etc. Atree currently supports and will read into memory a directory tree that has a maximum depth of 65536 directories and no more than 65536 subdirectories total for the entire tree. (This is because Atree currently supports a spreadsheet type matrix of 65536 columns, each column representing the subdirectories of a parent directory and 65536 rows representing a directory with the first of its children directly to the right of it, and only a total of 65536 rows currently supported). It is not known how the program will behave if the total number of directories in a tree exceeds 65536 or if the depth of the tree exceeds 65536 generations. Although Atree can support a maximum depth of 65536 directories not to exceed 65536 files total in all directories for display purposes, it can only support a maximum depth of 512 directories for purposes of deleting, moving, copying, pruning, and grafting, or using any other function requiring a LOCK on a directory. Additionally, there are more stringent limitations involved in the use of the "Replace from here" and similar routines (see the descriptions of such functions below under the "Tree Menu"). Atree Instructions: NOTE: If you are a first time user of Atree and do not have a file called Atree.Config in your s: directory, then running Atree will result in a requester indicating Failed: Object not found. Select CONTINUE and Atree will continue to load and intialize without problem. You should set up your config file during your first session; see instructions for the CONFIG menu below. If you are a user of a previous version of a Atree and are using this version for the first time, it is recommended that you delete or move the Atree.Config file from your s: directory and redefine your configs on your first run of this version. Running the program. Atree Operates only from the CLI. The general format of the command should be: "run atree pathname pathname pathname ......". Examples: run atree df0: df1: dh0: ram: df1:utilities df1:pictures/flowers The above reads into memory six trees. The first four will be read from the ROOT directory of the indicated devices, and the last two will be trees read from the indicated subdirectories of the indicated devices. run atree dh1: dh1:c_sources dh1:c_objects The above reads into memory the three trees from the same device, dh1: The first tree will be the entire tree starting with the ROOT directory, and the second and third will be the subtrees starting with the c_sources and c_objects directories respectively. run atree df0: df0: df0: The above reads into memory the entire tree of df0: three times -- no good reason for doing it, but it can be done. run atree volume_1: volume_2: volume_3: The above reads the entire tree starting from the ROOT directory of three disks whose volume names are as indicated. The system will prompt you to insert the volume in any drive if not already inserted. A two drive system can thus be used to read into memory the directory trees of more than two disks and as many as the system's memory will support. run atree The above command line has no arguments and therefore atree will read into memory the entire subtree starting from the current directory specified for the operating system. Reading into memory only the parts or sections of a directory tree may be the desirable course if you are using a hard disk that has extensive directories and you only intend to use two or more small portions of the entire tree. As many pathnames may be entered as the command line will support (Total of 255 characters). Moving around in the directory and files: The currently selected directory tree is shown in a large box at the left of the screen under the word "DIRECTORY:". This box can be thought of as a window to a larger box containing the entire tree. The entire tree can be thought of as represented on a large spreadsheet with 65536 rows and 65536 columns. In this spreadsheet, a tree is formed which graphically represents parent, child and sibling relationships between directories. Children of the same parent (siblings) will all be in the same column; the parent of any directory is always in the column to the left, and the children of any directory are always in the column to the right. Line segments between directories show how they are related. The directory box at any moment displays up to five generations (columns) of directories, and up to sixteen rows. You may use either the mouse pointer in combination with the left mouse button, or the UP, DOWN, RIGHT, and LEFT arrow keys to scroll the directory "window" to display different sections of the whole tree spreadsheet, as explained below. To the right of the directory box is another box just under the word "FILES". This box lists up to sixteen files in the currently highlighted directory. You may use either the mouse pointer in conjunction with the left mouse button, or the shifted UP and shifted DOWN arrow keys to scroll through the entire list of files in the currently highlighted directory, as explained below. On the display screen, there will always be one directory and one file that are highlighted. The highlighted file or directory is understood to be the "argument" or "object" of the various commands you can select from the keyboard or menus. Only the first eight (8) characters of directory names are shown in the directory box; the full name of the currently highlighted directory is displayed to the right of the word "DIRECTORY:" above the directory display box. Only the first twenty-five (25) characters of file names are displayed in the FILES box. To see the full file name, select the RENAME/FILE option from the ATTRIBUTE menu. Cursor keys alone move the highlighter in the directory box. Shift/UP Shift/DOWN move the highlighter in the files box. Click left mouse button on any legitimate directory or file and highlighter will move to it, skipping over anything between. Hold left mouse button down and move pointer, highlighter will follow it. Clicking or holding the left button down with pointer close to the edge of either the directory or files boxes will cause display to scroll if there is anything to scroll to. The pointer with button held down functions according to the same rules as the cursor keys, no matter where on the edge of the screen the pointer is located. The position of the highlighter is what's important. Thus, if the highlighter is on a directory at the lower edge of the box and the directory has no entries in the same column below it, then no matter where you hold the pointer at the lower edge of the box, no scrolling will occur. But if you move the highlighter to a directory that does have entries in the same column below it, then no matter where you hold the pointer along the lower edge of the directory box, it will scroll. Atree also allows you to mark your place at up to three directories in any tree and to return to a marked place from any tree (See the description of the functions in the Directory Menu below). Tag files: Files in a directory can be tagged. The tagged files constitute a group that can be operated on as a unit for purposes of copying, moving, deleting, archiving, etc. To tag a file, move highlighter to file and press space bar (Directories can't be tagged). Once tagged, files remain tagged until an operation is performed on them. You thus may move to another directory to perform other operations and return later to the directory containing tagged files and the files will still be tagged. Tagged files are marked with the ">" symbol immediately to their left. You may remove the tag from a file by placing the highlighter over the file and pressing the space bar. Using the Atree menus: Tree Menu: Read next: changes the currently displayed directory tree by rotating through directory trees previously read into memory. Thus, if you have read into memory df0:, df1:, and dh0:, then selecting this option will cause the "next" tree to be displayed; "next" is determined by the currently displayed tree and the order in which the trees were read into memory, which, in turn, is determined by the order in which you entered the names on the command line. Get (replace): replaces currently displayed tree with a new one you specify. Get (new): reads into memory a new tree you specify and displays it. This will be a new tree in addition to the others currently read into memory. The user can thus read into memory a number of trees limited only by available memory after the program has been activated. Delete: Deletes the currently displayed tree. (You can't delete the last or only tree -- there must always be at least one tree). Info: Displays disk info, like how many bytes and blocks are free. Note that floppy 3.5 inch disks have 512 bytes per sector, but 24 of these bytes are reserved by the system. Therefore, the correct number of bytes usable by the user is 488 bytes per block multiplied by the total number of blocks available, and that is the figure used here. Also note that 512 bytes per block are usable on hard disks. Show Memory: Displays total CHIP and FAST memory available. Set Max Depth: This option gives Atree some real flexibility. It allows the user to specify the depth to which any subsequently specified tree will be read. A depth of 0 means no depth is specified and Atree will read all directories it can. A depth of one (1) means only the subdirectories and files of the specified starting directory for the tree will be read. By specifying a depth of one (1), and by using a combination of the options "Replace from here" and "Add from here", the user can weave his way into a disk directory system one layer at a time. There may be a very real time savings by using this method. The current setting of the Max Depth variable is saved to the Config file described below. From that point on, Atree will use the setting in the Config file upon running the program. In addition, the functions "Read back (add)" and "Read back (replace)" allow the user to weave his way back out of a disk directory system. Replace from here: This option replaces the currently displayed tree with a new one that starts with the highlighted directory. Used in conjunction with a Max Depth setting, the user can penetrate only those portions of the directory that are of interest as an alternative to reading the entire tree. Add from here: This option functions the same as the "Replace from here" option described above, except that a new tree is created and becomes the displayed tree; the old one still remains. Read back (add): Allows the user to "back up" in a tree. For example, suppose you have just read your way into a directory such that your currently displayed tree represents everything from a depth of 15 to 18 from a particular directory and that your maxdepth for reads is set at 3. Selecting this option will cause the reading of a new tree. The new tree will be derived by selecting the parent's parent's parent of the old tree's top directory and use the path to that new directory as the basis for reading the newly added tree to a depth of three. In other words, from the top directory, we "back up" maxdepth levels in the top directory's direct line of descent and then read from that ancestral directory to a depth of maxdepth. Read back (replace): Functions the same as "Read back (add)" except that the new tree replaces the old tree. NOTE: The four options starting with "Replace from here" create a directory path string representing the complete path specification of the currently highlighted directory -- the tree is then read just as though the user had typed the path on the CLI command line on running Atree. The size of this string is limited to 2048 characters. These functions therefore can support a minimum depth of about 51 directories (if each has a 40 character name), and a maximum of about 1000 or so directories (if each is assumed to have a one character name). This should be quite sufficient for nearly all applications. Attribute Menu: Note: Allows FileNote on highlighted directory/file. Protection: Allows change of protection status on highlighted directory/ file. Rename: Allows renaming of highlighted file/directory. In all of the above cases, you can select the attribute from the menu to see or view the current specification and, if you wish, you can click on the string gadget to alter the current specification. Directory Menu: Delete: deletes all files in highlighted directory and deletes directory if there are no subdirectories. NOTE: This routine ignores delete protection -- the user must be sure that none of the files in the directory are wanted. Make: creates a subdirectory in the highlighted directory. Mark Destination: Highlighted directory becomes the target or destination directory for MOVE and COPY functions. Any function requiring a target will not work unless a MARK is set. Show Destination: In case you have forgotten which directory in which tree you have selected, this option will tell you. You will however only get an abbreviated representation of the complete destination path specification; you will be given the name of your "tree top" (what you specified in order to read this tree) and the name of the directory that is marked as the destination (There may, of course, be more than one directory with the same name in a given tree, so be careful about your assumptions). The complete destination path specification is not given for the simple reason that Atree supports up to a depth of 65536 directories, each of which can have a name up to 40 characters long -- that represents a string of 2,621,440 characters! Goto Destination: Select this and your destination directory will be displayed and highlighted in the upper left corner of the display box. Place Mark: Atree allows you to set up to three place markers. The highlighted directory is marked so that it may be subsequently returned to from any tree or directory. Goto Mark: If a place mark has been set, selecting the goto option (1, 2, or 3) corresponding to it will cause the marked directory to be displayed and highlighted in the upper left-hand corner of the directory display box. Prune: Selecting this option will delete all files and sub directories in the currently highlighted directory. The highlighted directory will also be deleted. This function is like cutting a complete branch from a tree. The function may not do a complete job of pruning if for any reason files and directories cannot be found or deleted. The prune function will, in other words, prune whatever it can. NOTE: The prune function will delete even delete protected files and directories without question or warning. Therefore, the user must make sure none of the files or directories in the branch to be pruned are wanted. Graft: This function copies what it can of the branch from the currently highlighted directory to the currently marked destination. The graft function can be used to copy an entire disk to a blank disk or to ajoin an entire tree to a marked destination in another tree or in the same tree. NOTE: It is the user's responsibility to make sure that the branch represented by the currently highlighted directory is not a sub branch of the branch represented by the currently marked destination. Grafting a sub branch to any branch of which it is a part will likely result in an endless recursion until either all memory or disk space is used. Bytes in tagged files: A requester will display the total bytes in all files tagged in the currently highlighted directory. File Menu: Copy, Move and Delete highlighted, tagged, or all files in currently highlighted directories; choices should be obvious. Archive: Use the Configs menu (see below) to specify the path to your favourite archive utility. Then select "Archive" highlighted/tagged/all from the FILE menu. You will be presented with a requester asking you to "Enter ARC arguments:". You should enter everything here that you want to be added to your path spec for your archive utility, except the filename - - this will be added automatically by Atree. The filename added by Atree depends on whether you selected highlighted, tagged, or all. To make the above clearer with an example: Suppose you entered "dh2:utilities/arc" as your path spec in the Configs menu for your Archive selection. Suppose you now select Archive/highlighted from the FILE menu. You get the requester asking you to enter arc arguments. Suppose you enter here, "a newarc". Suppose your highlighted file name is "this_file". What will happen now is that Atree will execute the command line: run dh2:utilities/arc a newarc this_file For my particular version of ARC, the above command line will create an archive file, newarc.arc, in the current (highlighted) directory (if it doesn't already exist) and then will add "this_file" to it. Selecting "tagged" or "all" instead of "highlighted" will result in the above command line being executed over and over for all appropriate files. Execute: Executes the highlighted file with the RUN command; a command tail is requested via a requester and is optional. Text reader, editor, word processor, IFF displayer and sector editor should be obvious, but will not function unless first specified by selecting CONFIGS menu. If specs are made in the CONFIGS menu, the program specified will execute with the RUN command and with the highlighted file as the command tail. NOTE: It is obvious that the user may alter a directory tree or a file in many ways without the memory copy of the tree or file list being correspondingly changed. Therefore, through the use of text editors, word processors, archive utilities, etc. your memory copy of a tree as displayed by Atree at any moment may not correspond to the disk it is supposed to represent. The user is advised to update the tree by re- reading it using the "Get (replace)" option from the TREE menu. Use the same path specification to update your displayed tree to keep it in correspondence with the disk it represents. Configs Menu: Set Path: A requester allows user to specify a path leading to a text reader, editor, word processor, IFF display program, or sector editor (or of course any program specified). To use the requester set mouse pointer on selection, press left mouse button; if a specification was previously set, it will now appear in the string gadget at top of requester, otherwise it will be blank. To make new specification, set mouse pointer on string gadget, press left mouse button and enter text -- press RETURN. When the corresponding selection is made via the FILE menu, the specified program will be executed with the RUN command and with the highlighted file as the command tail. Thus, suppose you select "Text Reader" and in the string gadget you enter "dh2:utilities/blitz". When you now go to the FILE menu and select "Text Reader", Atree will execute the following command line: run dh2:utilities/blitz where is the currently highlighted file. Save: Saves the currently specified paths to text reader, editor etc. Current colours are also saved. To change colours, use the TREE menu and select "Get new" and specify a path that includes a directory containing Preferences. Then select Execute from the FILE menu. Change your colours with Preferences. Quit Preferences and then select Save from the CONFIG menu. The new colours, along with any other specifications you have made will be saved. The file, Atree.Config, is created in the directory specified by the s: assignment. If you are a first time user of Atree, and the Config.Atree file does not exist, you will get a prompt upon running Atree telling you "object not found", click on "continue" and the program will proceed with its initialization. Set up your config file per the above instructions for future running. The "Save" option will also save to the config file the currently specified "maxdepth" setting. See the "Set max depth" option of the "Tree Menu" above. Search Menu: String: Allows definition of search string specification for searching through trees for directories, or for searching through directories for files, or for searching through all files in all directories in a tree for a matching file. The definition string may contain any of the following special meaning characters: ? matches any single character * matches zero or more occurrences of characters identical to the character preceding the "*" + matches one or more occurrences of the preceding character \? matches a question mark (?) \* matches an asterisk (*) \+ matches a plus sign (+) Example Matches a??x abyx, agtx, a56x, etc. a*x x, ax, aax, aaax, etc. a?*x ajax, abthgnfdhrrhtlo666x, etc a+x ax, aax, aaax, etc. a\?x matches only "a?x" a\*x matches only "a*x" NOTE: The search string you specify will be converted to lower case and during the search process the compare string (a directory or filename) is converted to lower case so that all searches are therefore case insensitive. Also, note that a match is considered to exist if your string is determined to match only the beginning of any compare string. Thus, "abc" will match "abcdef" and "abctuq", etc. Tree: From Top: Searches from the top of the currently displayed tree for a directory matching the pattern specified through selecting "string" above. Display moves to the found directory. The search is always made downward in the display column before moving to the next column to the right. From Here: Same as above, except the search begins with the next directory down in the same column as the highlighted directory. Directory: From Top: Searches from the top of the currently highlighted directory for a file matching the pattern string. Search stops at end of list of files belonging to the highlighted directory. Display moves to found. From Here: Same as above, except search begins with the file next down from the highlighted file. All Files: From Top: Searches all files in current tree irrespective of directory for a file matching the pattern string. Search starts at top. Display moves to found. From Here: Same as above, except search begins with next file down from the currently highlighted file. Sort Menu: The options in this menu should be clear -- the user can sort the highlighted directory's files by name, size, or date, and can sort the entire currently selected tree's files in all of its directories by name, size, or date. Keyboard operation To the right of most menu choices is a key description to allow the function to be accessed from the keyboard instead of the menus. Capital letters indicate of course that the SHIFT key is to be pressed simultaneously to execute the function. F10 refers to SHIFT/function key #10; f10 is unshifted function key. the "^" symbol refers to the CONTROL key and must be pressed simultaneously with the indicated key. The table below outlines the menu selections and the corresponding keyboard selections: TREE MENU Read next Esc Get (replace) = Get (new) + Erase - Info i ATTRIBUTE MENU Note/file n Note/directory N Protext/file p Protect/directory P Rename/file r Rename/directory R DIRECTORY MENU Delete (no key) Make (no key) Mark Destination (no key) Show destination (no key) PlaceMark 1 ! PlaceMark 2 @ PlaceMark 3 # GotoMark 11 GotoMark 22 GotoMark 33 Prune (no key) Graft (no key) Bytes in Tagged Files (no key) FILE MENU Copy/highlighted c Copy/tagged C Copy/all ^c Delete/highlighted d Delete/tagged D Delete/all ^d Move/highlighted m Move/tagged M Move/all ^m Archive/highlighted a Archive/tagged A Archive/all ^a Execute f1 TextReader f2 TextEditor f3 WordProcessor f4 IFFDisplayer f5 SectorEditor f6 CONFIGS MENU SetPaths s SetBuffer S Save ^s SEARCH MENU String (no key) Tree from top t Tree from here T Directory from top v Directory from here V Filelist from top f Filelist from here F Future Enhancements: The following enhancements to the program are in process and will be included in future revisions: 1. The graft function will include a routine to determine if the user is requesting to graft a sub branch of the destination branch to itself and abort the request if true. 2. Allow user to abort copy, move, delete, prune, graft operations. 3. Update memory copy of disk tree by: a. Allowing user to re-read files in a single directory. b. Automatic check and update of files for ARC, Text Editor, etc. 4. Allow moving and copying files with preservation of original datestamp. 5. Do auto check before move and copy to see if there is enough disk space. 6. Allow copy, move, delete to/for a directory specified by the user via a requester; user should not always have to read a tree into memory in order to copy, move, delete files from it. 7. Provide support for more utilities to be specified in the CONFIGS menu (zoo, pak, etc.). 8. Allow use of Atree from the Workbench. 9. Allow user to set a filespec for display, e.g. display only files with ".doc" extension, etc. 10. Develop disk formatting and sector editing routines. 11. Allow copy, delete, move, format, prune, and graft routines to be run as separate processes so that while they are occurring, the user will be able to do other things with Atree. 12. Develop a friendlier and easier to use keyboard operation system that more closely parallels the menu system -- thus, for example, pressing "t" followed by "e" would do the same job as selecting the "Erase" option of the "Tree" menu, and pressing the f, c, and t keys in succession would copy tagged files to the destination directory (Files menu, Copy menu- item, Tagged subitem). 13. Design Atree with its own screen instead of attaching its window to the Workbench screen, as it presently does. 14. Design the program to function in interlace mode so that user may view larger portions of the directory and file display boxes. 15. Design the program so that the user can alter the window size and the sizes of the directory and files boxes will automatically adjust to the new size. 16. Beautify and fancify the requesters and displays to lend a little quality and sophistication to the program.