Contributor: TREVOR CARLSEN 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.