fixes in the get_key() functions; svgalib_drv.c instrumented with debugging code

This commit is contained in:
marschap
2005-07-03 12:20:24 +00:00
parent f0386c7eef
commit ca7b9f3f45
4 changed files with 112 additions and 104 deletions
+9 -14
View File
@@ -1471,26 +1471,21 @@ CwLnx_string(Driver * drvthis, int x, int y, char *string)
MODULE_EXPORT char * 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;
} }
/***************************************************** /*****************************************************
+16 -13
View File
@@ -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)
report( RPT_INFO, "MtxOrb Untreated key 0x%2x", in); 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);
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;
+7 -15
View File
@@ -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;
} }
} }
+80 -62
View File
@@ -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,8 +422,10 @@ svgalib_drv_vbar (Driver *drvthis, int x, int y, int len, int promille, int patt
{ {
int pos; int pos;
for ( pos=0; pos<len; pos++ ) { report (RPT_DEBUG, "%s(%p, %d, %d, %d, %d, %02x)", __FUNCTION__, drvthis, x, y, len, promille, pattern);
if( 2 * pos < ((long) promille * len / 500 + 1) ) {
for (pos = 0; pos < len; pos++) {
if (2 * pos < ((long) promille * len / 500 + 1)) {
svgalib_drv_chr (drvthis, x, y-pos, '|'); svgalib_drv_chr (drvthis, x, y-pos, '|');
} else { } else {
; /* print nothing */ ; /* print nothing */
@@ -425,8 +441,10 @@ svgalib_drv_hbar (Driver *drvthis, int x, int y, int len, int promille, int patt
{ {
int pos; int pos;
for ( pos=0; pos<len; pos++ ) { report (RPT_DEBUG, "%s(%p, %d, %d, %d, %d, %02x)", __FUNCTION__, drvthis, x, y, len, promille, pattern);
if( 2 * pos < ((long) promille * len / 500 + 1) ) {
for (pos = 0; pos < len; pos++) {
if (2 * pos < ((long) promille * len / 500 + 1)) {
svgalib_drv_chr (drvthis, x+pos, y, '-'); svgalib_drv_chr (drvthis, x+pos, y, '-');
} else { } else {
; /* print nothing */ ; /* print nothing */
@@ -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";
case VGAKEY_LEFT:
s = "ArrowLeft"; if (key == 0x5B) { /* 0x1B 0x5B 0x??: cursor keys */
break; key = vga_getkey ();
case VGAKEY_UP: switch (key) {
s = "ArrowUp"; case VGAKEY_LEFT:
break; return "Left";
case VGAKEY_DOWN: case VGAKEY_UP:
s = "ArrowDown"; return "Up";
break; case VGAKEY_DOWN:
case VGAKEY_RIGHT: return "Down";
s = "ArrowRight"; case VGAKEY_RIGHT:
break; return "Right";
/* 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 s; return NULL;
} }