From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/cdir.c | 127 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/cdir.c (limited to 'reference/C/CONTRIB/SNIP/cdir.c') diff --git a/reference/C/CONTRIB/SNIP/cdir.c b/reference/C/CONTRIB/SNIP/cdir.c new file mode 100755 index 0000000..853cecb --- /dev/null +++ b/reference/C/CONTRIB/SNIP/cdir.c @@ -0,0 +1,127 @@ +/* +** CDIR.C +** +** Written By: Lynn R. Lively +** Date Written: 9/18/91 +** +** Purpose: To provide a change directory facility that will cross +** drive/partition boundries. Never did understand why +** MSDOS cd wouldn't do this already. +** +**----------------------------------------------------------------- +** I hereby place this work into the Public Domain. It may be used +** for any legal purpose public or private. Use this material at +** your own risk. I accept no responsibility for the accuracy or +** usability of the information contained herein. Neither do I +** accept liability for any possible damage caused by use of this +** material. However, should you have a problem, question, or +** suggestion I would be glad to help in any way that I can. You +** can reach me at (H) 713-893-7875 or (W) 713-591-6611 x 149. +**----------------------------------------------------------------- +*/ + +/* +** Change History +** +** Rev # Date By Description of change +** 1.00 | 09/18/91 | LRL | Original Version +** 1.01 | 09/18/91 | RBS | Added MSC, ZTC support for SNIPPETS +**----------------------------------------------------------------- +** Directory of initials: +** Initials Name +** LRL Lynn R. Lively +** RBS Bob Stout +*/ + + +#include +#include + +#ifdef __TURBOC__ + #include +#else + #include + #include + + #ifdef __ZTC__ + #define _dos_getdrive(d) dos_getdrive(d) + #define _dos_setdrive(d,m) dos_setdrive(d,m) + #define drive_t unsigned + #else + #define drive_t int + #endif + + drive_t getdisk(void) + { + drive_t drive; + + _dos_getdrive(&drive); + return drive - 1; + } + + drive_t setdisk(drive_t drive) + { + drive_t max_drives; + + _dos_setdrive(drive + 1, &max_drives); + return max_drives - 1; + } +#endif + +main (int argc, char * argv[]) +{ + int d; + int max_d; + + char wk_str[128]; + + if (argc > 1) + { + strupr (argv[1]); + if (argv[1][1] == ':') + { + /* + ** Find out what the maximum drive number can be. + */ + + max_d = getdisk (); + max_d = setdisk (max_d); + + d = argv[1][0] - 'A'; + if (d < max_d) + { + /* + ** If the drive specification was valid position to it + ** and then do a change directory. + */ + + setdisk (d); + chdir (argv[1]); + } + else + { + puts ("Invalid drive specification"); + return -1; + } + } + else + { + /* + ** If the argument has no drive spec just do a regular + ** change directory. + */ + + chdir (argv[1]); + } + } + else + { + /* + ** If no arguments are passed, return the current working + ** directory path just like MSDOS cd does. + */ + + puts (getcwd (wk_str, sizeof (wk_str))); + } + return 0; +} -- cgit v1.2.3-54-g00ecf ='ctrl'>