home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / disk / misc / dcmp / source / source.lha / rkcv.c < prev    next >
C/C++ Source or Header  |  1992-09-14  |  2KB  |  136 lines

  1. /* $Id: rkcv.c,v 1.2 92/09/01 20:20:16 tf Exp $ © Tobias Ferber */
  2.  
  3. #include <exec/types.h>
  4. #include <exec/devices.h>
  5. #include <exec/ports.h>
  6. #include <exec/io.h>
  7. #include <libraries/dos.h>
  8. #include <libraries/dosextens.h>
  9. #include <devices/console.h>
  10. #include <devices/inputevent.h>
  11.  
  12. /*
  13.  *   This stuff down here handles the raw key conversion stuff
  14.  *   properly.  Thanks to Willy Langeveld and Carolyn Scheppner.
  15.  */
  16.  
  17. int dos_rkcv(),
  18.     dos_rkcvinit(),
  19.     dos_rkcvexit();
  20.  
  21. struct IOStdReq ConStdReq;
  22. long ConsoleDevice;
  23.  
  24. /*
  25.  * FUNCTION
  26.  *
  27.  *  dos_rkcv() -- convert raw key to ascii string.
  28.  *
  29.  * SYNOPSIS
  30.  *
  31.  *   actual = dos_rkcv(code, buffer, length);
  32.  *
  33.  * DESCRIPTION
  34.  *
  35.  *  Covert raw key number to array of console device ascii text
  36.  *  using the default keymap.
  37.  *
  38.  * INPUTS
  39.  *
  40.  *  int code        Raw key number.
  41.  *  int qual        Qualifier.
  42.  *  char *buffer    Pointer to an array of char to receive the
  43.  *                  conversion.
  44.  *  int length      length of buffer.
  45.  *
  46.  * OUTPUTS
  47.  *
  48.  *  int actual      #of chars in the buffer
  49.  *
  50.  */
  51. int dos_rkcv(code, qual, buffer, length)
  52. int code;
  53. int qual;
  54. char *buffer;
  55. int length;
  56. {
  57.    int actual;
  58.  
  59.    static struct InputEvent event;
  60.  
  61.    event.ie_Class = IECLASS_RAWKEY;
  62.    event.ie_Code = code;
  63.    event.ie_Qualifier = qual;
  64.  
  65.    actual = RawKeyConvert(&event, buffer, (long) length, NULL);
  66.  
  67.    if(actual < 0) actual = 0;
  68.    buffer[actual] = '\0';
  69.  
  70.    return(actual);
  71. }
  72.  
  73.  
  74. /*
  75.  * FUNCTION
  76.  *
  77.  *  dos_rkcvinit() -- open stuff for dos_rkcv().
  78.  *
  79.  * SYNOPSIS
  80.  *
  81.  *   error = dos_rkcvinit();
  82.  *
  83.  * DESCRIPTION
  84.  *
  85.  *  Open the Console device for later use with dos_rkcv().
  86.  *
  87.  * INPUTS
  88.  *
  89.  *  None
  90.  *
  91.  * OUTPUTS
  92.  *
  93.  *  F. value: 1 on faliure, zero otherwise.
  94.  *
  95.  */
  96. int dos_rkcvinit()
  97. {
  98.    if (OpenDevice("console.device", -1L, &ConStdReq, 0L) != NULL) {
  99.       ConsoleDevice = 0L;
  100.       return(1);
  101.    }
  102.    else {
  103.       ConsoleDevice = (long) ConStdReq.io_Device;
  104.       return(0);
  105.    }
  106. }
  107.  
  108.  
  109. /*
  110.  * FUNCTION
  111.  *
  112.  *  dos_rkcvexit() -- close stuff for dos_rkcv().
  113.  *
  114.  * SYNOPSIS
  115.  *
  116.  *   error = dos_rkcvexit();
  117.  *
  118.  * DESCRIPTION
  119.  *
  120.  *  Close the Console device after use with dos_rkcv().
  121.  *
  122.  * INPUTS
  123.  *
  124.  *  None
  125.  *
  126.  * OUTPUTS
  127.  *
  128.  *  F. value:  Always zero;
  129.  *
  130.  */
  131. int dos_rkcvexit()
  132. {
  133.    if (ConsoleDevice) CloseDevice(&ConStdReq);
  134.    return(0);
  135. }
  136.