home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / h / hp11 / Amiga_Code / c / relkey < prev    next >
Encoding:
Text File  |  1992-05-07  |  1.5 KB  |  43 lines

  1. BOOL RelKey()
  2. {
  3.    register WORD x, y;
  4.    register BOOL Released;
  5.    register struct IntuiMessage *msg;
  6.    struct timeval event, now, delay;
  7.    register int key = lastkey; /* key last pressed */
  8.  
  9.    lastkey = -1; /* Only release it once ! */
  10.  
  11.    if (key != -1)
  12.       switch (keytype) {
  13.  
  14.          case keyboard: /* Key reversed for a max of .08 secs
  15.             (There is no easy way to wait for its release on the keyboard) */
  16.             event.tv_secs = secs; event.tv_micro = micros;
  17.             GetSysTime(&now);
  18.             SubTime(&now, &event); /* Time elapsed since key pressed */
  19.             delay.tv_secs = 0; delay.tv_micro = 80000;
  20.             if (CmpTime(&now, &delay) == 1) { /* now < delay */
  21.                SubTime(&delay, &now);
  22.                WaitFor(&delay); /* Wait long enough */
  23.             }
  24.             ReverseKey(key); /* un-reverse key */
  25.             return(TRUE);
  26.  
  27.          case mouse:
  28.             Released = FALSE;
  29.             do { /* Wait for mouse button to be released */
  30.                WaitPort(hp11->UserPort);
  31.                msg = (struct IntuiMessage *)GetMsg(hp11->UserPort);
  32.                x = msg->MouseX;
  33.                y = msg->MouseY;
  34.                Released = (msg->Class == MOUSEBUTTONS && msg->Code == SELECTUP);
  35.                ReplyMsg((struct Message *)msg);
  36.             } while (!Released);
  37.             ReverseKey(key); /* un-reverse key */
  38.  
  39.             return((BOOL)(DecodeKey(x, y) == key)); /* Button released over key? */
  40.       }
  41.    return(TRUE); /* if already released */
  42. }
  43.