;께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께
;		   D3X(tm) DOS-Extender v0.90 unleash `h' alpha
;				  pseudo-language
;					
;			Copyright (c) 1998-2004 Daniel Borca
;					
;				 dborca@yahoo.com
;			 http://www.geocities.com/dborca
;께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께께


%macro		proc	1-3
	%push	proc
	%ifidn	%1,__stdcall
		%define	%$lang	__stdcall
		%rotate 1
	%else
		%define	%$lang
	%endif
	%ifidn	%1,near
		%define	%$ret	RETn
		%rotate 1
	%elifidn	%1,far
		%define	%$ret	RETf
		%rotate 1
	%else
		%define	%$ret	RET
	%endif
	%assign	%$arg	0
	%assign	%$loc	0
%1:
%endmacro


%macro		arg	2
	%ifndef	%$leave
		%define	%$leave
		PUSH	BP
		MOV	BP,SP
	%endif
	%ifidn	%$ret,RETf
		%1	equ	%$arg+6
	%else
		%1	equ	%$arg+4
	%endif
	%assign	%$arg	%2+%$arg
%endmacro


%macro		loc	2
	%ifndef	%$leave
		%define	%$leave
		ENTER	%2,0
	%else
		SUB	SP,%2
	%endif
	%assign	%$loc	%$loc-%2
	%1	equ	%$loc
%endmacro


%macro		endp	0
	%ifnctx	proc
		%error	Mismatched `endp'/`proc'
	%else
		%pop
	%endif
%endmacro


%macro		ret	0
	%ifdef	%$leave
		LEAVE
	%endif
	%ifidn	%$lang,__stdcall
		%$ret	%$arg
	%else
		%$ret
	%endif
%endmacro


%macro		callp	1-*
	%rep	%0-1
		%rotate	1
		PUSH	%1
	%endrep
	%rotate	1
		CALL	%1
%endmacro


%macro		push	1-*
	%rep	%0
		PUSH	%1
		%rotate	1
	%endrep
%endmacro


%macro		pop	1-*
	%rep	%0
		POP	%1
		%rotate	1
	%endrep
%endmacro


%macro		jmps	1
		JMP	short %1
%endmacro


%macro		jmpt	1
		db	0eah
		dw	0,%1
%endmacro


%macro		retfd	0-1
		o32	RETF %1
%endmacro


%macro		jump	2
	.%2_%1:
		J%1	%2
%endmacro


%macro		go	2
		J%1	.%2_%1
%endmacro
