{ From: BRIAN GRAINGER Refer#: NONE Subj: Multiple open files Conf: (58) Pascal --------------------------------------------------------------------------- RL±I would like to open 20-50 silumtaneous files (in TP 6.0 or 7.0). Two ways that I know of. The first involves sleuthing around in the Program Segment Prefix prepended to the memory image of a program's .EXE file. This involves undocumented DOS calls, but is known to work. The second is to use Interrupt 21h, Function 67h, Set Handle Count. This is buggy in the original release of DOS 3.3, but is apparently reliable in later versions. } USES Dos; CONST LotsaHandles = 24861; FUNCTION SetHandleCount(Count : WORD) : WORD; VAR Regs : Registers; BEGIN SetHandleCount := 0; WITH Regs DO BEGIN AH := $67; BX := Count; Intr($21, Regs); IF Flags AND fCarry <> 0 THEN (* Error? *) SetHandleCount := AX; (* AX returns error code *) END; END; BEGIN IF SetHandleCount(LotsaHandles) <> 0 THEN WriteLn('Sorry. Better luck next time.') ELSE WriteLn('What do think I am, a mainframe?'); END. { ASSEMBLER TO DO THE SAME THING (If you are not using protected mode you have to limit the use of DOS memory by using compiler direvtive $M in BP. DOS steals the first 5 handles for std. devices. This require at least DOS 3.3) } procedure SetHandleCount( wInAnt: WORD ); var err : Boolean; begin asm MOV AX, $6700; MOV BX, wInAnt INT $21 MOV err, 0 JNC @l1 MOV err, 1 { Error! } @l1: end; if err then begin ClrScr; writeln('Not enough memory'); halt(0); end; end;