home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / dev / rkrm.lha / RKRM / Keyboard / Keyboard_Events.c < prev    next >
C/C++ Source or Header  |  1992-09-03  |  4KB  |  110 lines

  1. /*
  2.  * Copyright (c) 1992 Commodore-Amiga, Inc.
  3.  * 
  4.  * This example is provided in electronic form by Commodore-Amiga, Inc. for 
  5.  * use with the "Amiga ROM Kernel Reference Manual: Devices", 3rd Edition, 
  6.  * published by Addison-Wesley (ISBN 0-201-56775-X).
  7.  * 
  8.  * The "Amiga ROM Kernel Reference Manual: Devices" contains additional 
  9.  * information on the correct usage of the techniques and operating system 
  10.  * functions presented in these examples.  The source and executable code 
  11.  * of these examples may only be distributed in free electronic form, via 
  12.  * bulletin board or as part of a fully non-commercial and freely 
  13.  * redistributable diskette.  Both the source and executable code (including 
  14.  * comments) must be included, without modification, in any copy.  This 
  15.  * example may not be published in printed form or distributed with any
  16.  * commercial product.  However, the programming techniques and support
  17.  * routines set forth in these examples may be used in the development
  18.  * of original executable software products for Commodore Amiga computers.
  19.  * 
  20.  * All other rights reserved.
  21.  * 
  22.  * This example is provided "as-is" and is subject to change; no
  23.  * warranties are made.  All use is at your own risk. No liability or
  24.  * responsibility is assumed.
  25.  *
  26.  ***************************************************************************
  27.  *
  28.  * Keyboard_Events.c
  29.  *
  30.  * This example does not work very well in a system where
  31.  * input.device is active since input.device also actively calls for
  32.  * keyboard events via this call. For that reason, you will not get all of
  33.  * the keyboard events. Neither will the input device; no one will be happy.
  34.  *
  35.  * Compile with SAS 5.10  lc -b1 -cfistq -v -y -L
  36.  *
  37.  * Run from CLI only
  38.  */
  39.  
  40. #include <exec/types.h>
  41. #include <exec/io.h>
  42. #include <exec/ports.h>
  43. #include <exec/memory.h>
  44. #include <devices/inputevent.h>
  45. #include <devices/keyboard.h>
  46.  
  47. #include <clib/exec_protos.h>
  48. #include <clib/alib_protos.h>
  49.  
  50. #include <stdio.h>
  51.  
  52. #ifdef LATTICE
  53. int CXBRK(void) { return(0); }     /* Disable SAS CTRL/C handling */
  54. int chkabort(void) { return(0); }  /* really */
  55. #endif
  56.  
  57.  
  58. VOID Display_Event(struct InputEvent *keyEvent)
  59. {
  60.     printf("Got key event: KeyCode: %2x  Quailifiers: %4x\n",
  61.                keyEvent->ie_Code,
  62.                keyEvent->ie_Qualifier);
  63. }
  64.  
  65. VOID main(int argc, char *argv[])
  66. {
  67. struct IOStdReq   *keyRequest;
  68. struct MsgPort    *keyPort;
  69. struct InputEvent *keyEvent;
  70.        SHORT      loop;
  71.  
  72.     if (keyPort=CreatePort(NULL,NULL))
  73.     {
  74.         if (keyRequest=(struct IOStdReq *)CreateExtIO(keyPort,
  75.                                                   sizeof(struct IOStdReq)))
  76.         {
  77.             if (!OpenDevice("keyboard.device",NULL,
  78.                              (struct IORequest *)keyRequest,NULL))
  79.             {
  80.                 if (keyEvent=AllocMem(sizeof(struct InputEvent),MEMF_PUBLIC))
  81.                 {
  82.                     for (loop=0;loop<4;loop++)
  83.                     {
  84.                         keyRequest->io_Command=KBD_READEVENT;
  85.                         keyRequest->io_Data=(APTR)keyEvent;
  86.  
  87.                         /*
  88.                          * We want 1 event, so we just set the
  89.                          * length field to the size, in bytes
  90.                          * of the event.  For multiple events,
  91.                          * set this to a multiple of that size.
  92.                          * The keyboard device NEVER fills partial
  93.                          * events...
  94.                          */
  95.                         keyRequest->io_Length=sizeof(struct InputEvent);
  96.                         DoIO((struct IORequest *)keyRequest);
  97.  
  98.                             /* Check for CLI startup... */
  99.                         if (argc) Display_Event(keyEvent);
  100.                     }
  101.                     FreeMem(keyEvent,sizeof(struct InputEvent));
  102.                 }
  103.                 CloseDevice((struct IORequest *)keyRequest);
  104.             }
  105.             DeleteExtIO((struct IORequest *)keyRequest);
  106.         }
  107.         DeletePort(keyPort);
  108.     }
  109. }
  110.