00001 /**********************************************************/ 00002 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00003 /* 00004 Copyright: 1995 - Grupo de Voz (DAET) ETSII/IT-Bilbao 00005 00006 Nombre fuente................ XKBD.H 00007 Nombre paquete............... - 00008 Lenguaje fuente.............. C (Borland C/C++ 3.1) 00009 Estado....................... Completado 00010 Dependencia Hard/OS.......... conio.h 00011 Codigo condicional........... - 00012 00013 Codificacion................. Borja Etxebarria 00014 00015 Version dd/mm/aa Autor Proposito de la edicion 00016 ------- -------- -------- ----------------------- 00017 1.0.0 28/06/98 Borja repasillo gordo 00018 0.0.1 14/06/98 Borja repasillo general 00019 0.0.0 23/11/95 Borja Codificacion inicial. 00020 00021 ======================== Contenido ======================== 00022 Gestion de teclado. 00023 =========================================================== 00024 */ 00025 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00026 /**********************************************************/ 00027 00028 #include <conio.h> 00029 #include <dos.h> 00030 #include <ctype.h> 00031 00032 #include "xkbd.h" 00033 00034 /*<DOC>*/ 00035 /**********************************************************/ 00036 /* {devuelve} un caracter del buffer de teclado. Si no se ha 00037 pulsado ninguno, se bloquea hasta recibir uno. 00038 00039 Las teclas de funcion {devuelven} un codigo "negativo" (realmente 00040 bit msb a 1, como unsigned es >32767) (en vez de devolver 0 y luego 00041 otro codigo, como hace getch()). En xkbd.h se definen nombres 00042 sencillos para todas las teclas de funcion posibles (constantes K_??). */ 00043 00044 UINT16 xkbd_getch( VOID ) 00045 /*</DOC>*/ 00046 { 00047 int key = getch(); 00048 if (key) return (UINT16)key; 00049 return XKBD_FUNC | ((UINT16)getch()); 00050 } 00051 00052 /*<DOC>*/ 00053 /**********************************************************/ 00054 /* {devuelve}!=0 si se ha pulsado alguna tecla. */ 00055 00056 BOOL xkbd_kbhit( VOID ) 00057 /*</DOC>*/ 00058 { 00059 return kbhit(); 00060 } 00061 00062 /*<DOC>*/ 00063 /**********************************************************/ 00064 /* {devuelve} una mascara combinacion de teclas Shift, Ctrl, 00065 Alt, pulsadas */ 00066 00067 UINT16 xkbd_getstat( VOID ) 00068 /*</DOC>*/ 00069 { 00070 UINT16 m = peek(0x40,0x17); 00071 if (m&0x1) m |= 0x2; 00072 return (m&0xE)<<11; 00073 } 00074 00075 /*<DOC>*/ 00076 /**********************************************************/ 00077 /* {devuelve} combinacion de tecla pulsada y bits de estado 00078 shift-ctrl-alt. Es un OR entre xkbd_getstat() y xkbd_getch(). 00079 00080 Las macros 00081 xkbd_testshift(n) 00082 xkbd_testctrl(n) 00083 xkbd_testalt(n) 00084 00085 permiten comprobar si es una tecla de funcion, o si shift 00086 ctrl o alt se han pulsado. */ 00087 00088 UINT16 xkbd_getchstat( VOID ) 00089 /*</DOC>*/ 00090 { 00091 return xkbd_getch()|xkbd_getstat(); 00092 } 00093 00094 /**********************************************************/ 00095 /* Convierte a mayusculas. Tiene en cuenta que puede ser 00096 un codigo de funcion, en cuyo caso no hace nada. */ 00097 00098 UINT16 xkbd_toupper( UINT16 code ) 00099 { 00100 if (xkbd_isfunc(code)) return code; 00101 return (code & 0xFF00) | toupper((UINT8)code); 00102 } 00103 00104 /**********************************************************/ 00105 /* Convierte a minusculas. Tiene en cuenta que puede ser 00106 un codigo de funcion, en cuyo caso no hace nada. */ 00107 00108 UINT16 xkbd_tolower( UINT16 code ) 00109 { 00110 if (xkbd_isfunc(code)) return code; 00111 return (code & 0xFF00) | tolower((UINT8)code); 00112 } 00113 00114 /**********************************************************/ 00115