if1
LARGE	equ 1			; define your memory model here

ifdef	SMALL
	; default, so do nothing
	else

ifdef	MEDIUM
	LARGE_CODE equ 1
	else

ifdef	COMPACT
	LARGE_DATA equ 1
	else

ifdef	LARGE
	LARGE_DATA equ 1
	LARGE_CODE equ 1

else
	%out No memory model defined--assuming SMALL

endif	; LARGE
endif	; COMPACT
endif	; MEDIUM
endif	; SMALL


beginproc macro procname

ifdef	LARGE_CODE
	procname proc far
else
	procname proc near
endif	; LARGE_CODE

	endm	; beginproc


endif	; if1


_TEXT	SEGMENT	BYTE PUBLIC 'CODE'
_TEXT	ENDS
_DATA	SEGMENT WORD PUBLIC 'DATA'
_DATA	ENDS
CONST	SEGMENT WORD PUBLIC 'CONST'
CONST	ENDS
_BSS	SEGMENT WORD PUBLIC 'BSS'
_BSS	ENDS

DGROUP	GROUP	CONST, _BSS, _DATA
	assume cs:_text, ds:dgroup, ss:dgroup, es:dgroup

; define X as the offset of first argument on stack frame

ifdef LARGE_CODE
	X	equ 6			; return offset and segment + old BP
else
	X	equ 4			; return offset + old BP
endif	; LARGE_CODE
