Mercurial > ecos
view packages/services/gfx/mw/current/src/drivers/kbd_pac.c @ 3292:7f8e529b4d82 default tip
Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
| author | vae |
|---|---|
| date | Wed, 29 Apr 2015 23:31:48 +0000 |
| parents | e0c0827131d1 |
| children |
line wrap: on
line source
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * Copyright (c) 2000 Victor Rogachev <rogach@sut.ru> * * Keyboard Driver, using BIOS for PACIFIC C on MSDOS */ #include "device.h" #include <dos.h> #include <conio.h> static int KBD_Open(KBDDEVICE *pkd); static void KBD_Close(void); static void KBD_GetModifierInfo(int *modifiers); static int KBD_Read(MWUCHAR *buf, int *modifiers); static int KBD_Poll(void); KBDDEVICE kbddev = { KBD_Open, KBD_Close, KBD_GetModifierInfo, KBD_Read, KBD_Poll }; /* * Open the keyboard */ static int KBD_Open(KBDDEVICE *pkd) { return 1; } /* * Close the keyboard. */ static void KBD_Close(void) { } /* * Return the possible modifiers for the keyboard. */ static void KBD_GetModifierInfo(int *modifiers) { *modifiers = 0; /* no modifiers available */ } /* * This reads one keystroke from the keyboard, and the current state of * the mode keys (ALT, SHIFT, CTRL). Returns -1 on error, 0 if no data * is ready, and 1 if data was read. This is a non-blocking call. */ static int KBD_Read(MWUCHAR *buf, int *modifiers) { union REGS reg; /* wait until a char is ready*/ if (!kbhit()) return 0; /* read keyboard shift status*/ reg.x.ax = 0x0200; int86(0x16, ®, ®); *modifiers = reg.x.ax; /* read keyboard character*/ reg.x.ax = 0x1000; int86(0x16, ®, ®); *buf = (reg.x.ax & 0x00ff); if(*buf == 0x1b) /* special case ESC*/ return -2; return 1; } /* ** Poll keyboard for char ready */ static int KBD_Poll(void) { if (kbhit()) return 1; else return 0; }
