Contributor: MARK LEWIS 
{
MARK LEWIS> The problem is that Without allocating a new FCB For Dos, you> can't have more than 15 or so Files open at a time in TP, no> matter WHAT the CONFIG.SYS FileS= statement says. (By default,
i cannot remember exactly what INT 21ドル Function 6700ドル is but here's a PD Unit
i got from borland's bbs the other day... i've trimmed the Text down for
posting... if anyone Really needs everything that comes With it, they should
look For EXTend6.*
}
Unit Extend;
{ This extends the number of File handles from 20 to 255 }
{ Dos requires 5 For itself. Applications can use up to 250 }
Interface
Implementation
Uses
 Dos;
Const
 Handles = 255;
 { You can reduce the value passed to Handles if fewer Files are required. }
Var
 Reg : Registers;
 begin
 { Check the Dos Version - This technique only works For Dos 3.0 or later }
 Reg.ah := 30ドル;
 MsDos(Reg);
 if Reg.al<3 then begin Writeln('Extend Unit Require Dos 3.0 or greater'); halt(1); end; {Reset the FreePtr - This reduces the heap space used by Turbo Pascal} if HeapOrg  HeapPtr then
 {Checks to see if the Heap is empty}
 begin
 Write('Heap must be empty before Extend Unit initializes');
 Writeln;
 halt(1);
 end;
 Heapend := ptr(Seg(Heapend^) - (Handles div 8 + 1), Ofs(Heapend^));
 {Determine how much memory is allocated to Program}
 {Reg.Bx will return how many paraGraphs used by Program}
 Reg.ah := 4ドルA;
 Reg.es := PrefixSeg;
 Reg.bx := $FFFF;
 msDos(Reg);
 {Set the Program size to the allow For new handles}
 Reg.ah := 4ドルA;
 Reg.es := PrefixSeg;
 Reg.bx := reg.bx - (Handles div 8 + 1);
 msDos(Reg);
 {Error when a Block Size is not appropriate}
 if (Reg.flags and 1) = 1 then
 begin
 Writeln('Runtime Error ', Reg.ax, ' in Extend.');
 halt(1);
 end;
 {Allocate Space For Additional Handles}
 reg.ah := 67ドル;
 reg.bx := Handles;
 MsDos(reg);
end.
{
Write the following Program to a separate File. This Program tests the EXTend
Unit. This test should be done on systems equipped With a hard disk.
}
Program TestEx;
Uses
 EXTend;
Type
 FileArray = Array [1..250] of Text;
Var
 f : ^FileArray;
 i : Integer;
 s : String;
begin
 {Allocate Space For fILE Variable Table}
 new(f);
 {oPEN 250 Files simultaneously}
 For i:=1 to 250 do
 begin
 str(i,s);
 Assign(f^[i],'Dum'+s+'.txt');
 reWrite(f^[i]);
 Writeln('Open #',s);
 end;
 {Write some Text to the Files}
 For i:=1 to 250 do
 Write(f^[i],'This is a test File');
 {Close the Files}
 For i:=1 to 250 do
 begin
 close(f^[i]);
 Writeln('Closing #',i);
 end;
 {Erase the Files}
 For i:=1 to 250 do
 begin
 erase(f^[i]);
 Writeln('Erasing #',i);
 end;
end.
 

AltStyle によって変換されたページ (->オリジナル) /