Manual de programación de OS/2/Llamadas KBDxxx para acceso al teclado


KbdCharIn

</A>

KbdCharIn devuelve una lectura del teclado, indicando que teclas aisladas están pulsadas.

#define INCL_BASE
#include <os2.h>

PKBDKEYINFO CharData;
USHORT IOWait;
HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdCharIn(CharData, IOWait, KbdHandle);

Parámetros

CharData Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:
chChar (UCHAR) Caracter ASCII de la tecla pulsada. Si se trata de un código extendido (tecla de función, p.e.) contendrá h'00 o h'E0 y el bit 1 de fbStatus estará a 1.
chScan (UCHAR) Código de scan de la tecla pulsada. Si es un código extendido, entonces contiene el ASCII extendido.
fbStatus (UCHAR) Estado del evento de pulsación. Se lee por bits:


Bit
Descripción
7-6 Indican si es el primer byte o el último de un carácter multi byte (DBCS). Si es 10, es el primer byte; si es 01 es el último, y si es 11, es el único byte. Para recuperar códigos multibyte es necesario ejecutar una llamada a KbdCharIn por cada byte.
5 Petición de conversión inmediata.
4-2 Reservado (a 0).
1 Si es 0, el ScanCode es un carácter; si es 1, el ScanCode no es un carácter, sino un codigo extendido.
0 Si es 1, significa que que se ha soltado la tecla indicada, en vez de haber sido pulsada.
bNlsShift (UCHAR) Reservado. Poner a cero.
fsState (USHORT) Describe las teclas que hay pulsadas:
Bit
Descripción
15 SysReq (PetSis) pulsada
14 CapsLock pulsado
13 NumLock pulsado
12 ScrollLock pulsado
11 Alt derecho pulsado
10 Ctrl derecho pulsado
9 Alt izquierdo pulsado
8 Ctrl izquierdo pulsado
7 Insert activo
6 CapsLock activo
5 NumLock activo
4 ScrollLock activo
3 Algún Alt pulsado
2 Algún Ctrl pulsado
1 Cambio (Mayusculas) izquierdo pulsado
0 Cambio (Mayusculas) derecho pulsado
time (ULONG) Marca de tiempo indicando cuando fue pulsada la tecla. Se cuenta en milisegundos desde que el sistema se ha puesto en marcha.
IOWait Si es 0, el thread es dormido hasta que halla un carácter disponible; si es 1, la llamada vuelve inmediatamente aunque no halla caracteres disponibles.
KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
375 Valor de espera no válido
439 Handle no válido
445 Se requiere el foco del teclado
447 El teclado está ocupado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG

<A NAME="KBDFLUSHBUFFER">


KbdFlushBuffer

</A>

KbdFlushBuffer vacía el buffer de teclado.

#define INCL_BASE
#include <os2.h>

HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdFlushBuffer(KbdHandle);

Parámetros

KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
439 Handle no válido
445 Se requiere el foco del teclado
447 El teclado está ocupado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG

<A NAME="KBDGETSTATUS">


KbdGetStatus

</A>

KbdGetStatus obtiene el estado actual del teclado.

#define INCL_BASE
#include <os2.h>

PKBDINFO StatData;
HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdGetStatus(StatData, KbdHandle);

Parámetros

StatData Puntero a una estructura de datos de teclado con los siguientes campos:
cb (USHORT) Longitud de la estructura incluyendo cb. Tiene que ser 10;
fsMask (USHORT) Estado del teclado:


Bit
Descripción
15-9 Reservado. Está a cero.
8 Informe de cambio activo.
7 Longitud del código de retorno (1 o 2 caracteres). Solo tiene sentido si el bit 6 está activo.
6 El código de retorno ha sido cambiado.
5 reservado
4 El informe de cambio ha sido modificado.
3 Modo ASCII activo.
2 Modo Binario activo.
1 Echo inactivo.
0 Echo activo.
chTurnAround (USHORT) Caracter de retorno. En ASCII y ASCII extendido, el carácter de retorno es el retorno de carro (13). En formato ASCII, el carácter de retorno se indica en el byte menos significativo.
fsInterim (USHORT) Reservado
fsState (USHORT) Describe las teclas que hay pulsadas:
Bit
Descripción
15 SysReq (PetSis) pulsada
14 CapsLock pulsado
13 NumLock pulsado
12 ScrollLock pulsado
11 Alt derecho pulsado
10 Ctrl derecho pulsado
9 Alt izquierdo pulsado
8 Ctrl izquierdo pulsado
7 Insert activo
6 CapsLock activo
5 NumLock activo
4 ScrollLock activo
3 Algún Alt pulsado
2 Algún Ctrl pulsado
1 Cambio (Mayusculas) izquierdo pulsado
0 Cambio (Mayusculas) derecho pulsado
KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
376 Longitud no válida
439 Handle no válido
445 Se requiere el foco del teclado
447 El teclado está ocupado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG

<A NAME="KBDPEEK">


KbdPeek

</A>

KbdPeek devuelve cualquier dato disponible en el buffer de teclado de la misma forma que KdbCharIn, pero sin borrarlo de éste.

#define INCL_BASE
#include <os2.h>

PKBDKEYINFO CharData;
HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdPeek(CharData, KbdHandle);

Parámetros

CharData Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:
chChar (UCHAR) Caracter ASCII de la tecla pulsada. Si se trata de un código extendido (tecla de función, p.e.) contendrá h'00 o h'E0 y el bit 1 de fbStatus estará a 1.
chScan (UCHAR) Código de scan de la tecla pulsada. Si es un código extendido, entonces contiene el ASCII extendido.
fbStatus (UCHAR) Estado del evento de pulsación. Se lee por bits:


