	opt	AMIGA

	include	exec/execbase.i
	include	devices/input_lib.i
	include	devices/inputevent.i

	moveq	#RETURN_FAIL,d7
	move.l	4.w,a6
	lea	DOS.Name(pc),a1
	move.l	#37,d0
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,d6
	beq	exit
	jsr	_LVOCreateMsgPort(a6)
	move.l	d0,d5
	beq	closedos
	move.l	d5,a0
	move.l	#IOSTD_SIZE,d0
	jsr	_LVOCreateIORequest(a6)
	move.l	d0,d4
	beq	delport
	move.l	d4,a1
	lea	Input.Name(pc),a0
	moveq	#0,d0
	move.l	d0,d1
	jsr	_LVOOpenDevice(a6)
	tst.b	d0
	bne	delio
	moveq	#RETURN_ERROR,d7
	move.l	d6,a6
	move.l	#Args.Template,d1
	sub.l	#8,sp
	move.l	sp,d2
	moveq	#0,d3
	jsr	_LVOReadArgs(a6)
	move.l	d0,d3
	movea.l	(sp)+,a4	; ONQUAL
	movea.l	(sp)+,a5	; OFFQUAL
	beq.s	closeinput

	move.l	d4,a1
	move.l	IO_DEVICE(a1),a6
	jsr	_LVOPeekQualifier(a6)
	moveq	#0,d7

	moveq	#0,d2
	move.l	a4,d1
	beq.s	onend

	moveq	#0,d1
onloop	lea	Qual.Table(pc),a0
	move.b	(a4)+,d1
	beq.s	onend
searchon
	cmp.b	(a0)+,d1
	beq.s	teston
	cmp.b	#-1,(a0)+
	beq.s	onloop
	bra.s	searchon
teston	move.b	(a0),d2
	btst	d2,d0
	bne.s	onloop	; bit=1 => qualifier on, ok
	bra.s	end

onend	move.l	a5,d1
	beq.s	offend

	moveq	#0,d1
offloop	lea	Qual.Table(pc),a0
	move.b	(a5)+,d1
	beq.s	offend
searchoff
	cmp.b	(a0)+,d1
	beq.s	testoff
	cmp.b	#-1,(a0)+
	beq.s	offloop
	bra.s	searchoff
testoff	move.b	(a0),d2
	btst	d2,d0
	beq.s	offloop	; bit=0 => qualifier off, ok
	bra.s	end

offend	moveq	#5,d7

end	move.l	d3,d1
	move.l	d6,a6
	jsr	_LVOFreeArgs(a6)
closeinput
	move.l	d4,a1
	move.l	4.w,a6
	jsr	_LVOCloseDevice(a6)
delio	move.l	d4,a0
	jsr	_LVODeleteIORequest(a6)
delport	move.l	d5,a0
	jsr	_LVODeleteMsgPort(a6)
closedos
	move.l	d6,a1
	jsr	_LVOCloseLibrary(a6)
exit	move.l	d7,d0
	rts

Qual.Table
	dc.b	's',IEQUALIFIERB_LSHIFT
	dc.b	'S',IEQUALIFIERB_RSHIFT
	dc.b	'c',IEQUALIFIERB_CONTROL
	dc.b	'C',IEQUALIFIERB_CAPSLOCK
	dc.b	'a',IEQUALIFIERB_LALT
	dc.b	'A',IEQUALIFIERB_RALT
	dc.b	'g',IEQUALIFIERB_LCOMMAND
	dc.b	'G',IEQUALIFIERB_RCOMMAND
	dc.b	'b',IEQUALIFIERB_LEFTBUTTON
	dc.b	'B',IEQUALIFIERB_RBUTTON
	dc.b	'm',IEQUALIFIERB_MIDBUTTON
	dc.b	0,-1

DOS.Name	dc.b	'dos.library',0
Input.Name	dc.b	'input.device',0
Args.Template	dc.b	'ONQUAL,OFFQUAL',0
