What's sub-problems I coded within swsubst: + mkdir.c: mkdir -p {path}: makes the directory including path to it + subst: switchSubst(): handle CDS entries through DOS3..DOS6 + cds.c: access to the List of List via inline assembly + drive.c: getDrvName(): convert physical drive number => driver name + drive.c: name2drv(): search the n'th drive driven by the driver with the name XXX + drive.c: searchLabel():search all physical drives for a drive labeled XXX (via findfirst()) + drive.c: Drive(): strip a leading drive spec & return its (int) presence (all above && normal drive specs) + swsubst.c: new_int24(): disable critical errors by always returning FAIL to the system + swsubst.c: main(): compact multiple similar functionality within one program + set.c: drvSetting(): direct manipulating of the drive flags, set/reset flags; turn drive ON/OFF Known Bugs: + The inline assembly in cds.c works; if the C code, I don't know. + Sometimes manipulating seems meaningless; the system locks up or emits mystic errors. Well, they come when I tried something, what's not possible with DOS's standard tools, but what should work by all documentation I have. (I never had a system crash with data lost.) + The part of main(), where I start the switchSubst(), is somewhat mystic. That's because that was the place where everything begun! + To turn a drive OFF is relativly simple; but re-enabling is aweful, because there is nowhere the information, what SHOULD be on this drive. It works OK for unused entries, local HD's und FD's; sometimes for device driven drives; but seldom for CD-ROMs (networked drives). + Works only on MS-DOS like CDS. But does not check, if it's running on MS-DOS. (DR-DOS has a very different CDS.) + The program does very little checking for valid operations; therefore, play around a bit, before you try to do serious things with non-DOS- standard functions. + Bec‘use I enabled to use logical & physical paths, sometimes the same path is interpreted both physically and logically. That *can* be useful. But normally this results rubish. + The DOS-standard emulating entities of swsubst, SUBST and JOIN, have the same command line as DOS's have. But they differ in the following points: ++ The specified path will be make'ed, including the full path to it, e.g. "SUBST c: d:/blah/humpf" creates the path "d:\blah\humpf", regardless if d:\blah exists. ++ You are allowed to break off relations on the fly, that means: an already SUBST'ed can be re-SUBST'ed or re-JOIN'ed without further note/warning. ++ You are allowed to process a drive with itself, e.g.: "JOIN a: a:\blah" ++ The table dump is different, swsubst prints "X: => Y:\PATH" instead of "X: is joined to Y:\PATH". ++ You cannot rename the executables SUBST and JOIN. ++ It won't test the DOS version, unless it's necessary for adjusting different data structure sizes. What I'm still looking for: + How to trick a networked drive (e.g. CD-ROM) of it's drive letter, e.g. for swapping. + How to flush DOS internal BUFFERs in that way, that a) non-Written data is written (flush dirty BUFFERs); and b) mark them unused. That's *maybe* one problem, because DOS's BUFFERs may contain data about a drive, which is now somewhere else & was replaced by another. I trecked DOS a bit, but couldn't found something, what's look like that functionality. + What's the HIDDEN flag for?