summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/isnetdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/isnetdr.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/isnetdr.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/isnetdr.c b/reference/C/CONTRIB/SNIP/isnetdr.c
new file mode 100755
index 0000000..0e90e57
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/isnetdr.c
@@ -0,0 +1,45 @@
+/*----------------------------------------------------------------------*/
+/* determine_drive_type -- Public Domain code from Bob Dolan */
+/* */
+/* INPUT: the drive number ( 0=current, 1=A:, 2=B:, etc. ) */
+/* OUTPUT: drive type ( 0=physical drive, 1=Network drive, 2=RamDisk ) */
+/*----------------------------------------------------------------------*/
+
+#include <dos.h>
+
+drive_type(int dr)
+{
+ union REGS regs;
+
+ regs.x.ax = 0x4409; /* IOCTL func 9 */
+ regs.h.bl = (unsigned char)dr;
+ int86(0x21, &regs, &regs);
+ if (!regs.x.cflag)
+ {
+ if (regs.x.dx & 0x1000)
+ return 1; /* Network drive */
+
+ else if (regs.x.dx == 0x0800)
+ return 2; /* RAMdisk */
+ }
+
+ return 0; /* physical drive */
+}
+
+#ifdef TEST
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+int main(int argc, char *argv[])
+{
+ int dr = 0;
+
+ if (1 < argc)
+ dr = toupper(*argv[1]) - '@';
+ printf ("drive_type(%d) = %d\n", dr, drive_type(dr));
+ return 0;
+}
+
+#endif /* TEST */