|
@@ -332,12 +332,30 @@ TYPE ExtendedFat32FreeSpaceRec=packed Record
|
|
Dummy,Dummy2 : DWORD; {8 bytes reserved}
|
|
Dummy,Dummy2 : DWORD; {8 bytes reserved}
|
|
END;
|
|
END;
|
|
|
|
|
|
|
|
+
|
|
function do_diskdata(drive : byte; Free : BOOLEAN) : Int64;
|
|
function do_diskdata(drive : byte; Free : BOOLEAN) : Int64;
|
|
VAR
|
|
VAR
|
|
S : String;
|
|
S : String;
|
|
Rec : ExtendedFat32FreeSpaceRec;
|
|
Rec : ExtendedFat32FreeSpaceRec;
|
|
|
|
+
|
|
|
|
+ procedure OldDosDiskData; inline;
|
|
|
|
+ begin
|
|
|
|
+ dosregs.dl:=drive;
|
|
|
|
+ dosregs.ah:=$36;
|
|
|
|
+ msdos(dosregs);
|
|
|
|
+ if dosregs.ax<>$FFFF then
|
|
|
|
+ begin
|
|
|
|
+ if Free then
|
|
|
|
+ Do_DiskData:=int64(dosregs.ax)*dosregs.bx*dosregs.cx
|
|
|
|
+ else
|
|
|
|
+ Do_DiskData:=int64(dosregs.ax)*dosregs.cx*dosregs.dx;
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ do_diskdata:=-1;
|
|
|
|
+ end;
|
|
|
|
+
|
|
BEGIN
|
|
BEGIN
|
|
- if {(swap(dosversion)>=$070A)} AND LFNSupport then
|
|
|
|
|
|
+ if LFNSupport then
|
|
begin
|
|
begin
|
|
S:='C:\'#0;
|
|
S:='C:\'#0;
|
|
if Drive=0 then
|
|
if Drive=0 then
|
|
@@ -349,6 +367,7 @@ BEGIN
|
|
else
|
|
else
|
|
S[1]:=chr(Drive+64);
|
|
S[1]:=chr(Drive+64);
|
|
Rec.Strucversion:=0;
|
|
Rec.Strucversion:=0;
|
|
|
|
+ Rec.RetSize := 0;
|
|
dosmemput(tb_segment,tb_offset,Rec,SIZEOF(ExtendedFat32FreeSpaceRec));
|
|
dosmemput(tb_segment,tb_offset,Rec,SIZEOF(ExtendedFat32FreeSpaceRec));
|
|
dosmemput(tb_segment,tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1,S[1],4);
|
|
dosmemput(tb_segment,tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1,S[1],4);
|
|
dosregs.dx:=tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1;
|
|
dosregs.dx:=tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1;
|
|
@@ -360,7 +379,10 @@ BEGIN
|
|
msdos(dosregs);
|
|
msdos(dosregs);
|
|
if (dosregs.flags and fcarry) = 0 then {No error clausule in int except cf}
|
|
if (dosregs.flags and fcarry) = 0 then {No error clausule in int except cf}
|
|
begin
|
|
begin
|
|
- copyfromdos(rec,Sizeof(ExtendedFat32FreeSpaceRec));
|
|
|
|
|
|
+ copyfromdos(rec,Sizeof(ExtendedFat32FreeSpaceRec));
|
|
|
|
+ if Rec.RetSize = 0 then (* Error - "FAT32" function not supported! *)
|
|
|
|
+ OldDosDiskData
|
|
|
|
+ else
|
|
if Free then
|
|
if Free then
|
|
Do_DiskData:=int64(rec.AvailAllocUnits)*rec.SecPerClus*rec.BytePerSec
|
|
Do_DiskData:=int64(rec.AvailAllocUnits)*rec.SecPerClus*rec.BytePerSec
|
|
else
|
|
else
|
|
@@ -370,22 +392,10 @@ BEGIN
|
|
Do_DiskData:=-1;
|
|
Do_DiskData:=-1;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
- begin
|
|
|
|
- dosregs.dl:=drive;
|
|
|
|
- dosregs.ah:=$36;
|
|
|
|
- msdos(dosregs);
|
|
|
|
- if dosregs.ax<>$FFFF then
|
|
|
|
- begin
|
|
|
|
- if Free then
|
|
|
|
- Do_DiskData:=int64(dosregs.ax)*dosregs.bx*dosregs.cx
|
|
|
|
- else
|
|
|
|
- Do_DiskData:=int64(dosregs.ax)*dosregs.cx*dosregs.dx;
|
|
|
|
- end
|
|
|
|
- else
|
|
|
|
- do_diskdata:=-1;
|
|
|
|
- end;
|
|
|
|
|
|
+ OldDosDiskData;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
function diskfree(drive : byte) : int64;
|
|
function diskfree(drive : byte) : int64;
|
|
begin
|
|
begin
|
|
diskfree:=Do_DiskData(drive,TRUE);
|
|
diskfree:=Do_DiskData(drive,TRUE);
|