
LVOOpenDevice	EQU	-444
LVOCloseDevice	EQU	-450
LVODoIO		EQU	-456
LVOSendIO	EQU	-462
LVOAddPort	EQU	-354
LVORemPort	EQU	-360
LVOWaitPort	EQU	-384

; IO Block Offsets
IO_COMMAND	EQU	$1C
IO_FLAGS	EQU	$1E
IO_ACTUAL	EQU	$20
IO_LENGTH	EQU	$24
IO_DATA		EQU	$28
IO_OFFSET	EQU	$2C
		include	'includes:misc/_hardware.i'
	
setinputhandler	move.l	4.w,a6
		lea	inpevport,a1
		jsr	lvoaddport(a6)

		lea	inputdevname,a0
		moveq	#0,d0
		lea	inpevioreq,a1
		moveq	#0,d1
		move.l	#inpevport,14(a1)
		jsr	LVOOpenDevice(a6)

		lea	InpevIOReq,a1
		move	#9,IO_Command(a1)	 ; ind_addhandler
		move.b	#1,IO_Flags(a1)
		move.l	#InpEvStuff,io_data(a1)
		jsr	lvosendio(a6)


waitloop	cmp.b	#255,$dff006
		bne.s	waitloop

		move.b	key(pc),d0
		cmp.b	#t,d0
		bne.s	not_t
		move.w	#$00f,$dff180

not_t		cmp.b	#space,d0
		bne.s	not_space
		move.w	#$f00,$dff180

not_space	btst	#6,$bfe001
		bne.s	waitloop


ResetInputHandler
		move.l	4.w,a6
		lea	inpevioreq,a1
		move	#10,io_command(a1) ; ind_remhandler
		move.b	#1,io_flags(a1)
		move.l	#inpevstuff,io_data(a1)
		jsr	lvosendio(a6)

		lea	inpevioreq,a1
		jsr	lvoclosedevice(a6)

		lea	inpevport,a1
		jsr	lvoremport(a6)
		rts


InpEvStuff	dc.l	0,0
		dc.b	2,52 ; type, priority
		dc.l	inpevname
		dc.l	0,InputHandler

inpevname	dc.b "DocDisk_InputHandler",0
		even

;--------------------------------------
; A0-InputEvent, A1-Data Area
;
Inputhandler:	movem.l	d1/a0-a3,-(sp)
		sub.l	a2,a2
		move.l	a0,a1
		move.b	4(a1),d0		; ie_class
		cmp.b	#1,d0  			; rawkey
		beq.s	InpRawkey
		move.l	a1,a2
InpNext		move.l	(a1),a1
		move.l	a1,d0
		bne.s	Inputhandler
InphEnd		move.l	a0,d0
		movem.l	(sp)+,d1/a0-a3
		rts

InpRawkey	bsr.s	InpUnchain
		move	6(a1),d0
		move.b	d0,key
		cmp.b	#98,d0
		beq.s	keyrepon
		cmp.b	#98+128,d0
		beq.s	keyrepoff
		bra.s	InpNext

InpUnchain	move.l	a2,d0
		bne.s	InpUnc2
		move.l	(a1),a0
		rts
InpUnc2		move.l	(a1),(a2)
		rts

KeyRepOn	ST	KeyRepeat
		RTS

KeyRepOff	SF	KeyRepeat
		RTS

Key		ds.b	1
KeyRepeat	ds.b	1
InpEvPort	ds.b	34
InpEvIOReq	ds.b	48

InputDevName	dc.b	'input.device',0
