home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c005 / 4.ddi / C / DRREMVOL.C < prev    next >
Encoding:
C/C++ Source or Header  |  1987-04-13  |  2.1 KB  |  77 lines

  1. /**
  2. *
  3. * Name        drremvol -- Remove the volume label (if any) from a given
  4. *                disk drive.
  5. *
  6. * Synopsis    ercode = drremvol(drive);
  7. *
  8. *        int  ercode      1 if error, 0 if okay.
  9. *        int  drive      Disk drive (0 = default, 1 = A:, etc.)
  10. *
  11. * Description    This function removes the volume label from a given disk
  12. *        drive (if one is present).  No error occurs if none is
  13. *        present.
  14. *
  15. * Returns    ercode          1 if error, 0 if okay.
  16. *
  17. * Version    3.0 (C)Copyright Blaise Computing Inc.    1986
  18. *
  19. * Version    3.02 March 24, 1987
  20. *        Removed a strong typing warning (no change in object
  21. *            code).
  22. *
  23. **/
  24.  
  25. #include <bdirect.h>
  26. #include <bfile.h>
  27.  
  28. int drremvol(drive)
  29. int     drive;
  30. {
  31.     DOSREG dos_reg;
  32.     char   local_dta[44],xfcb[44];
  33.     ADS    old_dta_ads,ldta_ads,xfcb_ads;
  34.     int    i,result;
  35.  
  36. #define fcb        (xfcb      + 7)
  37. #define found_fcb   (local_dta + 7)
  38.  
  39.     flretdta(&old_dta_ads);          /* Save former Data Transfer    */
  40.                       /* Address.              */
  41.     utabsptr(local_dta,&ldta_ads);
  42.     flsetdta(&ldta_ads);          /* Specify local DTA.          */
  43.  
  44.     for (i = 0; i < 44; i++)          /* Clear entire Extended FCB    */
  45.     xfcb[i] = 0;
  46.     fcb[-7] = (char) 0xff;          /* Mark this as an Extended FCB */
  47.     fcb[-1] = AT_VOLUME;          /* Select volume attribute.     */
  48.     fcb[0]  = (char) drive;
  49.     for (i = 1; i <= 11; i++)          /* Search for "????????.???"    */
  50.     fcb[i] = '?';
  51.  
  52.     dos_reg.ax = 0x1100;          /* DOS function 0x11:  search   */
  53.     utabsptr(xfcb,&xfcb_ads);          /* for first matching entry.    */
  54.     dos_reg.ds = xfcb_ads.s;
  55.     dos_reg.dx = xfcb_ads.r;
  56.     dos(&dos_reg);
  57.  
  58.     if (utlobyte(dos_reg.ax) == 0)
  59.     {                      /* Found a volume label, so     */
  60.     dos_reg.ax = 0x1300;          /* delete it.              */
  61.     dos_reg.ds = ldta_ads.s;
  62.     dos_reg.dx = ldta_ads.r;
  63.     dos(&dos_reg);
  64.  
  65.     result = (utlobyte(dos_reg.ax) != 0);
  66.     }
  67.     else
  68.     {                      /* No volume label found, so    */
  69.                       /* quit.                  */
  70.     result = 0;
  71.     }
  72.  
  73.     flsetdta(&old_dta_ads);          /* Restore former DTA.          */
  74.  
  75.     return result;
  76. }
  77.