			  MT - Move To drive/directory

			  Copyright Jason Hood 1996-9

			     Freeware. Version 2.50


				  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.  Previous  directories  are  remembered.  Dir-
 ectories  can be saved  and later recalled.  And, of course,  the drive can be
 changed along with the directory.


				  Requirements

	DOS 3.0+
	286+ (but could be recompiled for less)


				  Installation

 Place mt.com in your path.  It doesn't really matter where the other files go.
 Add this to your autoexec.bat:

	[path]mtmem.com [d:/path] [;prev[;prev;prev...]

 where: path is the path to mtmem.com;
	d:/path is the drive and path to place the directory structure file;
	;prev... is the list of 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,  previous directories and directory stack,  as well as
 providing instance data for task switchers.)

 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  1800 directories per drive.  If you have more than this,	it will
 probably crash, 'coz I've not tested for it.


				     Usage

 "mt ?"  or  "mt <any-character-of-your-choice>?"  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 direc-
 tory before the previous directory. You can keep adding semicolons, or specify
 a number after the first one - "mt;3" is equivalent to "mt;;;". If you use too
 high a number, or the number 0, then nothing happens. The previous directories
 can be explicitly set	by using mtmem.com.  Two previous directories are guar-
 anteed; the path sizes determine the upper limit - usually about nine.

 "mt d:path" is the same as CD,  but it will change drive as well,  slashes (/)
 can be used, and the trailing (back)slash (if any) will be removed. 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 you
 have a games directory that 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.  However,  if the
 directory has an extension, you'll also need to add ".*".

 "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 is closer to the root.  But with directories
 /windows and /windoze,  "mt w" will find /windows, since "w" comes before "z".
 If you are already in the  directory that matched first,  it will try and find
 another match.  So with the two "w" directories above, "mt w" will move you to
 "/windows" and "mt w" from within that directory  will move you to "/windoze".

 It's also  possible to specify  a complete path  after the partial paths,  for
 those directories that have not yet been scanned.  "mt w /newdir"  will search
 for a directory starting with "w"  (eg. "/windows")  and then add "/newdir" to
 it, resulting in "/windows/newdir".

 "mt n,<partial path>"  will select the nth match of the partial path. If that
 is the current directory  then the next match will be selected.  If n is zero
 (or absent) then all matches will be listed.

 "mt ! path"  will save  the current directory  (push)  and then move  to path.
 "mt !" will move to the last saved directory (pop). This is intended for batch
 file use, so,	at the moment,	it doesn't display any messages if the stack is
 full or empty;  only the  errorlevel  is set.	 It also  has no effect  on the
 previous directories list.  Like the previous directories, two are guaranteed,
 but eight are likely.	 Note that  "mt !path"  is not the same thing;  it will
 treat the exclamation as part of the path.

 "mt +[+][path]"  will add path (and its subdirectories) to the structure file,
 and move there if the second plus is specified.   If the path doesn't exist it
 will be created; if it is absent, the current directory will be added.  Unlike
 the MD command more than one directory can be created:

		mt ++path1/path2  =  md path1
				     md path1\path2
				     cd 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.

 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,  or recreating the directories and removing again.)	 If the
 drive is not  in the file,  the path will still be deleted.   Note that unlike
 DELTREE,  this will not delete individual files.  As a precaution, "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 @f"  will scan F:  (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.  Two hashes will
 make the extension permament (place it in the resident memory).  If  "ext"  is
 omitted, it will default to "dat".

 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.


				  Return Code

 0 - Successful operation (including help & status)
 1 - MTMem not loaded
 2 - Unable to create/load the structure file
 3 - Directory not found
 4 - Cannot create directory
 5 - Cannot delete directory
 6 - Directory stack empty
 7 - Directory stack full


			       Known Limitations

 As mentioned above,  too many directories  on a drive will cause a crash  (but
 1800 directories!).  To have more than this  would require recompiling	 in the
 compact model, but I haven't tried it.
 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:

 rendir.bat:	@echo off
		mt --%1
		move %1 %2
		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:	jadoxa@hotmail.com

 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, 17 December, 1999.
