home *** CD-ROM | disk | FTP | other *** search
- {
- >I am having difficulty changing a disk volume Label using Turbo Pascal.
- >Does anyone know how to acComplish this?
- }
- Uses
- Dos;
-
- Type fcbType = Record
- drive : Byte;
- name : Array[1..8] of Char;
- ext : Array[1..3] of Char;
- fpos : Word;
- recsize : Word;
- fsize : LongInt;
- fdate : Word;
- ftime : Word;
- reserv : Array[1..8] of Byte;
- currec : Byte;
- relrec : LongInt;
- end;
- extfcb = Record
- flag : Byte; { must be $ff! }
- reserv : Array[1..5] of Byte;
- attrib : Byte;
- fcb : fcbType;
- end;
-
-
- Function GetVolLabel(drive:Char):String;
- Var sr : SearchRec;
- begin
- findfirst(drive+':\*.*',VolumeID,sr);
- if Doserror=0 then GetVolLabel:=sr.name
- else GetVolLabel:='';
- end;
-
-
- Procedure setfcbname(Var fcb:fcbType; name:String);
- Var p : Byte;
- begin
- p:=pos('.',name);
- if p=0 then begin
- p:=length(name)+1;
- name:=name+'.';
- end;
- fillChar(fcb.name,11,' ');
- move(name[1],fcb.name,p-1);
- move(name[p+1],fcb.ext,length(name)-p);
- end;
-
-
- Procedure SetVolLabel(drive:Char; vLabel:String);
- Var fcb : extfcb;
- vl : PathStr;
- regs : Registers;
- f : File;
- begin
- vl:=GetVolLabel(drive);
- fcb.flag:=$ff;
- fcb.attrib:=VolumeID;
- if vl<>'' then begin
- setfcbname(fcb.fcb,vl);
- fcb.fcb.drive:=ord(UpCase(drive))-64;
- regs.ah:=$13; { Delete File }
- regs.ds:=seg(fcb);
- regs.dx:=ofs(fcb);
- msDos(regs);
- end;
- if vLabel<>'' then begin
- fcb.fcb.drive:=ord(UpCase(drive))-64;
- setfcbname(fcb.fcb,vLabel);
- With regs do begin
- ah:=$16; { Create File }
- ds:=seg(fcb);
- dx:=ofs(fcb);
- msDos(regs);
- ah:=$10; { Close File }
- ds:=seg(fcb);
- dx:=ofs(fcb);
- msDos(regs);
- end;
- end;
- end;