;--------------------------------------------------------
;program title:		Memory Available
;author:		Peter Grogono
;date written:		May 1982
;source:		Pascal/Z Users' Group newsletter
;			May 1982 issue.
;
;DECLARE:
;	FUNCTION MEMAVAIL: INTEGER; EXTERNAL;
;
;EXAMPLE CALL:
;	if ( memavail >= 0 ) and ( memavail < 250 ) then
;		<execute short of space routine>
;	else
;		<enough space>;
;
;SUMMARY:
;Returns the difference in value between the top of the heap and the
;stack as an integer value.  If the value returned is greater than
;32767, Pascal will consider it to be negative. You can correct for
;this by subtracting the value from 65536.  For example: assume
;memavail = -12000 then there are 65536 + (-12000) = 53536 bytes of
;unused memory.
; short program example:
;		var	free: real;
;		function memavail: integer; external;
;		...
;		if memavail < 0 then
;		   free := 65537.0 + memavail
;		else
;		   free := memavail;
;		writeln ( free:6:0 );
;--------------------------------------------------------
	entry	memavail
	name	memavail
memavail:	
	push	ix
	pop	h	;HL = address of top of stack
	exx
	push	h
	exx
	pop	d	;now DE = address of top of heap
	dsbc	d	;HL = distance between heap & stack
	xchg		;put it in DE for Pascal/Z
	ret		;all done
;--------------------------------------------------------
