Metropoli BBS
VIEWER: terminatehip.s MODE: TEXT (ASCII)
*************************
* Terminate HippoPlayer *
*************************
* If HippoPlayer's port exists, send there a message telling HiP to terminate.
* Can be assembled with Asm-One and Devpac.
* v1.1 - Is pure and can be run from WB
 

 	incdir	include:
	include	exec/exec_lib.i
	include	exec/ports.i
	include	libraries/dosextens.i


	rsreset
hport		rs.b	MP_SIZE
hmessage	rs.b	MN_SIZE
hkill		rs.l	1
hsizeof		rs.b	0

	moveq	#hsizeof/2-1,d0
cl	clr	-(sp)
	dbf	d0,cl
	move.l	sp,a5

	move.l	#"KILL",hkill(a5)	* Killer-message

	move.l	4.w,a6
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l	d0,a4

	moveq	#0,d5
	tst.l	pr_CLI(a4)
	bne.b	hcli
	lea	pr_MsgPort(a4),a0
	jsr	_LVOWaitPort(a6)
	lea	pr_MsgPort(a4),a0
	jsr	_LVOGetMsg(a5)
	move.l	d0,d5
hcli
	jsr	_LVOForbid(a6)
	lea	hportname(pc),a1
	jsr	_LVOFindPort(a6)
	move.l	d0,d2

	tst.l	d2
	beq.b	hnomsg0
	move.l	d2,a3

	bsr.b	hcreateport

	lea	hmessage(a5),a1
	NEWLIST	a1
	move.l	a3,a0		
	pea	hport(a5)
	move.l	(sp)+,MN_REPLYPORT(a1)
	jsr	_LVOPutMsg(a6)
	jsr	_LVOPermit(a6)

	lea	hport(a5),a0	
	jsr	_LVOWaitPort(a6)	* Returns when HiP is terminated.

	bsr.b	hdeleteport

hnomsg0	tst.l	d5
	beq.b	hnomsg
	jsr	_LVOForbid(a6)
	move.l	d5,a1
	jsr	_LVOReplyMsg(a5)
hnomsg
	lea	hsizeof(sp),sp
	moveq	#0,d0
	rts

hcreateport	lea	hport(a5),a2
		moveq	#-1,d0
		jsr	_LVOAllocSignal(a6)
		move.b	d0,MP_SIGBIT(a2)
		move.l	a4,MP_SIGTASK(a2)
		move.b	#NT_MSGPORT,LN_TYPE(a2)
		clr.b	MP_FLAGS(a2)
		move.l	a2,a1
		jmp	_LVOAddPort(a6)

hdeleteport	lea	hport(a5),a2
		move.l	a2,a1
		jsr	_LVORemPort(a6)
		moveq	#0,d0
		move.b	MP_SIGBIT(a2),d0
		jmp	_LVOFreeSignal(a6)

hportname	dc.b	"HiP-Port",0
[ RETURN TO DIRECTORY ]