| version 1.4, 2004/03/25 18:25:24 | version 1.7, 2004/04/05 09:45:06 | 
| Line 9 | Line 9 | 
 | #define SOFTKEY_MENU    0xfe | #define SOFTKEY_MENU    0xfe | 
 | #define SOFTKEY_NC              0xff | #define SOFTKEY_NC              0xff | 
 |  |  | 
 |  | enum { | 
 |  | KBDDRAW_BMP             = 0x01, | 
 |  | KBDDRAW_LED             = 0x02 | 
 |  | }; | 
 |  |  | 
 |  | typedef struct { | 
 |  | UINT8   key; | 
 |  | UINT8   key2; | 
 |  | UINT8   led; | 
 |  | UINT8   draw; | 
 |  | void    *ptr; | 
 |  | CMNBMP  bmp; | 
 |  | CMNPAL  pal[16]; | 
 |  | } SOFTKBD; | 
 |  |  | 
 |  | static  SOFTKBD softkbd; | 
 |  |  | 
 | #if (SUPPORT_SOFTKBD == 1) | #if (SUPPORT_SOFTKBD == 1) | 
 | #include        "softkbd1.res" | #include        "softkbd1.res" | 
 | #elif (SUPPORT_SOFTKBD == 2) | #elif (SUPPORT_SOFTKBD == 2) | 
| Line 17 | Line 34 | 
 | #include        "softkbd.res" | #include        "softkbd.res" | 
 | #endif | #endif | 
 |  |  | 
 | typedef struct { |  | 
 | BYTE    *bmp; |  | 
 | UINT    width; |  | 
 | UINT    height; |  | 
 | UINT8   key; |  | 
 | } SOFTKBD; |  | 
 |  |  | 
 | static  SOFTKBD softkbd; |  | 
 |  |  | 
 |  |  | 
| void softkbd_initialize(void) { | static void loadbmp(const char *filename) { | 
 |  |  | 
| BMPFILE *bf; | void    *ptr; | 
| BMPDATA inf; |  | 
 |  |  | 
| softkbd.bmp = NULL; | softkbd.ptr = NULL; | 
| softkbd.width = 0; | ptr = (void *)bmpdata_solvedata(np2kbd_bmp); | 
| softkbd.height = 0; | if (ptr != NULL) { | 
| softkbd.key = SOFTKEY_NC; | if (cmndraw_bmp4inf(&softkbd.bmp, ptr) == SUCCESS) { | 
| bf = (BMPFILE *)bmpdata_solvedata(np2kbd_bmp); | softkbd.ptr = ptr; | 
| if (bf != NULL) { |  | 
| if ((bf->bfType[0] == 'B') && (bf->bfType[1] == 'M') && |  | 
| (bmpdata_getinfo((BMPINFO *)(bf + 1), &inf) == SUCCESS) && |  | 
| (inf.bpp == 4)) { |  | 
| softkbd.bmp = (BYTE *)bf; |  | 
| softkbd.width = inf.width; |  | 
| softkbd.height = inf.height; |  | 
 | } | } | 
 | else { | else { | 
| _MFREE(bf); | _MFREE(ptr); | 
 | } | } | 
 | } | } | 
 |  | softkbd.draw |= KBDDRAW_BMP; | 
 |  | } | 
 |  |  | 
 |  | void softkbd_initialize(void) { | 
 |  |  | 
 |  | softkbd.key = SOFTKEY_NC; | 
 |  | softkbd.led = 0; | 
 |  | loadbmp(NULL); | 
 | } | } | 
 |  |  | 
 | void softkbd_deinitialize(void) { | void softkbd_deinitialize(void) { | 
 |  |  | 
| BYTE    *bmp; | void    *ptr; | 
 |  |  | 
| bmp = softkbd.bmp; | ptr = softkbd.ptr; | 
| softkbd.bmp = NULL; | softkbd.ptr = NULL; | 
| if (bmp) { | if (ptr) { | 
| _MFREE(bmp); | _MFREE(ptr); | 
 | } | } | 
 | } | } | 
 |  |  | 
 | BOOL softkbd_getsize(int *width, int *height) { | BOOL softkbd_getsize(int *width, int *height) { | 
 |  |  | 
| if (softkbd.bmp == NULL) { | if (softkbd.ptr == NULL) { | 
 | return(FAILURE); | return(FAILURE); | 
 | } | } | 
 | if (width) { | if (width) { | 
| *width = softkbd.width; | *width = softkbd.bmp.width; | 
 | } | } | 
 | if (height) { | if (height) { | 
| *height = softkbd.height; | *height = softkbd.bmp.height; | 
 | } | } | 
 | return(SUCCESS); | return(SUCCESS); | 
 | } | } | 
 |  |  | 
