Article: Q58650
Product(s): Microsoft Programming Utilities
Version(s): 5.1
Operating System(s):
Keyword(s):
Last Modified: 30-AUG-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft C for MS-DOS, version 5.1
-------------------------------------------------------------------------------
SUMMARY
=======
Changing a drive's volume label involves the use of FCB (file control block)
file processing, and therefore is not supplied with the C run-time libraries.
However, one of the ways to do this is through MS-DOS Interrupt 21h calls for
FCB file manipulation.
MORE INFORMATION
================
Below is an assembly routine written with Microsoft MASM version 5.1 to change a
drive's volume name. To do this, it first sets up an extended FCB to allow for
manipulating files with attributes. Offset 6 of the FCB is set to 8 (_A_VOLID
defined in DOS.H) to specify a volume. The old volume is searched for with "*.*"
as a pattern and deleted, then the volume is re-created with the new volume
label passed by the C caller. The function returns the error code supplied from
the MS-DOS application programming interface (API) that creates the volume
label.
Use the following:
rc = NewVol( iDrive, szName ); // iDrive = Drive number ( 1, 2, ... )
// szName = Up to 11 chars. DOS filename
// rc = Return Code from function.
The new volume label must be passed with 11 characters for the name. Anything
less MUST be padded with spaces.
Sample Code
-----------
; unsigned NewVol( int, char * ) will delete a disk volume and
; create one with the new name.
;
; Assemble with /Dmodel={SMALL MEDIUM COMPACT LARGE}
; /Dlang={C FORTRAN BASIC PASCAL}
%.MODEL model,lang
.DATA
maxlen EQU 11 ;Maximum name length
datasz EQU 2 ;Size of Data Pointers
; Setup an extended FCB
fcb DB 255, 0, 0, 0, 0, 0, 8, 1
DB 37 DUP (?)
default DB '* * ' ;Equivalent to "*.*"
.CODE
NewVol PROC USES si di es, Drive:WORD, VolName:WORD
mov bx,Drive ;Get drive number ( 1 byte )
mov fcb+7,bl ;...and store in FCB offset 7
mov ax,ds
mov es,ax
cld ;Upward move
mov cx,maxlen ;Size of move
mov si,OFFSET default ;Source string to
mov di,OFFSET fcb+8 ;...filename offset in 8 FCB
rep movsb ;Move maxlen bytes of vol name
mov dx,OFFSET fcb ;Delete volume off drive
mov ah,13H
int 21H
mov cx,maxlen
mov si,VolName ;New name passed by C caller
mov di,OFFSET fcb+8
rep movsb ;Copy 11 chars for new label
mov dx,OFFSET fcb ;Create the new volume
mov ah,16H
int 21H
mov dx,OFFSET fcb ;Close the file
mov ah,10H
int 21H
mov ah,0
ret
NewVol ENDP
END
Additional query words: kbinf 5.10
======================================================================
Keywords :
Technology : kbAudDeveloper kbCCompSearch kbZNotKeyword3 kbCComp510DOS
Version : :5.1
=============================================================================