home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
- PRODUCT : TURBO PASCAL NUMBER : 545
- VERSION : 4.0, 5.0, AND 5.5
- OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
- DATE : February 28, 1992 PAGE : 1/4
-
- TITLE : FILES OPEN EXTEND
-
-
-
-
- The following is public domain information that has been uploaded
- to our Forum on CompuServe. As a courtesy to our users that do
- not have immediate access to CompuServe, Technical Support
- distributes these routines free of charge.
-
- However, because these routines are public domain programs, not
- developed by Borland International, we are unable to provide any
- technical support or assistance using these routines. If you need
- assistance using these routines, or are experiencing
- difficulties, we recommend that you log onto CompuServe and
- request assistance from the Forum members that developed these
- routines.
-
- The following unit extends the maximum number of files that can
- be open simultaneously from 20 to 255. Files in DOS 2.0 or later
- are controlled by file handles. The number of file handles
- available to application programs is controlled by the FILES
- environment variable stored in a CONFIG.SYS file. If no FILES
- variable is established in a CONFIG.SYS file, then only 8 file
- handles are available. However, DOS requires 5 file handles for
- its own use (controlling devices such as CON, AUX, PRN, etc).
- This le
-
-
- aves only 3 handles for use by application programs.
-
- By specifying a value for the FILES environment variable, you can
- increase the number of possible file handles from 8 up to 20.
- Since DOS still requires 5, 15 are left for application programs.
- But you cannot normally increase the number of handles beyond 20.
-
- With DOS version 3.0, a new DOS function was added to increase
- the number of file handles available. However, the function must
- be called from application programs that have previously reserved
- space for the new file handles.
-
- The unit EXTEND, described below, resizes the amount of allocated
- memory for a Turbo Pascal program to allow space for new file
- handles. In doing so, it also resizes the heap by adjusting the
- value of FreePtr, the pointer used in FreeList management. Since
- the FreeList is being manipulated, the heap must be empty when
- the EXTEND unit is initialized. This can be guaranteed by
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : TURBO PASCAL NUMBER : 545
- VERSION : 4.0, 5.0, AND 5.5
- OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
- DATE : February 28, 1992 PAGE : 2/4
-
- TITLE : FILES OPEN EXTEND
-
-
-
-
- including EXTEND as one of the first units in your program's USES
- statement. If any heap has been allocated when EXTEND initialize
-
-
- s, the program will halt with an error message.
-
- Notice that the interface section of the EXTEND unit is empty.
- The initialization section of the unit takes care of the unit's
- entire function. Other than including EXTEND in a program's USES
- statement, no other operation need be preformed.
-
- Before using EXTEND, you must specify a FILES variable in the
- CONFIG.SYS file such as the following:
-
- FILES = 255
-
- Refer to your DOS User's Guide for more information regarding the
- CONFIG.SYS file and the FILES variable.
-
- The unit EXTEND is set up for 255 file handles. You can reduce
- this number by changing the HANDLES constant in the unit's source
- code and reducing the number specified for the FILES environment
- variable.
-
- 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;
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : TURBO PASCAL NUMBER : 545
- VERSION : 4.0, 5.0, AND 5.5
- OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
- DATE : February 28, 1992 PAGE : 3/4
-
- TITLE : FILES OPEN EXTEND
-
-
-
-
- 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 Ofs(FreePtr^)<>0 then
- {Checks to see if the Heap is empty}
- begin
- write('Heap must be empty before Extend unit
- initializes');
- writeln;
- halt(1);
- end;
- FreePtr:=ptr(Seg(FreePtr^)-(Handles div 8 +1), Ofs(FreePtr^));
-
- {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);
- Writeln('In the Extend Unit');
- halt(1);
- end;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : TURBO PASCAL NUMBER : 545
- VERSION : 4.0, 5.0, AND 5.5
- OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
- DATE : February 28, 1992 PAGE : 4/4
-
- TITLE : FILES OPEN EXTEND
-
-
-
-
- {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}
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRODUCT : TURBO PASCAL NUMBER : 545
- VERSION : 4.0, 5.0, AND 5.5
- OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
- DATE : February 28, 1992 PAGE : 5/4
-
- TITLE : FILES OPEN EXTEND
-
-
-
-
- for i:=1 to 250 do
- begin
- erase(f^[i]);
- writeln('Erasing #',i);
- end;
-
- end.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-