| void softkbd_paint(CMNVRAM *vram, CMNPALCNV cnv) { | BOOL softkbd_paint(CMNVRAM *vram, CMNPALCNV cnv, BOOL redraw) { | 
 |  |  | 
| cmddraw_bmp16(vram, softkbd.bmp, cnv, CMNBMP_LEFT | CMNBMP_TOP); | UINT8   draw; | 
|  | BOOL    ret; | 
|  |  | 
|  | draw = softkbd.draw; | 
|  | softkbd.draw = 0; | 
|  | if (redraw) { | 
|  | draw = KBDDRAW_BMP | KBDDRAW_LED; | 
|  | } | 
|  | ret = FALSE; | 
|  | if ((draw & KBDDRAW_BMP) && (vram) && (cnv)) { | 
|  | (*cnv)(softkbd.pal, softkbd.bmp.paltbl, softkbd.bmp.pals, vram->bpp); | 
|  | cmndraw_bmp16(vram, softkbd.ptr, cnv, CMNBMP_LEFT | CMNBMP_TOP); | 
|  | ret = TRUE; | 
|  | } | 
|  | if (draw & KBDDRAW_LED) { | 
|  | TRACEOUT(("softkbd_paint")); | 
|  | ledpaint(vram); | 
|  | ret = TRUE; | 
|  | } | 
|  | return(ret); | 
 | } | } | 
 |  |  | 
 | BOOL softkbd_down(int x, int y) { | BOOL softkbd_down(int x, int y) { | 
| Line 91  BOOL softkbd_down(int x, int y) { | Line 118  BOOL softkbd_down(int x, int y) { | 
 | return(TRUE); | return(TRUE); | 
 | } | } | 
 | else if (key != SOFTKEY_NC) { | else if (key != SOFTKEY_NC) { | 
| keystat_senddata((UINT8)key); | keystat_down(&key, 1, NKEYREF_SOFTKBD); | 
 | softkbd.key = key; | softkbd.key = key; | 
 | } | } | 
 | return(FALSE); | return(FALSE); | 
| Line 100  BOOL softkbd_down(int x, int y) { | Line 127  BOOL softkbd_down(int x, int y) { | 
 | void softkbd_up(void) { | void softkbd_up(void) { | 
 |  |  | 
 | if (softkbd.key != SOFTKEY_NC) { | if (softkbd.key != SOFTKEY_NC) { | 
| keystat_senddata((REG8)(softkbd.key | 0x80)); | keystat_up(&softkbd.key, 1, NKEYREF_SOFTKBD); | 
 | softkbd.key = SOFTKEY_NC; | softkbd.key = SOFTKEY_NC; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  | void softkbd_led(REG8 led) { | 
 |  |  | 
 |  | TRACEOUT(("softkbd_led(%x)", led)); | 
 |  | if (softkbd.led != led) { | 
 |  | softkbd.led = led; | 
 |  | softkbd.draw |= KBDDRAW_LED; | 
 |  | } | 
 |  | } | 
 | #endif | #endif | 
 |  |  |