* FMEMORY.FOR * This example shows how to get information about free * memory using DPMI call 0500h under DOS/4GW using Open * Watcom FORTRAN 77/386. Note that only the first field * of the structure is guaranteed to contain a valid value; * any field not returned by DOS/4GW is set to -1 * (0FFFFFFFFh). * Compile & Link: set finclude=\watcom\src\fortran\dos * wfl386 -l=dos4g fmemory * Pragma to get the default data segment *$pragma aux GetDS = "mov ax,ds" value [ax] modify exact [ax] program memory implicit none include 'dos.fi' structure /meminfo/ integer*4 LargestBlockAvail integer*4 MaxUnlockedPage integer*4 LargestLockablePage integer*4 LinAddrSpace integer*4 NumFreePagesAvail integer*4 NumPhysicalPagesFree integer*4 TotalPhysicalPages integer*4 FreeLinAddrSpace integer*4 SizeOfPageFile integer*4 Reserved1 integer*4 Reserved2 end structure * Set up the register information for the interrupt call record /meminfo/ MemInfo integer interrupt_no integer*2 GetDS parameter( interrupt_no='31'x) ds = es = fs = gs = 0 EAX = '00000500'x ES = GetDS() EDI = loc(MemInfo) call fintr( interrupt_no, regs) * Report the information returned by the DPMI host print *,'------------------------------------------' print *,'Largest available block (in bytes): ', & Meminfo.LargestBlockAvail print *,'Maximum unlocked page allocation: ', & MemInfo.MaxUnlockedPage print *,'Pages that can be allocated and locked: ', & MemInfo.LargestLockablePage print *,'Total linear address space including' // & ' allocated pages:', MemInfo.LinAddrSpace print *,'Number of free pages available: ', & MemInfo.NumFreePagesAvail print *,'Number of physical pages not in use: ', & MemInfo.NumPhysicalPagesFree print *,'Total physical pages managed by host: ', & MemInfo.TotalPhysicalPages print *,'Free linear address space (pages): ', & MemInfo.FreeLinAddrSpace print *,'Size of paging/file partition (pages): ', & MemInfo.SizeOfPageFile end