home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / s / snip1292.zip / GETVOL.C < prev    next >
C/C++ Source or Header  |  1991-12-04  |  2KB  |  69 lines

  1. /*
  2. **  GETVOL.C - Retrieve a disk volume label
  3. **             (proof you don't need FCBs to do it!)
  4. **
  5. **  public domain demo by Bob Stout
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <dos.h>
  12. #include <io.h>
  13.  
  14. #if defined(__TURBOC__)
  15.  #pragma option -a-
  16.  #include <dir.h>
  17.  #define _dos_findfirst(f,a,b) findfirst(f,b,a)
  18.  #define _dos_findnext(b) findnext(b)
  19.  #define find_t ffblk
  20.  #define _A_VOLID FA_LABEL
  21.  #define attrib ff_attrib
  22.  #define name ff_name
  23. #else
  24.  #include <direct.h>
  25.  #if defined(__ZTC__)
  26.   #pragma ZTC align 1
  27.  #else /* MSC/QC/WATCOM/METAWARE */
  28.   #pragma pack(1)
  29.  #endif
  30. #endif
  31.  
  32. #define SUCCESS 0
  33.  
  34. char *getvol(char drive)
  35. {
  36.       char search[] = "A:\\*.*";
  37.       static struct find_t ff;
  38.  
  39.       *search = drive;
  40.       if (SUCCESS == _dos_findfirst(search, _A_VOLID, &ff))
  41.       {
  42.             if (8 < strlen(ff.name))            /* Eliminate period     */
  43.                   strcpy(&ff.name[8], &ff.name[9]);
  44.             return ff.name;
  45.       }
  46.       else  return NULL;
  47. }
  48.  
  49. #ifdef TEST
  50.  
  51. int main(int argc, char *argv[])
  52. {
  53.       char *label;
  54.  
  55.       if (2 > argc)
  56.       {
  57.             puts("\aUsage: GETVOL d[:]");
  58.             puts("where: d = drive letter (e.g. A, B, C, etc.");
  59.             return -1;
  60.       }
  61.       if (NULL == (label = getvol(*argv[1])))
  62.             printf("Unable to read a label on drive %c:\n", *argv[1]);
  63.       else  printf("The volume label of drive %c: is \"%s\"\n",
  64.             *argv[1], label);
  65.       return 0;
  66. }
  67.  
  68. #endif
  69.