
		public	_WaitMsg
		public	_LVOWait
		public	_SysBase

NT_MESSAGE	equ	5
NT_FREEMSG	equ	6
NT_REPLYMSG	equ	7

_WaitMsg:
		movem.l A2/A6,-(sp)
		move.l	12(sp),A2           ; A2 = message
		move.l	_SysBase,A6
.1		cmp.b	#NT_REPLYMSG,8(A2)  ; has it been replied?
		beq	.10
.2		cmp.b	#NT_FREEMSG,8(A2)   ; has it been freed?
		beq	.15
		move.l	14(A2),A1           ; reply port
		tst.l	A1
		beq	.1		    ; NULL reply port, busy wait.
		move.b	15(A1),D1           ; signal bit #
		moveq.l #1,D0
		asl.l	D1,D0		    ; D0 = signal mask
		jsr	_LVOWait(A6)        ; wait for signal
		bra	.1		    ; loop again
.10		jsr	_LVODisable(A6)
		move.l	A2,A1
		jsr	_LVORemove(A6)
		jsr	_LVOEnable(A6)
.15		movem.l (sp)+,A2/A6         ; return the message
		move.l	A2,D0
		rts

