From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/getvol.c | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/getvol.c (limited to 'reference/C/CONTRIB/SNIP/getvol.c') diff --git a/reference/C/CONTRIB/SNIP/getvol.c b/reference/C/CONTRIB/SNIP/getvol.c new file mode 100755 index 0000000..6321fde --- /dev/null +++ b/reference/C/CONTRIB/SNIP/getvol.c @@ -0,0 +1,68 @@ +/* +** 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 -- cgit v1.2.3-54-g00ecf