Pregunta

Estoy trabajando en una simple aplicación de consola para conseguir mis pies mojados con maldiciones de nuevo. Estoy teniendo un poco de un problema portar mi aplicación de XP a AIX. Aquí está una muestra de pedazos de código.

int main(void)
{
    WINDOW *_window = initscr(); 
    int _rows;
    int _cols;

    cbreak();

    /* Accept all keys */ 
    keypad(_window, true);

    /* Don't echo things that are typed */ 
    noecho();

    /* Get the screen dimensions */ 
    getmaxyx(_window, _rows, _cols);

    /* Don't display cursor */ 
    curs_set(0);

    for (;;)
    {
        printw("Press a Key ");
        refresh();
        int key = wgetch(_window);
        printw("%d \n", key);
    }

    endwin();

    return 0;
}

Cuando ejecuto esto bajo XP, me sale el siguiente salida de un downarrow seguido de un CTRL-Flecha abajo.

Press a Key 258
Press a Key 481
Press a Key

Sugiriendo 258 es el código de la flecha hacia abajo, y 481 para ctrl-flecha hacia abajo.

La realización de esta misma prueba bajo AIX.

Press a Key 1858
Press a Key 27
Press a Key 79
Press a Key 66
Press a Key

El 1858 es la flecha hacia abajo, y el 27/29/66 es la respuesta para la flecha ctrl-down. Reconozco que el 27/29/66 es probablemente una de las secuencias de escape estándar. Yo esperaba que serían maldiciones asignarla a un solo valor. El lado XP tiene una CTL_DOWN definido en el archivo curses.h. El lado AIX no lo hace.

Así que mi pregunta aquí es

ellos es cierto encantamiento echaba de menos aquí, que mágicamente va a asignar los tres caracteres en un buen número entero único? o tengo que escribir una clase de algún tipo, para manejar ocultar la plataforma de pulsaciones de teclas específicas en algo mi verdadera aplicación puede utilizar?

Mis ojos están inyectados en sangre a partir de la búsqueda de la materia en línea AIX. Cualquier ayuda que me señale en la dirección correcta sería apreciada.

Otra información aleatoria

Estoy corriendo XP Pro, con los últimos paquetes de servicios   msvc 6, con servicio de paquete de 6. El maldice biblioteca es pdcurses

El otro compilador es IBM XL C / C ++ V8.0 ENTERPRISE EDITION   Los usos de compilación

++ xlc -g app.cpp -lcurses

Estoy utilizando pdcurses33 en el PC    y las maldiciones nativos en AIX.

¿Fue útil?

Solución 2

Re: [PDCurses] Alt + Shift + n (por ejemplo) en Windows

LM Vier 12 Jul de 2002 08:13:53 -0700

Al 07/07/2002 06:10:00 PM, Jeremy Smith escribió:

  

Me he encontrado un poco de un problema. Yo uso la función getch Maldiciones () en   mi programa, para las claves tales como 'n' o Alt + 'n' pero ¿cómo puedo detectar estos   combinaciones:

     

Ctrl + n   Alt + Shift + n   Ctrl + Alt + n   Ctrl + Alt + Shift + n

     

Me imagino que debe haber algún tipo de indicador para volver Shift + Alt + 2 como una   código clave real (que es diferente de Shift, Alt o 2) no, pero que hago   saber como. : - (

He comprobado el encabezado de archivo para curses.h y parece que la lista de todos códigos de exploración estándar, usted puede obtener de vuelta de un teclado, incluyendo algunos ALT combinaciones y algunas de las combinaciones de control.

A continuación, he comprobado la aplicación de Windows para conseguir un personaje. En pdckbd.c la rutina win32_kbhit llama ReadConsoleInput. El cambio, alt, teclas de control y otra de estado se volvieron de esta función en el dwControlKeyState. El PDC_get_bios_key informa de lo que se pulsa la tecla usando las dos tablas (kptab kptab y ext_kptab), por lo que si la combinación no es en la tabla, es probable que no lo está viendo. Usted puede ser capaz de añadir un poco las definiciones a las mesas, si falta algo. También hay algo de código en la misma rutina que establece los estados (BUTTON_SHIFT, BUTTON_CONTROL, BUTTON_ALT), pero esto parece ser para la entrada del ratón. Así se puede comprobar estas teclas en la estructura MOUSE_STATUS. Esto sólo se refiere a la aplicación de Windows. Cada plataforma tiene una forma única de averiguar las teclas que se pulsan.

En 16 bit DOS, he utilizado para cambiar el estado de cambio, el bloqueo de mayúsculas y Num Lock cambiando la configuración en el hexagonal 417 de direcciones. Esto sólo funciona de verdad los programas en modo. Muchos de los nuevos compiladores de Windows ni siquiera le permiten bios de acceso o de memoria directamente con las funciones más. El 16 bits ubicación en hexadecimal hexagonal 417 y 418 indica que el desplazamiento a la derecha ha sido pulsado activando el bit más alto en la dirección 417, la desviación a la izquierda, por establecer el bit de segundo más alto en el byte, la tecla CTRL estableciendo la inmediatamente superior y la tecla alt por el siguiente más alto después de eso. el 418 Dirección tiene la condición de si o no la derecha o izquierda y alt teclas de control fueron presionados.

Parece como si es posible que tenga que hacer algunas modificaciones a su versión particular de maldiciones para conseguir exactamente lo que quiere. Maldiciones es una interfaz de usuario muy portable, por lo que a menudo apoya el mínimo común denominador de características en algunas plataformas.

Por cierto, recuerdo haber leído que no había trabajos en curso para un nuevo maldiciones estándar que incluía el apoyo internacional carácter. Alguien tiene nada más escuchado en este esfuerzo?

Los mejores deseos.

Laura Michaels http://www.distasis.com

Parece que tengo que hacer mi propia decodificación teclado.

Otros consejos

Se podría tratar de usar el código abierto "ncurses" bibliotecas en lugar de la biblioteca suministrada AIX que se concentró fundamentalmente en las bibliotecas de hardware y software específicos de IBM.

No recuerdo exactamente si hay una versión compatible xlC por ahí lo que puede tener para construir la biblioteca de la fuente o cambiar a 'gcc'. Thier es también una versión de ncurses para las ventanas por lo que puede ser capaz de acondicionarlo sus cambios a la versión original de su código.

Tengo una memoria vauge de apoyo ncurse nombres lógicos como up_arrow etc en lugar de los números de las teclas de control. El problema depenfing en la plataforma, de emulación de terminal, etc configuración NLS un simple flecha hacia arriba podría volver como 'up_arrow', 'Esc_UP', 'Cntrl_K'.

Me acuerdo de mapeo varias pulsaciones de teclas a una 'intención' lógica como 'MEANT_UP' la última vez que tuve que portar una aplicación maldiciones a otra plataforma (y que era un AIX relativly fácil de portar Solaris).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top