home *** CD-ROM | disk | FTP | other *** search
- 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
-