/* ** GETVOL.C - Retrieve a disk volume label ** (proof you don't need FCBs to do it!) ** ** public domain demo by Bob Stout */ #include #include #include #include #include #if defined(__TURBOC__) #pragma option -a- #include #define _dos_findfirst(f,a,b) findfirst(f,b,a) #define _dos_findnext(b) findnext(b) #define find_t ffblk #define _A_VOLID FA_LABEL #define attrib ff_attrib #define name ff_name #else #include #if defined(__ZTC__) #pragma ZTC align 1 #else /* MSC/QC/WATCOM/METAWARE */ #pragma pack(1) #endif #endif #define SUCCESS 0 char *getvol(char drive) { char search[] = "A:\\*.*"; static struct find_t ff; *search = drive; if (SUCCESS == _dos_findfirst(search, _A_VOLID, &ff)) { if (8 < strlen(ff.name)) /* Eliminate period */ strcpy(&ff.name[8], &ff.name[9]); return ff.name; } else return NULL; } #ifdef TEST int main(int argc, char *argv[]) { char *label; if (2 > argc) { puts("\aUsage: GETVOL d[:]"); puts("where: d = drive letter (e.g. A, B, C, etc."); return -1; } if (NULL == (label = getvol(*argv[1]))) printf("Unable to read a label on drive %c:\n", *argv[1]); else printf("The volume label of drive %c: is \"%s\"\n", *argv[1], label); return 0; } #endif