MT - Move To drive/directory Copyright Jason Hood 1996 Freeware Description mt is a complete CD replacement. It allows for the use of slash ("/") as well as backslash ("\") in directory names. The dot notation has been extended so "grandparent" and "great-grandparent", etc., can be specified. Partial directory names are supported. The two previous directories are remembered. And of course, the drive can be changed along with the directory. Requirements DOS 3.0+ 286+ (but could be recompiled/reassembled for less) Installation Place mt.com in your path. It doesn't really matter where the other files go. Add these two statements to your autoexec.bat: SET MTMEM=#### [path]mtmem.com [d:/path] [;prev] [;;bprev] where: the environment variable will be set to the resident memory segment; path is the path to mtmem.com; d:/path is the drive and path to place the directory structure file; ;prev & ;;bprev are the initial previous directories. If d:/path is not specified, it will default to the same path as mtmem.com. If the previous directories are not specified they will be set to nothing. Memory will be allocated high (if available), using best fit. (The memory is used to store the path and previous directories.) The next step is to setup the directory structure file for the partial names: mt @drives where drives is the list of drives you wish to scan. The drives will be scanned in the order specified and invalid drives will be ignored. I've allowed for 1200 directories per drive (it can hold 1288 with an average length of 23.35). If you have more than 1200 directories, it will probably crash, 'coz I've not tested for it. Usage "mt ?" or "mt ?" will display a help screen (at least, I hope it helps). "mt @cd", for example, will scan drives C: and D:. "mt @" will update the file for drives previously scanned (by totally rescanning the drives). The file's path can be changed via mtmem.com. "mt ..." is equivalent to "mt ..\.." - ie. it will move you to the "grand- parent" directory. Any number of dots can be specified, but of course it will fail if you try to move too far back. Note that the extra dots will only work at the start of the path - if specified in the middle you will get an error (but it's a silly thing to do anyway). "mt;" will move you to the directory you just moved from (so repeatedly doing "mt;" will toggle between two directories). "mt;;" will move you to the dir- ectory before the previous directory. "mt d:path" is the same as CD, but it will change drive as well. You can also use slashes. "mt d:\games\dos" is the same as "mt d:/games/dos". It is also possible to use a star ("*") for the last directory name. The first name that matches (in the file table, not alphabetically) will be selected. So if the above games directory has dos and windows as subdirectories, and dos is first in the file table, then "mt d:/games/*" will get you there. Similarly, "mt d:/games/w*" will move you to the windows subdirectory. "mt name1 name2 ..." (that's an ellipsis, not grandparent) is roughly equiv- alent to "mt name1*/name2*/..." - ie. it looks for a directory that starts with name1, has a subdirectory that starts with name2, etc. Note that if only one name is specified it looks for a subdirectory before it starts the search. Searches always begin from the root, in drive order (when the structure file was created). To search a particular drive: "mt d:name1 name2 ..." where d is the drive you want. The first match found will be the one selected. If it's not the one you want, you will need to narrow the search (by specifying more characters). (I find it easier to type than to select from a damn annoying pop-up window.) Directories are stored alphabetically, with precedence given to paths closer to the root. So given directories /games and /windows/games, "mt g" will find /games, since it closer to the root. But with directories /windows and /windoze, "mt w" will find /windows, since "w" comes before "z". "mt +[+][path]" will add path (and its subdirectories) to the structure file. The current directory will be added if path is absent. If it doesn't exist it will be created. Unlike the MD command more than one directory can be created: mt +path1/path2 = md path1 md path1\path2 If, when creating directories, a path already exists (eg. "/games" exists, when doing "mt +/games/newgame"), then it is assumed that "/games" has already been scanned, so only the "newgame" part will be added. The second plus will also move you to the directory. If the drive isn't in the file then it will be added with only the selected directories. If the root is added (ie. "mt +c:/") then the whole drive will be (re)scanned. "mt -path" will remove path (and its subdirectories) from the file and delete it from disk (EVERYTHING is deleted). "mt --path" will only remove it from the file. Removing a root directory (ie. "mt -c:/") will remove the entire drive from the file, but it will never be deleted from disk. path must exist in order for it to be deleted (ie. RD'ing or DELTREE'ing will mean rescanning the entire drive.) If the drive is not in the file, it will still be deleted. Note that unlike DELTREE, this will not delete individual files. As a pre- caution, "mt -" will not delete the current directory, use "mt -." instead. WARNING: THERE IS NO CONFIRMATION! It will be deleted IMMEDIATELY. One last option is "mt #ext ...". This replaces the normal "mtdirs.dat" file with "mtdirs.ext" (for this line only). It is intended for removable media, particularly shareware/magazine CD-ROMS. So "mt #pcw @e" will scan E: (my CD) and create "mtdirs.pcw" (in the same path as "mtdirs.dat"). Then "mt #pcw mods" will find a directory starting with "mods" on that CD. Finally, it is possible to do multiple options on one line. However, as soon as a move is encountered, processing will stop: mt +abc +def ++ghi will create three directories and move to "ghi". mt ++ghi +abc +def will create and move to "ghi", but skip the other two. Known Limitations As mentioned above, too many directories on a drive will probably cause a crash (but 1200 directories!). This can be fixed by changing MaxDirs to 2000 and recompiling in the small model. Removing all drives WILL result in a crash - just don't do it. There is no "optimizing" - to remove paths that have been deleted from disk, but still exist in the file, a complete rescan is necessary. Removing the last directory of a drive will not result in that drive being removed. There is no provision for renaming directories: either treat it as a good time for a rescan, or use a batch file/doskey macro: rendir.bat: @echo off doskey rendir=mt --$1$Tmove $1 $2$Tmt +$2 mt --%1 (or you might like: move %1 %2 doskey rendir=echo off$T$Techo on) mt +%2 Redistribution If you're just giving it to your mate, only the two .com files are necessary. However, if you plan to upload it to a BBS or FTP site (or whatever), I'd ask that you upload the original zip-file (or whatever archiver you prefer). If you modify the source, let me know and I'll redistribute an "official" version (after all, I still hold copyright), but I have no objections if you distri- bute both my original code and your modification (but please, do let me know). Address e-mail: hoodj@topaz.cqu.edu.au snail mail: Jason Hood 11 Buckle Street North Rockhampton Queensland, 4701 Australia. Finally This program is copyrighted Freeware. Feel free to give it to all and sundry (under the conditions mentioned in "Redistribution"). But if you sell it, I curse you to everlasting bankruptcy. Disclaimer Since I'm deleting directories, I'd better add this: I will not be held responsible for accidental deletion. I've warned you that deletion will occur immediately and that all files will be deleted. Jason Hood, 1 November, 1996.