<br />APIRET rc; /* Codigo de error */
<P>rc = KbdCharIn(CharData, IOWait, KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>CharData</TD><TD>Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:</TD></TR>
! <H3>Parámetros</H3>
<TR><TD></TD><TD>
|-
<TABLE BORDER=1>
| CharData
| Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:
<TR>
|-
<TD>chChar (UCHAR)</TD>
|
<TD>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 <B>fbStatus</B> estará a 1.</TD>
||
</TR>
{| BORDER="1"
|-
<TR>
| <TD>chScanchChar (UCHAR)</TD>
| Caracter <TD>Código de scanASCII de la tecla pulsada. Si esse trata de un código extendido (tecla de función, entoncesp.e.) contienecontendrá h'00 o h'E0 y el ASCIIbit extendido1 de '''fbStatus''' estará a 1.</TD>
|-
</TR>
| chScan (UCHAR)
<TR>
| Código de scan de la tecla pulsada. Si es un código extendido, entonces contiene el ASCII extendido.
<TD>fbStatus (UCHAR)</TD>
|-
<TD>Estado del evento de pulsación. Se lee por bits:
| fbStatus (UCHAR)
| Estado del evento de pulsación. Se lee por bits:
<br />
{|
<TABLE>
|-
<TD><U>Bit</U>
<TR>
| <U>Descripción</U>
<TD><U>Bit</U></TD>
|-
<TD><U>Descripción</U></TD>
| 7-6
</TR>
| 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.
<TR>
|-
<TD>7-6</TD>
| 5
<TD>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 <B>KbdCharIn</B> por cada byte.</TD>
| 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:<br />
{|
|-
<TD><U>Bit</U>
</TR>
| <U>Descripción</U>
<TR>
|-
<TD>5</TD>
| 15 || SysReq (PetSis) pulsada
<TD>Petición de conversión inmediata.</TD>
|-
</TR>
| 14 || CapsLock pulsado
<TR>
|-
<TD>4-2</TD>
| 13 || NumLock pulsado
<TD>Reservado (a 0).</TD>
|-
| 12 || ScrollLock pulsado
</TR>
|-
<TR>
| 11 || Alt derecho pulsado
<TD>1</TD>
|-
<TD>Si es 0, el ScanCode es un carácter; si es 1, el ScanCode no es un carácter, sino un codigo extendido.</TD>
| 10 || Ctrl derecho pulsado
</TR>
|-
<TR>
| 9 || Alt izquierdo pulsado
<TD>0</TD>
|-
<TD>Si es 1, significa que que se ha soltado la tecla indicada, en vez de haber sido pulsada.</TD>
| 8 || Ctrl izquierdo pulsado
</TR>
|-
| 7 || Insert activo
</TABLE>
|-
</TD>
| 6 || CapsLock activo
</TR>
|-
<TR>
| 5 || NumLock activo
<TD>bNlsShift (UCHAR)</TD>
|-
<TD>Reservado. Poner a cero.</TD>
| 4 || ScrollLock activo
</TR>
|-
<TR>
| 3 || Algún Alt pulsado
<TD>fsState (USHORT)</TD>
|-
<TD>Describe las teclas que hay pulsadas:<br />
| 2 || Algún Ctrl pulsado
|-
<TABLE>
| 1
| Cambio (Mayusculas) izquierdo pulsado
<TR>
|-
<TD><U>Bit</U></TD>
| 0 || Cambio (Mayusculas) derecho pulsado
<TD><U>Descripción</U></TD>
|}
</TR>
|-
<TR>
| time (ULONG)
<TD>15</TD>
| Marca de tiempo indicando cuando fue pulsada la tecla. Se cuenta en milisegundos desde que el sistema se ha puesto en marcha.
<TD>SysReq (PetSis) pulsada</TD>
|}
|-
</TR>
| IOWait
<TR>
| 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.
<TD>14</TD>
|-
<TD>CapsLock pulsado</TD>
| KbdHandle || Handle de teclado. Debe ser 0.
</TR>
|}
<TR>
<P>
<TD>13</TD>
{|
<TD>NumLock pulsado</TD>
! <H3>Codigos de error</H3>
</TR>
|-
| 0 || Sin error
<TR>
|-
<TD>12</TD>
| 375 || Valor de espera no válido
<TD>ScrollLock pulsado</TD>
|-
</TR>
| 439 || Handle no válido
<TR>
|-
<TD>11</TD>
| 445 || Se requiere el foco del teclado
<TD>Alt derecho pulsado</TD>
|-
</TR>
| 447 || El teclado está ocupado
<TR>
|-
| 464
<TD>10</TD>
| KBD inactivo (proceso en ''detached'')
<TD>Ctrl derecho pulsado</TD>
|-
</TR>
| 504 || KBD Extended SG
<TR>
|}
<TD>9</TD>
<TD>Alt izquierdo pulsado</TD>
</TR>
<TR>
<TD>8</TD>
<TD>Ctrl izquierdo pulsado</TD>
</TR>
<TR>
<TD>7</TD>
<TD>Insert activo</TD>
</TR>
<TR>
<TD>6</TD>
<TD>CapsLock activo</TD>
</TR>
<TR>
<TD>5</TD>
<TD>NumLock activo</TD>
</TR>
<TR>
<TD>4</TD>
<TD>ScrollLock activo</TD>
</TR>
<TR>
<TD>3</TD>
<TD>Algún Alt pulsado</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Algún Ctrl pulsado</TD>
</TR>
<TR>
<TD>1</TD>
<TD>Cambio (Mayusculas) izquierdo pulsado</TD>
</TR>
<TR>
<TD>0</TD>
<TD>Cambio (Mayusculas) derecho pulsado</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>time (ULONG)</TD>
<TD>Marca de tiempo indicando cuando fue pulsada la tecla. Se cuenta en milisegundos desde que el sistema se ha puesto en marcha.</TD>
</TR>
</TABLE>
</TD></TR>
<TR><TD>IOWait</TD><TD>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.</TD></TR>
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
</TABLE>
<P><TABLE><TH><H3>Codigos de error</H3></TH>
<TR><TD>0</TD><TD>Sin error</TD></TR>
<TR><TD>375</TD><TD>Valor de espera no válido</TD></TR>
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
<TR><TD>447</TD><TD>El teclado está ocupado</TD></TR>
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
</TABLE>
<P>
<P><A NAME="KBDFLUSHBUFFER"><CENTER><H1><HR>KbdFlushBuffer<HR></H1></CENTER>
<br />APIRET rc; /* Codigo de error */
<P>rc = KbdFlushBuffer(KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
! <H3>Parámetros</H3>
</TABLE>
|-
| KbdHandle || Handle de teclado. Debe ser 0.
|}
<P>
<P><TABLE><TH><H3>Codigos de error</H3></TH>
{|
<TR><TD>0</TD><TD>Sin error</TD></TR>
! <H3>Codigos de error</H3>
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
|-
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
| 0 || Sin error
<TR><TD>447</TD><TD>El teclado está ocupado</TD></TR>
|-
| 439 || Handle no válido
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
|-
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
| 445 || Se requiere el foco del teclado
</TABLE>
|-
| 447 || El teclado está ocupado
|-
| 464
| KBD inactivo (proceso en ''detached'')
|-
| 504 || KBD Extended SG
|}
<P>
<P><A NAME="KBDGETSTATUS"><CENTER><H1><HR>KbdGetStatus<HR></H1></CENTER>
<br />APIRET rc; /* Codigo de error */
<P>rc = KbdGetStatus(StatData, KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>StatData</TD><TD>Puntero a una estructura de datos de teclado con los siguientes campos:</TD></TR>
! <H3>Parámetros</H3>
<TR><TD></TD><TD>
|-
<TABLE BORDER=1>
| StatData
<TR>
| Puntero a una estructura de datos de teclado con los siguientes campos:
<TD>cb (USHORT)</TD>
|-
<TD>Longitud de la estructura incluyendo <B>cb</B>. Tiene que ser 10;</TD>
|
||
</TR>
{| BORDER="1"
<TR>
|-
<TD>fsMask (USHORT)</TD>
| cb (USHORT)
<TD>Estado del teclado:
| Longitud de la estructura incluyendo '''cb'''. Tiene que ser 10;
|-
| fsMask (USHORT) || Estado del teclado:
<br />
{|
<TABLE>
|-
<TD><U>Bit</U>
<TR>
| <U>Descripción</U>
<TD><U>Bit</U></TD>
|-
<TD><U>Descripción</U></TD>
| 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:<br />
{|
|-
<TD><U>Bit</U>
</TR>
| <U>Descripción</U>
<TR>
|-
<TD>15-9</TD>
| 15 || SysReq (PetSis) pulsada
<TD>Reservado. Está a cero.</TD>
|-
</TR>
| 14 || CapsLock pulsado
<TR>
|-
<TD>8</TD>
| 13 || NumLock pulsado
<TD>Informe de cambio activo.</TD>
|-
| 12 || ScrollLock pulsado
</TR>
|-
<TR>
| 11 || Alt derecho pulsado
<TD>7</TD>
|-
<TD>Longitud del código de retorno (1 o 2 caracteres). Solo tiene sentido si el bit 6 está activo.</TD>
| 10 || Ctrl derecho pulsado
</TR>
|-
<TR>
| 9 || Alt izquierdo pulsado
<TD>6</TD>
|-
<TD>El código de retorno ha sido cambiado.</TD>
| 8 || Ctrl izquierdo pulsado
|-
</TR>
| 7 || Insert activo
<TR>
|-
<TD>5</TD>
| 6 || CapsLock activo
<TD>reservado</TD>
|-
</TR>
| 5 || NumLock activo
<TR>
|-
<TD>4</TD>
| 4 || ScrollLock activo
<TD>El informe de cambio ha sido modificado.</TD>
|-
</TR>
| 3 || Algún Alt pulsado
|-
<TR>
| 2 || Algún Ctrl pulsado
<TD>3</TD>
|-
<TD>Modo ASCII activo.</TD>
| 1
</TR>
| Cambio (Mayusculas) izquierdo pulsado
<TR>
|-
<TD>2</TD>
| 0 || Cambio (Mayusculas) derecho pulsado
<TD>Modo Binario activo.</TD>
|}
</TR>
|}
<TR>
|-
| KbdHandle || Handle de teclado. Debe ser 0.
<TD>1</TD>
|}
<TD>Echo inactivo.</TD>
</TRP>
{|
<TR>
! <H3>Codigos de error</H3>
<TD>0</TD>
|-
<TD>Echo activo.</TD>
| 0 || Sin error
</TR>
|-
</TABLE>
| 376 || Longitud no válida
</TD>
|-
| 439 || Handle no válido
</TR>
|-
<TR>
| 445 || Se requiere el foco del teclado
<TD>chTurnAround (USHORT)</TD>
|-
<TD>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.</TD>
| 447 || El teclado está ocupado
</TR>
|-
<TR>
| 464
<TD>fsInterim (USHORT)</TD>
| KBD inactivo (proceso en ''detached'')
<TD>Reservado</TD>
|-
</TR>
| 504 || KBD Extended SG
|}
<TR>
<TD>fsState (USHORT)</TD>
<TD>Describe las teclas que hay pulsadas:<br />
<TABLE>
<TR>
<TD><U>Bit</U></TD>
<TD><U>Descripción</U></TD>
</TR>
<TR>
<TD>15</TD>
<TD>SysReq (PetSis) pulsada</TD>
</TR>
<TR>
<TD>14</TD>
<TD>CapsLock pulsado</TD>
</TR>
<TR>
<TD>13</TD>
<TD>NumLock pulsado</TD>
</TR>
<TR>
<TD>12</TD>
<TD>ScrollLock pulsado</TD>
</TR>
<TR>
<TD>11</TD>
<TD>Alt derecho pulsado</TD>
</TR>
<TR>
<TD>10</TD>
<TD>Ctrl derecho pulsado</TD>
</TR>
<TR>
<TD>9</TD>
<TD>Alt izquierdo pulsado</TD>
</TR>
<TR>
<TD>8</TD>
<TD>Ctrl izquierdo pulsado</TD>
</TR>
<TR>
<TD>7</TD>
<TD>Insert activo</TD>
</TR>
<TR>
<TD>6</TD>
<TD>CapsLock activo</TD>
</TR>
<TR>
<TD>5</TD>
<TD>NumLock activo</TD>
</TR>
<TR>
<TD>4</TD>
<TD>ScrollLock activo</TD>
</TR>
<TR>
<TD>3</TD>
<TD>Algún Alt pulsado</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Algún Ctrl pulsado</TD>
</TR>
<TR>
<TD>1</TD>
<TD>Cambio (Mayusculas) izquierdo pulsado</TD>
</TR>
<TR>
<TD>0</TD>
<TD>Cambio (Mayusculas) derecho pulsado</TD>
</TR>
</TABLE></TD>
</TR>
</TABLE>
</TD></TR>
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
</TABLE>
<P><TABLE><TH><H3>Codigos de error</H3></TH>
<TR><TD>0</TD><TD>Sin error</TD></TR>
<TR><TD>376</TD><TD>Longitud no válida</TD></TR>
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
<TR><TD>447</TD><TD>El teclado está ocupado</TD></TR>
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
</TABLE>
<P>
<P><A NAME="KBDPEEK"><CENTER><H1><HR>KbdPeek<HR></H1></CENTER>
<br />APIRET rc; /* Codigo de error */
<P>rc = KbdPeek(CharData, KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>CharData</TD><TD>Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:</TD></TR>
! <H3>Parámetros</H3>
|-
<TR><TD></TD><TD>
| CharData
<TABLE BORDER=1>
| Puntero a una estructura donde OS/2 devolverá la información. Tiene los siguientes campos:
|-
<TR>
|
<TD>chChar (UCHAR)</TD>
||
<TD>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 <B>fbStatus</B> estará a 1.</TD>
{| BORDER="1"
|-
</TR>
| chChar (UCHAR)
<TR>
| 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.
<TD>chScan (UCHAR)</TD>
|-
<TD>Código de scan de la tecla pulsada. Si es un código extendido, entonces contiene el ASCII extendido.</TD>
| chScan (UCHAR)
</TR>
| Código de scan de la tecla pulsada. Si es un código extendido, entonces contiene el ASCII extendido.
<TR>
|-
<TD>fbStatus (UCHAR)</TD>
| fbStatus (UCHAR)
<TD>Estado del evento de pulsación. Se lee por bits:
| Estado del evento de pulsación. Se lee por bits:
<br />
{|
<TABLE>
|-
<TD><U>Bit</U>
<TR>
| <U>Descripción</U>
<TD><U>Bit</U></TD>
|-
<TD><U>Descripción</U></TD>
| 7-6
</TR>
| 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.
<TR>
|-
<TD>7-6</TD>
| 5
<TD>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 <B>KbdPeek</B> por cada byte.</TD>
| 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:<br />
{|
|-
<TD><U>Bit</U>
</TR>
| <U>Descripción</U>
<TR>
|-
<TD>5</TD>
| 15 || SysReq (PetSis) pulsada
<TD>Petición de conversión inmediata.</TD>
|-
</TR>
| 14 || CapsLock pulsado
<TR>
|-
<TD>4-2</TD>
| 13 || NumLock pulsado
<TD>Reservado (a 0).</TD>
|-
| 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.
|}
</TRP>
{|
<TR>
! <H3>Codigos de error</H3>
<TD>1</TD>
|-
<TD>Si es 0, el ScanCode es un carácter; si es 1, el ScanCode no es un carácter, sino un codigo extendido.</TD>
| 0 || Sin error
</TR>
|-
<TR>
| 439 || Handle no válido
<TD>0</TD>
|-
<TD>Si es 1, significa que que se ha soltado la tecla indicada, en vez de haber sido pulsada.</TD>
| 445 || Se requiere el foco del teclado
</TR>
|-
| 447 || El teclado está ocupado
</TABLE>
|-
</TD>
| 464
</TR>
| KBD inactivo (proceso en ''detached'')
<TR>
|-
<TD>bNlsShift (UCHAR)</TD>
| 504 || KBD Extended SG
<TD>Reservado. Poner a cero.</TD>
|}
</TR>
<TR>
<TD>fsState (USHORT)</TD>
<TD>Describe las teclas que hay pulsadas:<br />
<TABLE>
<TR>
<TD><U>Bit</U></TD>
<TD><U>Descripción</U></TD>
</TR>
<TR>
<TD>15</TD>
<TD>SysReq (PetSis) pulsada</TD>
</TR>
<TR>
<TD>14</TD>
<TD>CapsLock pulsado</TD>
</TR>
<TR>
<TD>13</TD>
<TD>NumLock pulsado</TD>
</TR>
<TR>
<TD>12</TD>
<TD>ScrollLock pulsado</TD>
</TR>
<TR>
<TD>11</TD>
<TD>Alt derecho pulsado</TD>
</TR>
<TR>
<TD>10</TD>
<TD>Ctrl derecho pulsado</TD>
</TR>
<TR>
<TD>9</TD>
<TD>Alt izquierdo pulsado</TD>
</TR>
<TR>
<TD>8</TD>
<TD>Ctrl izquierdo pulsado</TD>
</TR>
<TR>
<TD>7</TD>
<TD>Insert activo</TD>
</TR>
<TR>
<TD>6</TD>
<TD>CapsLock activo</TD>
</TR>
<TR>
<TD>5</TD>
<TD>NumLock activo</TD>
</TR>
<TR>
<TD>4</TD>
<TD>ScrollLock activo</TD>
</TR>
<TR>
<TD>3</TD>
<TD>Algún Alt pulsado</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Algún Ctrl pulsado</TD>
</TR>
<TR>
<TD>1</TD>
<TD>Cambio (Mayusculas) izquierdo pulsado</TD>
</TR>
<TR>
<TD>0</TD>
<TD>Cambio (Mayusculas) derecho pulsado</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>time (ULONG)</TD>
<TD>Marca de tiempo indicando cuando fue pulsada la tecla. Se cuenta en milisegundos desde que el sistema se ha puesto en marcha.</TD>
</TR>
</TABLE>
</TD></TR>
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
</TABLE>
<P><TABLE><TH><H3>Codigos de error</H3></TH>
<TR><TD>0</TD><TD>Sin error</TD></TR>
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
<TR><TD>447</TD><TD>El teclado está ocupado</TD></TR>
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
</TABLE>
<P>
<P><A NAME="KBDSETSTATUS"><CENTER><H1><HR>KbdSetStatus<HR></H1></CENTER>
<br />APIRET rc; /* Codigo de error */
<P>rc = KbdSetStatus(StatData, KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>StatData</TD><TD>Puntero a una estructura de datos de teclado con los siguientes campos:</TD></TR>
! <H3>Parámetros</H3>
<TR><TD></TD><TD>
|-
<TABLE BORDER=1>
| StatData
<TR>
| Puntero a una estructura de datos de teclado con los siguientes campos:
<TD>cb (USHORT)</TD>
|-
<TD>Longitud de la estructura incluyendo <B>cb</B>. Tiene que ser 10;</TD>
|
||
</TR>
{| BORDER="1"
<TR>
|-
<TD>fsMask (USHORT)</TD>
| cb (USHORT)
<TD>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.
| 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.
<br />
{|
<TABLE>
|-
<TR>
<TD><U>Bit</U></TD>
<TD><U>DescripciónBit</U></TD>
| <U>Descripción</U>
</TR>
|-
<TR>
| 15-9 || Reservado. Está a cero.
<TD>15-9</TD>
|-
<TD>Reservado. Está a cero.</TD>
| 8
</TR>
| Informe de cambio activo. Tiene que estar a 0 si se está en modo ASCII.
<TR>
|-
<TD>8</TD>
| 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:<br />
{|
|-
<TD><U>Bit</U>
<TD>Informe de cambio activo. Tiene que estar a 0 si se está en modo ASCII.</TD>
| <U>Descripción</U>
</TR>
|-
<TR>
| 15 || SysReq (PetSis) pulsada
<TD>7</TD>
|-
<TD>Longitud del código de retorno (1 o 2 caracteres). Solo tiene sentido si el bit 6 está activo.</TD>
| 14 || CapsLock pulsado
</TR>
|-
| 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.
|}
<TRP>
{|
<TD>6</TD>
! <H3>Codigos de error</H3>
<TD>El código de retorno ha sido cambiado.</TD>
|-
</TR>
| 0 || Sin error
<TR>
|-
<TD>5</TD>
| 376 || Longitud no válida
<TD>reservado</TD>
|-
</TR>
| 377 || Mascara de Echo no válida
|-
<TR>
| 378
<TD>4</TD>
| Mascara de modo de entrada no válida
<TD>El informe de cambio ha sido modificado.</TD>
|-
</TR>
| 439 || Handle no válido
<TR>
|-
<TD>3</TD>
| 445 || Se requiere el foco del teclado
<TD>Modo ASCII activo.</TD>
|-
</TR>
| 447 || El teclado está ocupado
<TR>
|-
| 464
<TD>2</TD>
| KBD inactivo (proceso en ''detached'')
<TD>Modo Binario activo.</TD>
|-
</TR>
| 504 || KBD Extended SG
<TR>
|}
<TD>1</TD>
<TD>Echo inactivo.</TD>
</TR>
<TR>
<TD>0</TD>
<TD>Echo activo.</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>chTurnAround (USHORT)</TD>
<TD>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.</TD>
</TR>
<TR>
<TD>fsInterim (USHORT)</TD>
<TD>Reservado</TD>
</TR>
<TR>
<TD>fsState (USHORT)</TD>
<TD>Describe las teclas que hay pulsadas:<br />
<TABLE>
<TR>
<TD><U>Bit</U></TD>
<TD><U>Descripción</U></TD>
</TR>
<TR>
<TD>15</TD>
<TD>SysReq (PetSis) pulsada</TD>
</TR>
<TR>
<TD>14</TD>
<TD>CapsLock pulsado</TD>
</TR>
<TR>
<TD>13</TD>
<TD>NumLock pulsado</TD>
</TR>
<TR>
<TD>12</TD>
<TD>ScrollLock pulsado</TD>
</TR>
<TR>
<TD>11</TD>
<TD>Alt derecho pulsado</TD>
</TR>
<TR>
<TD>10</TD>
<TD>Ctrl derecho pulsado</TD>
</TR>
<TR>
<TD>9</TD>
<TD>Alt izquierdo pulsado</TD>
</TR>
<TR>
<TD>8</TD>
<TD>Ctrl izquierdo pulsado</TD>
</TR>
<TR>
<TD>7</TD>
<TD>Insert activo</TD>
</TR>
<TR>
<TD>6</TD>
<TD>CapsLock activo</TD>
</TR>
<TR>
<TD>5</TD>
<TD>NumLock activo</TD>
</TR>
<TR>
<TD>4</TD>
<TD>ScrollLock activo</TD>
</TR>
<TR>
<TD>3</TD>
<TD>Algún Alt pulsado</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Algún Ctrl pulsado</TD>
</TR>
<TR>
<TD>1</TD>
<TD>Cambio (Mayusculas) izquierdo pulsado</TD>
</TR>
<TR>
<TD>0</TD>
<TD>Cambio (Mayusculas) derecho pulsado</TD>
</TR>
</TABLE></TD>
</TR>
</TABLE>
</TD></TR>
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
</TABLE>
<P><TABLE><TH><H3>Codigos de error</H3></TH>
<TR><TD>0</TD><TD>Sin error</TD></TR>
<TR><TD>376</TD><TD>Longitud no válida</TD></TR>
<TR><TD>377</TD><TD>Mascara de Echo no válida</TD></TR>
<TR><TD>378</TD><TD>Mascara de modo de entrada no válida</TD></TR>
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
<TR><TD>447</TD><TD>El teclado está ocupado</TD></TR>
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
</TABLE>
<P>
<P><A NAME="KBDSTRINGIN"><CENTER><H1><HR>KbdStringIn<HR></H1></CENTER>
<br />APIRET rc; /* Codigo de error */
<P>rc = KbdStringIn(CharBuffer, StringLength, IOWait, KbdHandle);
<P>
<P><TABLE><TH><H3>Parámetros</H3></TH>
{|
<TR><TD>CharBuffer</TD><TD>Puntero a una zona de memoria donde OS/2 devolverá la cadena leída.</TD></TR>
! <H3>Parámetros</H3>
<TR><TD>StringLength</TD><TD>Puntero a una estructura de datos con los siguientes campos:</TD></TR>
|-
<TR><TD></TD><TD>
| 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:
|-
|
||
{| BORDER="1"
|-
<TD>cb<br />USHORT)
<TABLE BORDER=1>
| Longitud del buffer en bytes. La longitud máxima es 255.
<TR>
|-
<TD>cb<br />USHORT)</TD>
| cchIn<br />(USHORT)
<TD>Longitud del buffer en bytes. La longitud máxima es 255.</TD>
| Número de bytes que OS/2 ha depositado en el buffer.
</TR>
|}
<TR>
|-
<TD>cchIn<br />(USHORT)</TD>
| IOWait
<TD>Número de bytes que OS/2 ha depositado en el buffer.</TD>
| 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).<br />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.
|-
</TR>
| KbdHandle || Handle de teclado. Debe ser 0.
</TABLE>
|}
</TD></TR>
<P>
<TR><TD>IOWait</TD><TD>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).<br />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.</TD></TR>
{|
<TR><TD>KbdHandle</TD><TD>Handle de teclado. Debe ser 0.</TD></TR>
! <H3>Codigos de error</H3>
</TABLE>
|-
<P><TABLE><TH><H3>Codigos de error</H3></TH>
| 0 || Sin error
|-
<TR><TD>0</TD><TD>Sin error</TD></TR>
<TR><TD>| 375</TD><TD> || Valor de espera no válido</TD></TR>
|-
<TR><TD>439</TD><TD>Handle no válido</TD></TR>
| 439 || Handle no válido
<TR><TD>445</TD><TD>Se requiere el foco del teclado</TD></TR>
|-
<TR><TD>464</TD><TD>KBD inactivo (proceso en ''detached'')</TD></TR>
| 445 || Se requiere el foco del teclado
|-
<TR><TD>504</TD><TD>KBD Extended SG</TD></TR>
| 464
</TABLE>
| KBD inactivo (proceso en ''detached'')
|-
| 504 || KBD Extended SG
|}
|