home *** CD-ROM | disk | FTP | other *** search
- {
- 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 := $4A;
- Reg.es := PrefixSeg;
- Reg.bx := $FFFF;
- msDos(Reg);
-
- {Set the Program size to the allow For new handles}
- Reg.ah := $4A;
- 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.
-