home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
413a.lha
/
sMOVIE
/
source
/
sMOVIEmouse.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-09-02
|
3KB
|
130 lines
/* sMOVIEmouse.c watches mouse movements so user can control sMOVIE
Martin J. Round. 15-Oct-89
*/
#include "sMOVIE.h"
MOUSE_INFO mouseinfo;
extern int delay;
/* input handler subroutine - called through the handler stub */
struct InputEvent *myhandler(ev, mptr)
struct InputEvent *ev; /* a pointer to a list of events */
register MOUSE_INFO *mptr; /* a pointer to my data */
{
register struct InputEvent *ep;
/* look through the list of events for mouse information */
for (ep = ev; ep; ep = ep->ie_NextEvent) {
if (ep->ie_Class == IECLASS_RAWMOUSE) {
mptr->ypos += ep->ie_Y;
switch(ep->ie_Code) {
case IECODE_LBUTTON: /* pause on/off toggle */
if(mptr->button >= 0)
mptr->button = 1 - mptr->button;
break;
case IECODE_RBUTTON: /* abort program */
mptr->button = -1;
break;
}
}
}
/* any other input handlers (e.g. intuition) won't see a thing! */
/* to let them run as normal return (ev) instead of null. */
return(NULL);
} /* end of myhandler */
extern struct IOStdReq *CreateStdIO();
extern struct MsgPort *CreatePort();
extern void HandlerInterface(); /* assembly language sMOVIEstub.a */
struct MsgPort *inputDevPort;
struct IOStdReq *inputRequestBlock;
struct Interrupt handlerStuff;
int mousemonitor() {
do {
if (mouseinfo.button >0 )
WaitTOF(); /* allow input task to work */
while (mouseinfo.ypos > MOUSETHRESHOLD) {
mouseinfo.ypos -= MOUSETHRESHOLD;
if (delay < MAXDELAY) {
++delay;
SetTaskPri(FindTask(NULL),21);
}
}
while (mouseinfo.ypos < -MOUSETHRESHOLD) {
mouseinfo.ypos += MOUSETHRESHOLD;
if (delay > MINDELAY) {
--delay;
if (delay == 0)
SetTaskPri(FindTask(NULL),20);
}
}
} while (mouseinfo.button > 0); /* holding left button pauses */
return (mouseinfo.button < 0); /* right button aborts program */
} /* end of mousemonitor */
int initmousemonitor() { /* returns 0 if successful */
if ((inputDevPort = CreatePort(0,0)) == NULL)
return(-1);
if ((inputRequestBlock = CreateStdIO(inputDevPort)) == NULL) {
DeletePort(inputDevPort);
return (-1);
}
handlerStuff.is_Data = (APTR)&mouseinfo;
handlerStuff.is_Code = HandlerInterface;
handlerStuff.is_Node.ln_Pri = 52;
mouseinfo.ypos = mouseinfo.button = 0;
if (OpenDevice("input.device",0,(struct IORequest *)inputRequestBlock,0)) {
DeleteStdIO(inputRequestBlock);
DeletePort(inputDevPort);
return (-1);
}
inputRequestBlock->io_Command = IND_ADDHANDLER;
inputRequestBlock->io_Data = (APTR)&handlerStuff;
DoIO((struct IORequest *)inputRequestBlock);
return (0);
} /* end of initmousemonitor */
void removemousemonitor() {
inputRequestBlock->io_Command = IND_REMHANDLER;
inputRequestBlock->io_Data = (APTR)&handlerStuff;
DoIO((struct IORequest *)inputRequestBlock);
CloseDevice((struct IORequest *)inputRequestBlock);
DeleteStdIO(inputRequestBlock);
DeletePort(inputDevPort);
} /* end of removemousemonitor */