[Back to DOS SWAG index] [Back to Main SWAG index] [Original]
Unit expfht;
{ Author: Trevor J Carlsen Released into the public domain }
{ PO Box 568 }
{ Port Hedland }
{ Western Australia 6721 }
{ Voice +61 91 732 026 }
{ EXPFHT: This Unit allows an application to expand the number of File }
{ handles in use. It is limited to the number permitted by Dos and }
{ initialised in the FileS= of the config.sys File. }
Interface
Const
NumbFiles= 105;
{ Set to the number of File handles needed. 99 will be the max With }
{ Dos 2.x and 254 With Dos 3.x. (I don't know why not 255!) }
Type
fht = Array[1..NumbFiles] of Byte;
Var
NewFHT : fht;
OldFHT : LongInt;
OldSize : Word;
Function MakeNewFHT: Boolean;
Procedure RestoreOldFHT;
Implementation
Const
Successful : Boolean = False;
Var
OldExitProc : Pointer;
{$R-}
Function MakeNewFHT : Boolean;
{ create a new expanded File handle table - True if successful }
Const
AlreadyUsed : Boolean = False;
begin
if not AlreadyUsed then begin
AlreadyUsed := True;
MakeNewFHT := True;
Successful := True;
OldFHT := MemL[PrefixSeg:$34]; { Store the old FHT address }
FillChar(NewFHT,NumbFiles,$ff); { Fill new table With 255 }
Oldsize := MemW[PrefixSeg:$32]; { Store the old FHT size }
MemW[PrefixSeg:$32] := NumbFiles; { Put new size in the psp }
MemL[PrefixSeg:$34] := LongInt(@NewFHT); { new FHT address in psp }
move(Mem[PrefixSeg:$19],NewFHT,$15); { put contents of old to new }
end { if not AllreadyUsed }
else MakeNewFHT := False;
end; { MakeNewFHT }
{$R+}
{$F+}
Procedure RestoreOldFHT;
begin
ExitProc := OldExitProc;
if Successful then begin
MemW[PrefixSeg:$32] := OldSize;
MemL[PrefixSeg:$34] := OldFHT;
end;
end;
{$F-}
begin
OldExitProc := ExitProc;
ExitProc := @RestoreOldFHT;
end.
[Back to DOS SWAG index] [Back to Main SWAG index] [Original]