Posted By: Keson (Keson) on 'CZprogram' Title: Re: vic jak 15 souboru.... Date: Mon Dec 2 20:15:16 1996 Ahoj, > Po 15 otevrenem souboru vam to hodis stejne jako me :"Too many open files" i Od M$-DOSu verze asi tak 3.3 je dostupna funkce 67H: Set File Handle Count Expects AH 67H BX desired maximum number of handles (up to ffffH) ---------------------------------------------------------------- Returns AX error code if CF is set to CY No a tak kdyz ji zavolas, tak se ti (dal li Panbu) vytvori pozadovanej pocet fajl-handlu (rek bych ze maximalne 255) a muzes otevrit vic souboru. V Pascalu muze nastat problem s pameti. DOS totiz pri volani fce 67H potrebuje alokovat patricnou pamet pro sebe a pukud Pas.program vyuziva vsechnu pro sebe, tak to krachne. Da se to resit tak, ze bud nevyuzijes vsechnu pamet {$M 4096,0,1024} nebo pomoci dos. fce 4aH zmencis blok pameti vyuzivany packalem. V tom pripade musis zmensit i HeapEnd ukazujici na konec Heapu. Keson Priklad: Pozor !!! psal jsem to ted' a dost narychlo a urcite tam bude mooooooooooooooooc CHYB. <----------------------------------------------------------------> UNIT FHndls; {Sets number of file-handles to HANDLES_COUNT Freeware by T. Jirka 1996 NO WARANTY !!!} INTERFACE IMPLEMENTATION CONST HANDLES_COUNT = 40; MEM_NEEDED = ((HANDLES_COUNT * 2 - 1) Div 16) + 1; {in paragraphs} TYPE MCB_T = Record {Memory Control Block} MCB_Type : Char; Owner : Word; Size : Word; IDN : Array[1..$B] Of Char; {Process name (I think)} End; VAR pMcb : ^MCB_T; PROCEDURE Error; BEGIN WriteLn(#7'Chyba v unitu FHndls'); Halt(1); END; {Error} PROCEDURE Inc_Handles; VAR My_MCB_Size : Word; BEGIN {Inc_Handles} {Test Heap} If (HeapPtr <> HeapOrg) Or (Ofs(HeapOrg^) <> 0) Or (Ofs(HeapEnd^) <> 0) Then Error; If Seg(HeapEnd^) - Seg(HeapOrg^) < MEM_NEEDED Then Error; {Shrink Heap} HeapEnd := Ptr(Seg(HeapEnd^) - MEM_NEEDED, 0); pMCB := Ptr(PrefixSeg-1,0); My_MCB_Size := pMCB^.Size - MEM_NEEDED; Asm mov AH,4ah {** Shrink MCB **} mov ES,PrefixSeg mov BX,My_MCB_Size int 21h jnc @GoOn Call Error; @GoOn: mov AH,67h {** Create new File handles **} mov BX,HANDLES_COUNT int 21h jnc @Konec Call Error; @Konec: End; END; {Inc_Handles} BEGIN {Main} asm mov AH,67h {** Create new File handles **} mov BX,HANDLES_COUNT int 21h jnc @Konec {No Error} cmp AX,8 {Error - insufficient memory} je @FreeMem Call Error; @FreeMem: Call Inc_Handles; {Free some bytes from heap} @Konec: end; END. <------------------------------------------------------------------------>