|
|
1.1 ! root 1: /*** ! 2: * Example of DOSQFSINFO and DOSSETFSINFO. Also DOSERROR. ! 3: * ! 4: * First do a DOSQFSINFO level 1 to get the A drive ! 5: * parameters, then a DOSQFSINFO level 2 to check the volume ! 6: * label of the A drive. Next do a DOSSETFSINFO to ! 7: * change the volume label to FSIDEMO, and lastly another ! 8: * DOSQFSINFO level 2 to verify the set. ! 9: */ ! 10: ! 11: #include <doscalls.h> ! 12: ! 13: #define FSIBUF 40 ! 14: ! 15: unsigned drive; /* drive number */ ! 16: unsigned retcode; /* return code from call */ ! 17: unsigned testbufsiz; /* length of volume label to set */ ! 18: int *date_time; /* date and time returned by level 2 query */ ! 19: char setlabel[] = "\007FSIDEMO"; /* buffer for DosSetFSInfo */ ! 20: /* starts with byte of string length */ ! 21: ! 22: /* FSInfoBuf level 1 */ ! 23: typedef struct { ! 24: unsigned long fsID; /* file system ID */ ! 25: unsigned long SecPerAU; /* number of sectors per alloc. unit */ ! 26: unsigned long NumAU; /* number of allocation units */ ! 27: unsigned long NumAUAvail; /* available allocation units */ ! 28: unsigned BytesSec; /* number of bytes per sector */ ! 29: } lev1buf; ! 30: ! 31: lev1buf fsinfobuf; ! 32: ! 33: /* the level 2 FSInfoBuf buffer contains ! 34: * 2 bytes - volume label date of creation ! 35: * 2 bytes - volume label time of creation ! 36: * 1 byte - length of volume label ! 37: * 'n' bytes - the volume label string ! 38: */ ! 39: ! 40: char buffer[FSIBUF]; /* buffer for DosQFSInfo, level 2 */ ! 41: ! 42: main() ! 43: { ! 44: unsigned level; ! 45: drive = 1; /* A drive */ ! 46: ! 47: /* turn off hard errors so we see if user has drive A open */ ! 48: DOSERROR(0); ! 49: ! 50: /* check the parameters of the A drive using DOSQFSINFO level 1 */ ! 51: level = 1; ! 52: retcode = DOSQFSINFO( drive, level, (char *)&fsinfobuf, FSIBUF); ! 53: ! 54: if ( retcode ) ! 55: printf("Received error %d from DOSQFSINFO\n", retcode); ! 56: else { ! 57: printf("DOSQFSINFO provided the following information:\n"); ! 58: printf(" File System ID - %ld\n", fsinfobuf.fsID); ! 59: printf(" Sectors per allocation unit - %ld\n", ! 60: fsinfobuf.SecPerAU); ! 61: printf(" Number of allocation units - %ld\n", ! 62: fsinfobuf.NumAU); ! 63: printf(" Available allocation units - %ld\n", ! 64: fsinfobuf.NumAUAvail); ! 65: printf(" Bytes per sector - %d\n\n", ! 66: fsinfobuf.BytesSec); ! 67: } ! 68: ! 69: /* check for a volume label on the A drive using DOSQFSINFO ! 70: * level 2. Access the data in the buffer as follows: ! 71: * time - first pair of bytes in the buffer (date_time[0]) ! 72: * date - second pair of bytes in the buffer (date_time[1]) ! 73: * label length - resides at buffer[4], 4 bytes into buffer ! 74: * label - string starts at the fifth byte of the buffer ! 75: */ ! 76: ! 77: level = 2; ! 78: retcode = DOSQFSINFO( drive, level, (char *)buffer, FSIBUF); ! 79: ! 80: date_time = (int *)buffer; /* pointer into time/date info */ ! 81: if ( !retcode ) { /* got volume label */ ! 82: printf("DOSQFSINFO found volume label %s on drive %d\n", ! 83: buffer+5, drive ); ! 84: printf(" label length %d, date 0x%x, time 0x%x\n\n", ! 85: buffer[4], date_time[0], date_time[1] ); ! 86: } ! 87: else if ( retcode == 125 ) ! 88: printf("No volume label found by DOSQFSINFO on drive %d\n\n", ! 89: drive ); ! 90: else ! 91: printf("DOSQFSINFO call failed with error %d\n\n", retcode ); ! 92: ! 93: /* do a DosSetFSInfo, changing the volume label to FSIDEMO */ ! 94: testbufsiz = strlen( setlabel ); ! 95: ! 96: retcode = DOSSETFSINFO( drive, level, setlabel, testbufsiz); ! 97: ! 98: if ( retcode ) ! 99: printf("Error %d setting volume label to %s on drive %d\n\n", ! 100: retcode, setlabel, drive); ! 101: else { ! 102: printf("DOSSETFSINFO set volume label %s\n", setlabel+1); ! 103: ! 104: /* do a DosQFSInfo to verify the set */ ! 105: DOSQFSINFO( drive, level, (char *)buffer, FSIBUF); ! 106: printf("DOSQFSINFO found label %s\n", buffer+5); ! 107: } ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.