{ CF> Ok I know in pascal you can basiclly us up t0 64k for varibles.... But how CF> can I set it up to use... lets say 256k for varibles. I mean, -XMS- CF> memeory? =- Chris Forbis First, you may allocate 256k without XMS. Just using the following routines: function DosMaxAvail : longint; function MemAlloc(Size : longint) : pointer; function MemFree(P : pointer) : integer; function MemRealloc(P : pointer; NewSize : longint) : integer; } Function DosMaxAvail : longint; assembler; { Returns the size of the largest contiguous free memory block This function should be called ONLY when both HeapMin/HeapMax memory allocation parameters set to zero } Asm MOV BX,0FFFFh MOV AH,48h INT 21h MOV AX,BX MOV BX,16 MUL BX End; { DosMaxAvail } Function MemAlloc(Size : longint) : pointer; assembler; { Creates a dynamic variable of the specified size and returns the pointer to it. This function should be called ONLY when both HeapMin/HeapMax memory allocation parameters set to zero } Asm @@1: MOV AX,WORD PTR [Size] MOV DX,WORD PTR [Size+2] MOV CX,16 DIV CX INC AX MOV BX,AX MOV AH,48h INT 21h JNC @@2 XOR AX,AX @@2: MOV DX,AX XOR AX,AX End; { MemAlloc } Procedure MemFree(P : pointer); assembler; { Disposes of a given dynamic variable. This function should be called ONLY when both HeapMin/HeapMax memory allocation parameters set to zero } Asm MOV ES,WORD PTR [P+2] MOV AH,49h INT 21h End; { MemFree } Function MemRealloc(P : pointer; NewSize : longint) : pointer; assembler; { Changes the size of en existed memory block. This function should be called ONLY when both HeapMin/HeapMax memory allocation parameters set to zero } Asm @@1: MOV AX,WORD PTR [NewSize] PUSH AX MOV DX,WORD PTR [NewSize+2] PUSH DX MOV CX,16 DIV CX INC AX MOV BX,AX MOV AH,4Ah INT 21h POP DX POP AX JNC @@2 XOR DX,DX XOR AX,AX @@2: End; { MemRealloc } { Okey, the main program: } {$M 4096,0,0} const MemToAlloc = 256 * 1024; { 256k } var MemoryBlock : pointer; Begin if DosMaxAvail >= MemToAlloc then begin WriteLn('Dos free memory before allocating ', MemToAlloc shr 10, 'kb: ', DosMaxAvail shr 10, 'kb.'); MemoryBlock := MemAlloc(MemToAlloc); WriteLn('Dos free memory after allocating ', MemToAlloc shr 10, 'kb: ', DosMaxAvail shr 10, 'kb.'); { if MemoryBlock = nil then report an error... } MemFree(MemoryBlock) end else WriteLn('Not enough memory. ', (MemToAlloc - DosMaxAvail) shr 10, 'kb more needed.') End.