* Assembly language version of AutoIconOpen.c * Translated by John Veldthuis (Taranaki) * Only works under AmigaDOS 1.1, need to create port to receive reply msgs * See AutoIconOpen.c for documentation * section "AutoOpenIcon",code NOLIST NOPAGE include "exec/types.i" include "exec/io.i" include "exec/devices.i" include "devices/input.i" include "devices/inputevent.i" LIST xref _AbsExecBase xref _LVOOpenDevice xref _LVOCloseDevice xref _LVODoIO Start lea DevName,a0 ;"Input.Device",0 clr.l d0 lea IORequest,a1 ;IORequest Structure clr.l d1 move.l _AbsExecBase,a6 jsr _LVOOpenDevice(a6) ;open input.device tst.l d0 beq.s Okay ;zero return if device open move.l #10,d0 ;If device not open signal errorto CLI rts Okay lea IORequest,a0 ;Pointer for setup move.w #IND_WRITEEVENT,IO_COMMAND(a0) ;Signal event for Intuition move.b #0,IO_FLAGS(a0) move.l #ie_SIZEOF,IO_LENGTH(a0) ;Length of Event structure lea Event,a2 move.l a2,IO_DATA(a0) ;Address of event structure ** Move pointer to top lefthand corner ** lea Event,a0 move.l #0,ie_NextEvent(a0) ;no next event move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_NOBUTTON,ie_Code(a0) ;no button down move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #-640,ie_X(a0) ;move mouse to upper left move.w #-512,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned *** Move pointer to bottom righthand corner ** lea Event,a0 move.l #0,ie_NextEvent(a0) ;no next event move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #638,ie_X(a0) ;move mouse to lower right move.w #398,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned ** resize window ** lea Event,a0 move.l #0,ie_NextEvent(a0) move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_LBUTTON!IECODE_UP_PREFIX,ie_Code(a0) ;left button up move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #-100,ie_X(a0) ;move mouse left 100 move.w #0,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned ** Move to Disk Icon (595,45)? ** lea Event,a0 move.l #0,ie_NextEvent(a0) move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_NOBUTTON,ie_Code(a0) ;no button move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #55,ie_X(a0) ;move mouse to icon move.w #-355,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned ** Press left button ** lea Event,a0 move.l #0,ie_NextEvent(a0) move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #0,ie_X(a0) move.w #0,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned ** Press left button again ** lea Event,a0 move.l #0,ie_NextEvent(a0) move.b #IECLASS_RAWMOUSE,ie_Class(a0) move.l #0,ie_TimeStamp+TV_SECS(a0) move.l #0,ie_TimeStamp+TV_MICRO(a0) move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down again move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0) move.w #0,ie_X(a0) move.w #0,ie_Y(a0) lea IORequest,a1 jsr _LVODoIO(a6) tst.l d0 bne Error ;Error from IO if not Null returned ** All finished so close device and return to CLI ** lea IORequest,a1 jsr _LVOCloseDevice(a6) moveq.l #0,d0 ;inform CLI of success rts Error lea IORequest,a1 jsr _LVOCloseDevice(a6) move.l #20,d0 rts SECTION "Data",DATA DevName dc.b 'input.device',0 CNOP 0,2 IORequest dc.l 0 dc.b 0 dc.b 0 dc.l 0 dc.l 0 dc.l 0 dc.w 0 dc.l 0 dc.l 0 dc.w 0 dc.b 0 dc.b 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 Event dc.l 0 dc.b 0 dc.b 0 dc.w 0 dc.w 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 end