fixes in the get_key() functions; svgalib_drv.c instrumented with debugging code
This commit is contained in:
+8
-13
@@ -1472,25 +1472,20 @@ MODULE_EXPORT char *
|
|||||||
CwLnx_get_key(Driver * drvthis)
|
CwLnx_get_key(Driver * drvthis)
|
||||||
{
|
{
|
||||||
PrivateData * p = drvthis->private_data;
|
PrivateData * p = drvthis->private_data;
|
||||||
|
char key = '\0';
|
||||||
|
|
||||||
char akey = 0;
|
read (p->fd, &key, 1);
|
||||||
char * keystr = NULL;
|
|
||||||
|
|
||||||
read (p->fd, &akey, 1);
|
if (key != '\0') {
|
||||||
|
if ((key >= 'A') && (key <= 'F')) {
|
||||||
if (akey != 0)
|
return p->KeyMap[key-'A'];
|
||||||
{
|
|
||||||
if ((akey>='A')&&(akey<='F'))
|
|
||||||
{
|
|
||||||
keystr = p->KeyMap[akey-'A'];
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
report( RPT_INFO, "CwLnx: Untreated key 0x%2x", key);
|
||||||
report( RPT_INFO, "CwLnx: Untreated key 0x%2x", akey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return keystr;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
|
|||||||
+14
-11
@@ -1230,12 +1230,10 @@ MtxOrb_icon (Driver *drvthis, int x, int y, int icon)
|
|||||||
* Otherwise crash of the LCD and/or I2C bus.
|
* Otherwise crash of the LCD and/or I2C bus.
|
||||||
*
|
*
|
||||||
******************************
|
******************************
|
||||||
* returns one character from the keypad...
|
* returns a string for the function characters from the keypad...
|
||||||
* (A-Z) on success, 0 on failure...
|
* (A-Z) on success, 0 on failure...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO implement for new API call (get_key) that returns a string */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return one char from the KeyRing
|
* Return one char from the KeyRing
|
||||||
*/
|
*/
|
||||||
@@ -1263,19 +1261,24 @@ MtxOrb_get_key (Driver *drvthis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!p->keypad_test_mode) {
|
if (!p->keypad_test_mode) {
|
||||||
if (in==p->left_key) { return "Left";
|
if (in == p->left_key)
|
||||||
} else if (in==p->right_key) { return "Right";
|
return "Left";
|
||||||
} else if (in==p->up_key) { return "Up";
|
else if (in == p->right_key)
|
||||||
} else if (in==p->down_key) { return "Down";
|
return "Right";
|
||||||
} else if (in==p->enter_key) { return "Enter";
|
else if (in == p->up_key)
|
||||||
} else if (in==p->escape_key) { return "Escape";
|
return "Up";
|
||||||
} else {
|
else if (in == p->down_key)
|
||||||
|
return "Down";
|
||||||
|
else if (in == p->enter_key)
|
||||||
|
return "Enter";
|
||||||
|
else if (in == p->escape_key)
|
||||||
|
return "Escape";
|
||||||
|
else {
|
||||||
report( RPT_INFO, "MtxOrb Untreated key 0x%2x", in);
|
report( RPT_INFO, "MtxOrb Untreated key 0x%2x", in);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf (stdout, "MtxOrb: Received character %c\n", in);
|
fprintf (stdout, "MtxOrb: Received character %c\n", in);
|
||||||
in = 0;
|
|
||||||
fprintf (stdout, "MtxOrb: Press another key of your device.\n");
|
fprintf (stdout, "MtxOrb: Press another key of your device.\n");
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -589,42 +589,34 @@ curses_drv_flush (Driver *drvthis)
|
|||||||
MODULE_EXPORT char *
|
MODULE_EXPORT char *
|
||||||
curses_drv_get_key (Driver *drvthis)
|
curses_drv_get_key (Driver *drvthis)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
static char ret_val[2] = {0,0};
|
static char ret_val[2] = {0,0};
|
||||||
|
int key = getch ();
|
||||||
|
|
||||||
i = getch ();
|
switch(key) {
|
||||||
|
|
||||||
switch(i) {
|
|
||||||
case 0x0C:
|
case 0x0C:
|
||||||
|
/* internal: ^L restores screen */
|
||||||
curses_drv_restore_screen(drvthis);
|
curses_drv_restore_screen(drvthis);
|
||||||
return 0;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
return "Left";
|
return "Left";
|
||||||
break;
|
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
return "Up";
|
return "Up";
|
||||||
break;
|
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
return "Down";
|
return "Down";
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
return "Right";
|
return "Right";
|
||||||
break;
|
|
||||||
case ERR:
|
case ERR:
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case 0x0D:
|
case 0x0D:
|
||||||
return "Enter"; /* Is this correct ? */
|
return "Enter"; /* Is this correct ? */
|
||||||
break;
|
|
||||||
case 0x1B:
|
case 0x1B:
|
||||||
return "Escape";
|
return "Escape";
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
report( RPT_INFO, "curses_drv: Unknown key 0x%4x", i );
|
report( RPT_INFO, "curses_drv: Unknown key 0x%4x", key );
|
||||||
ret_val[0] = (char) i & 0xFF;
|
ret_val[0] = (char) key & 0xFF;
|
||||||
return ret_val;
|
return (ret_val[0] != '\0') ? ret_val : NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,8 +29,11 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
|
#include "report.h"
|
||||||
#include "svgalib_drv.h"
|
#include "svgalib_drv.h"
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
|
||||||
/* Small font */
|
/* Small font */
|
||||||
|
|
||||||
const unsigned char simple_font5x7[] = {
|
const unsigned char simple_font5x7[] = {
|
||||||
@@ -205,23 +208,20 @@ void
|
|||||||
ExpandGroovyFont (int w, int ht, unsigned char col, const unsigned char *fnt, unsigned char *ptr)
|
ExpandGroovyFont (int w, int ht, unsigned char col, const unsigned char *fnt, unsigned char *ptr)
|
||||||
/* Expand groovy 5x7 font into an area of memory */
|
/* Expand groovy 5x7 font into an area of memory */
|
||||||
{
|
{
|
||||||
int x, n, y;
|
int n;
|
||||||
unsigned char mask;
|
unsigned char *p = ptr;
|
||||||
unsigned char base;
|
|
||||||
unsigned char *p;
|
|
||||||
p = ptr;
|
|
||||||
for (n = 0; n < 127; n++) {
|
for (n = 0; n < 127; n++) {
|
||||||
|
int y;
|
||||||
|
|
||||||
for (y = 0; y < ht; y++) {
|
for (y = 0; y < ht; y++) {
|
||||||
mask = 1;
|
unsigned char mask = 1;
|
||||||
base = fnt[n * ht + y];
|
unsigned char base = fnt[n * ht + y];
|
||||||
|
int x;
|
||||||
|
|
||||||
for (x = 0; x < w; x++) {
|
for (x = 0; x < w; x++) {
|
||||||
if (base & mask) {
|
*p++ = (base & mask) ? 0 : col;
|
||||||
*p = 0;
|
mask <<= 1;
|
||||||
} else {
|
|
||||||
*p = col;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
mask *= 2;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -256,11 +256,13 @@ svgalib_drv_init (Driver *drvthis)
|
|||||||
{
|
{
|
||||||
int VGAMODE;
|
int VGAMODE;
|
||||||
|
|
||||||
|
report (RPT_DEBUG, "%s(%p)", __FUNCTION__, drvthis);
|
||||||
|
|
||||||
vga_init ();
|
vga_init ();
|
||||||
VGAMODE = G320x200x256; /* Default mode. */
|
VGAMODE = G320x200x256; /* Default mode. */
|
||||||
|
|
||||||
if (!vga_hasmode (VGAMODE)) {
|
if (!vga_hasmode (VGAMODE)) {
|
||||||
printf ("320x200x256 Mode not available.\n");
|
report(RPT_ERR, "320x200@256 Mode not available.");
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
vga_setmode (VGAMODE);
|
vga_setmode (VGAMODE);
|
||||||
@@ -269,7 +271,7 @@ svgalib_drv_init (Driver *drvthis)
|
|||||||
|
|
||||||
/* get the font */
|
/* get the font */
|
||||||
SVGALIB_font = malloc (256 * 8 * 8 * 1);
|
SVGALIB_font = malloc (256 * 8 * 8 * 1);
|
||||||
ExpandGroovyFont (5, 7, gl_rgbcolor (0, 255, 0), simple_font5x7, SVGALIB_font);
|
ExpandGroovyFont (5, 7, gl_rgbcolor (255, 255, 255), simple_font5x7, SVGALIB_font);
|
||||||
gl_setfont (5, 7, SVGALIB_font);
|
gl_setfont (5, 7, SVGALIB_font);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -288,6 +290,7 @@ svgalib_drv_init (Driver *drvthis)
|
|||||||
width = LCD_DEFAULT_WIDTH;
|
width = LCD_DEFAULT_WIDTH;
|
||||||
height = LCD_DEFAULT_HEIGHT;
|
height = LCD_DEFAULT_HEIGHT;
|
||||||
}
|
}
|
||||||
|
report(RPT_INFO, "%s: Using size %dx%d", __FUNCTION__, width, height);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -298,6 +301,8 @@ svgalib_drv_init (Driver *drvthis)
|
|||||||
MODULE_EXPORT void
|
MODULE_EXPORT void
|
||||||
svgalib_drv_close (Driver *drvthis)
|
svgalib_drv_close (Driver *drvthis)
|
||||||
{
|
{
|
||||||
|
report (RPT_DEBUG, "%s(%p)", __FUNCTION__, drvthis);
|
||||||
|
|
||||||
vga_setmode (TEXT);
|
vga_setmode (TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,6 +330,8 @@ svgalib_drv_height (Driver *drvthis)
|
|||||||
MODULE_EXPORT void
|
MODULE_EXPORT void
|
||||||
svgalib_drv_clear (Driver * drvthis)
|
svgalib_drv_clear (Driver * drvthis)
|
||||||
{
|
{
|
||||||
|
report (RPT_DEBUG, "%s(%p)", __FUNCTION__, drvthis);
|
||||||
|
|
||||||
vga_waitretrace ();
|
vga_waitretrace ();
|
||||||
gl_clearscreen (gl_rgbcolor (0, 0, 0));
|
gl_clearscreen (gl_rgbcolor (0, 0, 0));
|
||||||
}
|
}
|
||||||
@@ -346,11 +353,13 @@ MODULE_EXPORT void
|
|||||||
svgalib_drv_string (Driver *drvthis, int x, int y, char string[])
|
svgalib_drv_string (Driver *drvthis, int x, int y, char string[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned char *c;
|
|
||||||
for (i = 0; string[i]; i++) {
|
report (RPT_DEBUG, "%s(%p, %d, %d, \"%s\")", __FUNCTION__, drvthis, x, y, string);
|
||||||
c = &string[i];
|
|
||||||
|
for (i = 0; string[i] != '\0'; i++) {
|
||||||
|
unsigned char *c = &string[i];
|
||||||
switch (*c) {
|
switch (*c) {
|
||||||
case 0:
|
case '\0':
|
||||||
*c = icon_char;
|
*c = icon_char;
|
||||||
break;
|
break;
|
||||||
case 255:
|
case 255:
|
||||||
@@ -370,11 +379,14 @@ MODULE_EXPORT void
|
|||||||
svgalib_drv_chr (Driver *drvthis, int x, int y, char c)
|
svgalib_drv_chr (Driver *drvthis, int x, int y, char c)
|
||||||
{
|
{
|
||||||
char buffer[2];
|
char buffer[2];
|
||||||
switch (c) {
|
|
||||||
case 0:
|
report (RPT_DEBUG, "%s(%p, %d, %d, \'%c\')", __FUNCTION__, drvthis, x, y, c);
|
||||||
|
|
||||||
|
switch ((unsigned char) c) {
|
||||||
|
case '\0':
|
||||||
c = icon_char;
|
c = icon_char;
|
||||||
break;
|
break;
|
||||||
case -1:
|
case 255:
|
||||||
c = '#';
|
c = '#';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -393,6 +405,8 @@ svgalib_drv_num (Driver *drvthis, int x, int num)
|
|||||||
char c;
|
char c;
|
||||||
int y, dx;
|
int y, dx;
|
||||||
|
|
||||||
|
report (RPT_DEBUG, "%s(%p, %d, %d)", __FUNCTION__, drvthis, x, num);
|
||||||
|
|
||||||
c = '0' + num;
|
c = '0' + num;
|
||||||
|
|
||||||
for (y = 1; y < 5; y++)
|
for (y = 1; y < 5; y++)
|
||||||
@@ -408,6 +422,8 @@ svgalib_drv_vbar (Driver *drvthis, int x, int y, int len, int promille, int patt
|
|||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
|
report (RPT_DEBUG, "%s(%p, %d, %d, %d, %d, %02x)", __FUNCTION__, drvthis, x, y, len, promille, pattern);
|
||||||
|
|
||||||
for (pos = 0; pos < len; pos++) {
|
for (pos = 0; pos < len; pos++) {
|
||||||
if (2 * pos < ((long) promille * len / 500 + 1)) {
|
if (2 * pos < ((long) promille * len / 500 + 1)) {
|
||||||
svgalib_drv_chr (drvthis, x, y-pos, '|');
|
svgalib_drv_chr (drvthis, x, y-pos, '|');
|
||||||
@@ -425,6 +441,8 @@ svgalib_drv_hbar (Driver *drvthis, int x, int y, int len, int promille, int patt
|
|||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
|
report (RPT_DEBUG, "%s(%p, %d, %d, %d, %d, %02x)", __FUNCTION__, drvthis, x, y, len, promille, pattern);
|
||||||
|
|
||||||
for (pos = 0; pos < len; pos++) {
|
for (pos = 0; pos < len; pos++) {
|
||||||
if (2 * pos < ((long) promille * len / 500 + 1)) {
|
if (2 * pos < ((long) promille * len / 500 + 1)) {
|
||||||
svgalib_drv_chr (drvthis, x+pos, y, '-');
|
svgalib_drv_chr (drvthis, x+pos, y, '-');
|
||||||
@@ -440,37 +458,36 @@ svgalib_drv_hbar (Driver *drvthis, int x, int y, int len, int promille, int patt
|
|||||||
MODULE_EXPORT char *
|
MODULE_EXPORT char *
|
||||||
svgalib_drv_get_key (Driver *drvthis)
|
svgalib_drv_get_key (Driver *drvthis)
|
||||||
{
|
{
|
||||||
int i;
|
static char buf[2] = " ";
|
||||||
char *s;
|
int key = vga_getkey ();
|
||||||
static char buf[2];
|
|
||||||
|
|
||||||
s = "";
|
report (RPT_DEBUG, "%s(%p)", __FUNCTION__, drvthis);
|
||||||
|
|
||||||
i = vga_getkey ();
|
if (key <= 0) /* no key */
|
||||||
if (i) {
|
return NULL;
|
||||||
switch (i) {
|
|
||||||
/* map the cursor keys to something sensible. */
|
switch (key) {
|
||||||
case 27:
|
case 0x1B: /* ESC may introduce special key sequence */
|
||||||
i = vga_getkey ();
|
key = vga_getkey ();
|
||||||
if (i == 91) {
|
|
||||||
i = vga_getkey ();
|
if (key == 0) /* alone it is "Escape" */
|
||||||
switch (i) {
|
return "Escape";
|
||||||
|
|
||||||
|
if (key == 0x5B) { /* 0x1B 0x5B 0x??: cursor keys */
|
||||||
|
key = vga_getkey ();
|
||||||
|
switch (key) {
|
||||||
case VGAKEY_LEFT:
|
case VGAKEY_LEFT:
|
||||||
s = "ArrowLeft";
|
return "Left";
|
||||||
break;
|
|
||||||
case VGAKEY_UP:
|
case VGAKEY_UP:
|
||||||
s = "ArrowUp";
|
return "Up";
|
||||||
break;
|
|
||||||
case VGAKEY_DOWN:
|
case VGAKEY_DOWN:
|
||||||
s = "ArrowDown";
|
return "Down";
|
||||||
break;
|
|
||||||
case VGAKEY_RIGHT:
|
case VGAKEY_RIGHT:
|
||||||
s = "ArrowRight";
|
return "Right";
|
||||||
break;
|
|
||||||
/* otherwise key not recognised */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
/* otherwise key not recognised; ignore it */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Change this bit to your liking. I only set these values because
|
Change this bit to your liking. I only set these values because
|
||||||
@@ -480,14 +497,15 @@ svgalib_drv_get_key (Driver *drvthis)
|
|||||||
be able to quit LCDproc from the emulation.
|
be able to quit LCDproc from the emulation.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
case 13:
|
case '\t': /* TAB, LF and CR serve as "Enter" */
|
||||||
s = "Enter";
|
case 0x0A:
|
||||||
break;
|
case 0x0D:
|
||||||
|
return "Enter";
|
||||||
default:
|
default:
|
||||||
buf[0] = i;
|
buf[0] = (char) key & 0xFF; /* make sure it fits into a char */
|
||||||
buf[1] = 0;
|
buf[1] = '\0';
|
||||||
s = buf;
|
return (buf[0] != '\0') ? buf : NULL;
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user