home *** CD-ROM | disk | FTP | other *** search
- BOOL RelKey()
- {
- register WORD x, y;
- register BOOL Released;
- register struct IntuiMessage *msg;
- struct timeval event, now, delay;
- register int key = lastkey; /* key last pressed */
-
- lastkey = -1; /* Only release it once ! */
-
- if (key != -1)
- switch (keytype) {
-
- case keyboard: /* Key reversed for a max of .08 secs
- (There is no easy way to wait for its release on the keyboard) */
- event.tv_secs = secs; event.tv_micro = micros;
- GetSysTime(&now);
- SubTime(&now, &event); /* Time elapsed since key pressed */
- delay.tv_secs = 0; delay.tv_micro = 80000;
- if (CmpTime(&now, &delay) == 1) { /* now < delay */
- SubTime(&delay, &now);
- WaitFor(&delay); /* Wait long enough */
- }
- ReverseKey(key); /* un-reverse key */
- return(TRUE);
-
- case mouse:
- Released = FALSE;
- do { /* Wait for mouse button to be released */
- WaitPort(hp11->UserPort);
- msg = (struct IntuiMessage *)GetMsg(hp11->UserPort);
- x = msg->MouseX;
- y = msg->MouseY;
- Released = (msg->Class == MOUSEBUTTONS && msg->Code == SELECTUP);
- ReplyMsg((struct Message *)msg);
- } while (!Released);
- ReverseKey(key); /* un-reverse key */
-
- return((BOOL)(DecodeKey(x, y) == key)); /* Button released over key? */
- }
- return(TRUE); /* if already released */
- }
-