Bit
Descripción
7-6 Indican si es el primer byte o el último de un carácter multi byte (DBCS). Si es 10, es el primer byte; si es 01 es el último, y si es 11, es el único byte. Para recuperar códigos multibyte es necesario ejecutar una llamada a KbdPeek por cada byte.
5 Petición de conversión inmediata.
4-2 Reservado (a 0).
1 Si es 0, el ScanCode es un carácter; si es 1, el ScanCode no es un carácter, sino un codigo extendido.
0 Si es 1, significa que que se ha soltado la tecla indicada, en vez de haber sido pulsada.
bNlsShift (UCHAR) Reservado. Poner a cero.
fsState (USHORT) Describe las teclas que hay pulsadas:
Bit
Descripción
15 SysReq (PetSis) pulsada
14 CapsLock pulsado
13 NumLock pulsado
12 ScrollLock pulsado
11 Alt derecho pulsado
10 Ctrl derecho pulsado
9 Alt izquierdo pulsado
8 Ctrl izquierdo pulsado
7 Insert activo
6 CapsLock activo
5 NumLock activo
4 ScrollLock activo
3 Algún Alt pulsado
2 Algún Ctrl pulsado
1 Cambio (Mayusculas) izquierdo pulsado
0 Cambio (Mayusculas) derecho pulsado
time (ULONG) Marca de tiempo indicando cuando fue pulsada la tecla. Se cuenta en milisegundos desde que el sistema se ha puesto en marcha.
KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
439 Handle no válido
445 Se requiere el foco del teclado
447 El teclado está ocupado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG

<A NAME="KBDSETSTATUS">


KbdSetStatus

</A>

KbdSetStatus establece las carácterísticas del teclado.

#define INCL_BASE
#include <os2.h>

PKBDINFO StatData;
HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdSetStatus(StatData, KbdHandle);

Parámetros

StatData Puntero a una estructura de datos de teclado con los siguientes campos:
cb (USHORT) Longitud de la estructura incluyendo cb. Tiene que ser 10;
fsMask (USHORT) El nuevo estado al que se pasa. Si los bits 0 y 1 están a 0, el estado del Echo no se cambia; si alguno se activa, se pasa a ese estado Echo. Si los bits 2 y 3 están a 0, el modo binario y el ASCII no se cambian; si alguno se activa, se pasa a ese estado. Si los bits 0 y 1 están activos, o si los bits 2 y 3 están a 1, se devuelve un error. Si el modo binario está activo, el Echo se ignora.


Bit
Descripción
15-9 Reservado. Está a cero.
8 Informe de cambio activo. Tiene que estar a 0 si se está en modo ASCII.
7 Longitud del código de retorno (1 o 2 caracteres). Solo tiene sentido si el bit 6 está activo.
6 El código de retorno ha sido cambiado.
5 reservado
4 El informe de cambio ha sido modificado.
3 Modo ASCII activo.
2 Modo Binario activo.
1 Echo inactivo.
0 Echo activo.
chTurnAround (USHORT) Caracter de retorno. En ASCII y ASCII extendido, el carácter de retorno es el retorno de carro (13). En formato ASCII, el carácter de retorno se indica en el byte menos significativo.
fsInterim (USHORT) Reservado
fsState (USHORT) Describe las teclas que hay pulsadas:
Bit
Descripción
15 SysReq (PetSis) pulsada
14 CapsLock pulsado
13 NumLock pulsado
12 ScrollLock pulsado
11 Alt derecho pulsado
10 Ctrl derecho pulsado
9 Alt izquierdo pulsado
8 Ctrl izquierdo pulsado
7 Insert activo
6 CapsLock activo
5 NumLock activo
4 ScrollLock activo
3 Algún Alt pulsado
2 Algún Ctrl pulsado
1 Cambio (Mayusculas) izquierdo pulsado
0 Cambio (Mayusculas) derecho pulsado
KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
376 Longitud no válida
377 Mascara de Echo no válida
378 Mascara de modo de entrada no válida
439 Handle no válido
445 Se requiere el foco del teclado
447 El teclado está ocupado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG

<A NAME="KBDSTRINGIN">


KbdStringIn

</A>

KbdStringIn lee una cadena de caracteres desde el teclado. Estos pueden ser visualizados a la vez que se teclean si el modo Echo está activo.

#define INCL_BASE
#include <os2.h>

PCH CharBuffer;
PSTRINGINBUF StringLength;
USHORT IOWait;
HKBD KbdHandle;
APIRET rc; /* Codigo de error */

rc = KbdStringIn(CharBuffer, StringLength, IOWait, KbdHandle);

Parámetros

CharBuffer Puntero a una zona de memoria donde OS/2 devolverá la cadena leída.
StringLength Puntero a una estructura de datos con los siguientes campos:
cb
USHORT)
Longitud del buffer en bytes. La longitud máxima es 255.
cchIn
(USHORT)
Número de bytes que OS/2 ha depositado en el buffer.
IOWait Si es 0, espera. En modo binario se espera hasta que se llena el buffer. En modo ASCII se espera hasta que se pulse el código de retorno (por defecto, el retorno de carro).
Si es 1, no espera. Retorna tanto si hay como si no hay caracteres disponibles. Si hay caracteres, devuelve todos ellos inmediatamente (siempre que no superen el máximo que cabe en el buffer). Esta opción no está soportada en modo ASCII.
KbdHandle Handle de teclado. Debe ser 0.

Codigos de error

0 Sin error
375 Valor de espera no válido
439 Handle no válido
445 Se requiere el foco del teclado
464 KBD inactivo (proceso en detached)
504 KBD Extended SG