home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name drremvol -- Remove the volume label (if any) from a given
- * disk drive.
- *
- * Synopsis ercode = drremvol(drive);
- *
- * int ercode 1 if error, 0 if okay.
- * int drive Disk drive (0 = default, 1 = A:, etc.)
- *
- * Description This function removes the volume label from a given disk
- * drive (if one is present). No error occurs if none is
- * present.
- *
- * Returns ercode 1 if error, 0 if okay.
- *
- * Version 3.0 (C)Copyright Blaise Computing Inc. 1986
- *
- * Version 3.02 March 24, 1987
- * Removed a strong typing warning (no change in object
- * code).
- *
- **/
-
- #include <bdirect.h>
- #include <bfile.h>
-
- int drremvol(drive)
- int drive;
- {
- DOSREG dos_reg;
- char local_dta[44],xfcb[44];
- ADS old_dta_ads,ldta_ads,xfcb_ads;
- int i,result;
-
- #define fcb (xfcb + 7)
- #define found_fcb (local_dta + 7)
-
- flretdta(&old_dta_ads); /* Save former Data Transfer */
- /* Address. */
- utabsptr(local_dta,&ldta_ads);
- flsetdta(&ldta_ads); /* Specify local DTA. */
-
- for (i = 0; i < 44; i++) /* Clear entire Extended FCB */
- xfcb[i] = 0;
- fcb[-7] = (char) 0xff; /* Mark this as an Extended FCB */
- fcb[-1] = AT_VOLUME; /* Select volume attribute. */
- fcb[0] = (char) drive;
- for (i = 1; i <= 11; i++) /* Search for "????????.???" */
- fcb[i] = '?';
-
- dos_reg.ax = 0x1100; /* DOS function 0x11: search */
- utabsptr(xfcb,&xfcb_ads); /* for first matching entry. */
- dos_reg.ds = xfcb_ads.s;
- dos_reg.dx = xfcb_ads.r;
- dos(&dos_reg);
-
- if (utlobyte(dos_reg.ax) == 0)
- { /* Found a volume label, so */
- dos_reg.ax = 0x1300; /* delete it. */
- dos_reg.ds = ldta_ads.s;
- dos_reg.dx = ldta_ads.r;
- dos(&dos_reg);
-
- result = (utlobyte(dos_reg.ax) != 0);
- }
- else
- { /* No volume label found, so */
- /* quit. */
- result = 0;
- }
-
- flsetdta(&old_dta_ads); /* Restore former DTA. */
-
- return result;
- }