/* Keyboard-Readmatrix (ab OS 2.0)
   für Aztec-C 3.6
 */

#include <devices/keyboard.h>
#include <functions.h>

#define MOD8(a) (a-a/8*8)
#define KEYSTATUS(code) ((array[(code)/8])&(1<<MOD8(code))) ? TRUE : FALSE )
#define CAPSCODE 0x62
#define LEN 16

UBYTE array[LEN];

struct IOStdReq *IOStdReq;
struct MsgPort *MsgPort;

void main()
{
  if( MsgPort = CreatePort(0,0) )
  {
    if( IOStdReq = CreateStdIO(MsgPort) )
    {
      if( !OpenDevice("keyboard.device",0,IOStdReq,0) )
      {
        IOStdReq->io_Command = KBD_READMATRIX;
        IOStdReq->io_Data    = (APTR)&array;
        IOStdReq->io_Length  = LEN;

        DoIO( IOStdReq );

        if( KEYSTATUS(CAPSCODE) == TRUE )
          puts("Caps-Lock ist an.");
        else
          puts("Caps-Lock ist nicht an.");

        CloseDevice(IOStdReq);
      }
      DeleteStdIO(IOStdReq);
    }
    DeletePort( MsgPort );
  }
}
