home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 192.lha / Snip_v1.3 / kbio.c < prev    next >
C/C++ Source or Header  |  1988-04-28  |  3KB  |  211 lines

  1.  
  2. char UnShifted[] =     /* printable char for each key */
  3. {
  4.     '`',
  5.     '1',
  6.     '2',
  7.     '3',
  8.     '4',
  9.     '5',
  10.     '6',
  11.     '7',
  12.     '8',
  13.     '9',
  14.     '0',
  15.     '-',
  16.     '=',
  17.     '\\',    /* 13 */
  18.     '\0',
  19.     '0',    /* NK0 */
  20.     'q',
  21.     'w',
  22.     'e',
  23.     'r',
  24.     't',
  25.     'y',
  26.     'u',
  27.     'i',
  28.     'o',
  29.     'p',
  30.     '[',
  31.     ']',    /* 27 */
  32.     '\0',
  33.     '1',    /* NK1 */
  34.     '2',
  35.     '3',
  36.     'a',
  37.     's',
  38.     'd',
  39.     'f',
  40.     'g',
  41.     'h',
  42.     'j',
  43.     'k',
  44.     'l',
  45.     ';',
  46.     '\'',   /* 42 */
  47.     '\0',
  48.     '\0',
  49.     '4',    /* NK4 */
  50.     '5',
  51.     '6',
  52.     '\0',
  53.     'z',
  54.     'x',
  55.     'c',
  56.     'v',
  57.     'b',
  58.     'n',
  59.     'm',
  60.     ',',
  61.     '.',
  62.     '/',    /* 58 */
  63.     '\0',
  64.     '.',    /* NK. */
  65.     '7',    /* NK7 */
  66.     '8',
  67.     '9',    /* 63 */
  68.     ' '
  69. };
  70.  
  71. char Shifted[] =    /* definitions of shifted keys */
  72. {
  73.     '~',
  74.     '!',
  75.     '@',
  76.     '#',
  77.     '$',
  78.     '%',
  79.     '^',
  80.     '&',
  81.     '*',
  82.     '(',
  83.     ')',
  84.     '_',
  85.     '+',
  86.     '|',
  87.     '\0',
  88.     '0',
  89.     'Q',
  90.     'W',
  91.     'E',
  92.     'R',
  93.     'T',
  94.     'Y',
  95.     'U',
  96.     'I',
  97.     'O',
  98.     'P',
  99.     '{',
  100.     '}',
  101.     '\0',
  102.     '1',
  103.     '2',
  104.     '3',
  105.     'A',
  106.     'S',
  107.     'D',
  108.     'F',
  109.     'G',
  110.     'H',
  111.     'J',
  112.     'K',
  113.     'L',
  114.     ':',
  115.     '"',
  116.     '\0',
  117.     '\0',
  118.     '4',
  119.     '5',
  120.     '6',
  121.     '\0',
  122.     'Z',
  123.     'X',
  124.     'C',
  125.     'V',
  126.     'B',
  127.     'N',
  128.     'M',
  129.     '<',
  130.     '>',
  131.     '?',
  132.     '\0',
  133.     '.',
  134.     '7',
  135.     '8',
  136.     '9',
  137.     ' '
  138. };
  139.  
  140. #include <devices/input.h>
  141. #include "devices/inputevent.h"
  142.  
  143. struct  MsgPort         *ioPort, *CreatePort();
  144. struct  IOStdReq        *ioReq,  *CreateStdIO();
  145. struct  InputEvent      fake;
  146.  
  147. initstuff()
  148. {
  149.    register struct IOStdReq *Req;
  150.  
  151.    if ( ! (ioPort = CreatePort("Snip I/O",NULL)) )
  152.         return(0);
  153.  
  154.    if ( ! (ioReq = CreateStdIO(ioPort)) )
  155.         return(0);
  156.  
  157.    if ( OpenDevice("input.device",0,ioReq,0) )
  158.         return(0);
  159.  
  160.    Req = ioReq;
  161.  
  162.    Req->io_Command    = IND_WRITEEVENT;
  163.    Req->io_Flags      = 0;
  164.    Req->io_Length     = sizeof(struct InputEvent);
  165.    Req->io_Data       = (APTR) &fake;
  166.  
  167.    fake.ie_NextEvent            = NULL;
  168.    fake.ie_Class                = IECLASS_RAWKEY;
  169.    fake.ie_TimeStamp.tv_secs    = 0;
  170.    fake.ie_TimeStamp.tv_micro   = 0;
  171.  
  172.     return(1);
  173. }
  174.  
  175. sendline(message,returnp)
  176. register char *message;
  177. BOOL returnp;
  178. {
  179.     register short x,y,pos;
  180.     register short len = (short)strlen(message);
  181.  
  182.     for (pos = 0; pos < len; pos++)
  183.     {
  184.  
  185.         for (x = 0; x < 65; x++)
  186.         {
  187.             if (UnShifted[x] == message[pos])
  188.             {
  189.                 fake.ie_Code = x;
  190.                 fake.ie_Qualifier = 0;
  191.                 DoIO(ioReq);
  192.                 goto out;
  193.             }
  194.  
  195.             if (Shifted[x] == message[pos])
  196.             {
  197.                 fake.ie_Code = x;
  198.                 fake.ie_Qualifier = IEQUALIFIER_LSHIFT;
  199.                 DoIO(ioReq);
  200.                 goto out;
  201.             }
  202.         }
  203. out:    ;
  204.     }
  205.  
  206.     fake.ie_Code = returnp ? 68 : 64;   /* EOL is return if returnp is true, otherwise space */
  207.     fake.ie_Qualifier = 0;
  208.     DoIO(ioReq);
  209. }
  210.  
  211.