
**
**	$VER: gcmacros.i (20/10/94)
**
**	GC Customized Macros
**
** 	(C) Copyright 1994 The Beet Research
**	All rights reserved.
**

		IFND	BDGMACROS_I

BDGMACROS_I	SET	1


; for calling exec once (saves a6)

sys		MACRO			; syntax: liboffset
		move.l	a6,-(sp)
		move.l	4.w,a6
		jsr	_LVO\1(a6)
		move.l	(sp)+,a6
		ENDM


; for calling library functions

call		MACRO			; syntax: liboffset,[libbase]
		IFNC 	'\2',''
		move.l	a6,-(sp)
		move.l	_\2Base(pc),a6
		jsr	_LVO\1(a6)
		move.l	(sp)+,a6
		ELSE
		jsr	_LVO\1(a6)
		ENDC
		ENDM


; jumps to library function

calljmp		MACRO			; syntax: liboffset
		jmp	_LVO\1(a6)
		ENDM


; sets library base

setbase		MACRO			; syntax: libbase
		move.l	_\1Base(pc),a6
		ENDM


; sets exec base

setexec		MACRO			; syntax: none
		IFND	_ExecBase
		move.l	4.w,a6
		ELSE
		move.l	_ExecBase(pc),a6
		ENDC
		ENDM


; clears data register

cld		MACRO			; syntax: Dx
		moveq	#0,\1
		ENDM


; clears address register

cla		MACRO			; syntax: Ax
		sub.l	\1,\1
		ENDM


; opens library with version care or not

openlib		MACRO			; syntax: libname,[libversion]
		lea	\1(pc),a1
		IFNC	'\2',''
		IF	\2<$7f
		moveq	#\2,d0
		ELSE
		move.l	#\2,d0
		ENDC
		ELSE
		moveq	#0,d0
		ENDC
		jsr	_LVOOpenLibrary(a6)
		ENDM


; closes library safe (checks if it was opened)

clslib		MACRO			; syntax: libbase
		move.l	_\1Base(pc),a1
		cmp.l	#0,a1
		beq.s	.lno\1
		jsr	_LVOCloseLibrary(a6)
.lno\1
		ENDM


; tests address register; if it's equal 0 jumps

tstabeq		MACRO			; syntax: Ax,<label>
		cmpa.l	#0,\1
		beq.s	\2
		ENDM



		IFD	LIBRARIES_REQTOOLS_I

; allocs reqtools.library's requester

allocreq	MACRO
		moveq.l	#\1,d0		; syntax: type, place to store ptr
		sub.l	a0,a0
		call	rtAllocRequestA
		move.l	d0,\2
		ENDM

; frees requester safe

freereq		MACRO
		move.l	\1(pc),a1	; syntax: ptr
		cmp.l	#0,a1
		beq.s	.rno\1
		call	rtFreeRequest
.rno\1
		ENDM

		ENDC

		IFD	INTUITION_INTUITION_I

; activates gadget

actgad		MACRO			; syntax: gadget,window
		move.l	\1,a0
		move.l	\2(pc),a1
		sub.l	a2,a2
		call	ActivateGadget,Intuition
		ENDM

	 	ENDC


		IFD	LIBRARIES_GADTOOLS_I

; changes gadtools.library' gadget

gadchg		MACRO			; syntax: gad,win,taglist
		move.l	\1,a0
		move.l	\2(pc),a1
		sub.l	a2,a2
		call	GT_SetGadgetAttrsA
		ENDM

		ENDC


		IFD	LOWERUNDERSCORE_I

ngadchg		MACRO			; syntax: gad,win,taglist,[ea]
		move.l	\1,a0
		move.l	\2(pc),a1
		sub.l	a2,a2
		IFNC	'\3',''
		lea	\3(pc),a3
		ELSE		
		IFNC	'\4',''
		move.l	\4,a3
		ENDC
		ENDC
		jsr	LU_SetGadgetAttrsA
		ENDM

		ENDC

TRUE		= 	1
NULL		= 	0
FALSE		=	0
execbase 	= 	4
_SysBase 	=	4

		ENDC

