Question

Je travaille sur une application simple de la console pour obtenir mes pieds mouillés malédictions à nouveau. J'ai un peu un problème de portage de mon application de Windows XP à AIX. Voici un morceau d'exemple de code.

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;
}

Quand je lance cette sous XP, je reçois la sortie suivante d'un Downarrow suivi d'un CTRL-Downarrow.

Press a Key 258
Press a Key 481
Press a Key

Suggérant 258 est le code de la flèche vers le bas, et 481 pour la flèche vers le bas ctrl.

L'exécution de ce même test sous AIX.

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

1858 est la flèche vers le bas, et le 27/29/66 est la réponse de la flèche ctrl-bas. Je reconnais que le 27/29/66 est probablement l'une des séquences d'échappement standard. J'espérais que malédictions tracerait à une seule valeur. Le côté XP a un CTL_DOWN défini dans le fichier curses.h. Le côté AIX ne fonctionne pas.

Alors, ma question est ici

eux est un peu incantatoire je manqué ici, qui tracera par magie ces trois personnages dans un bel entier unique? ou dois-je écrire une classe de quelque sorte, pour gérer la plate-forme cachant des frappes spécifiques en quelque chose de mon vrai application peut utiliser?

Mes yeux sont injectés de sang de la recherche en ligne la substance AIX. Toute aide à me diriger dans la bonne direction serait appréciée.

Autres informations aléatoires

Je courais xp pro, avec les derniers Service Packs   msvc 6, avec service pack 6. La bibliothèque est maudit PDCURSES

L'autre compilateur est IBM XL C / C ++ ENTERPRISE EDITION V8.0   Les utilisations Compile

xlc ++ -g app.cpp -lcurses

J'utilise pdcurses33 sur le PC    et les malédictions natives sur AIX.

Était-ce utile?

La solution 2

Re: [PDCURSES] Alt + Maj + n (par exemple) sur Windows

LM Ven 12 juillet 2002 08:13:53 -0700

07/07/2002 18:10:00, écrit Jeremy Smith:

  

Je l'ai rencontré un peu d'un problème. Utiliser la fonction Imprécations getch () dans   mon programme, pour les clés tels que « n » ou Alt + « n » mais comment puis-je détecter ces   combinaisons:

     

Ctrl + n   Alt + Maj + n   Ctrl + Alt + n   Ctrl + Alt + Maj + n

     

Je suppose qu'il y revenir Maj + Alt + 2 doit être une sorte de drapeau comme   keycode réelle (ce qui est différent de Maj, Alt ou 2), mais je ne   savoir-faire. : - (

J'ai vérifié l'en-tête pour le fichier pour curses.h et ils apparaissent à la liste tous les codes de balayage standard, vous pouvez revenir à partir d'un clavier, y compris certains ALT combinaisons et quelques-unes des combinaisons de contrôle.

Alors j'ai vérifié la mise en œuvre de Windows pour obtenir un caractère. Dans pdckbd.c la routine win32_kbhit appelle ReadConsoleInput. Le décalage, alt, contrôle et autres clés état sont renvoyés par cette fonction dans le dwControlKeyState. Les rapports PDC_get_bios_key quelle touche est enfoncée à l'aide les deux tables (kptab de kptab et ext_kptab), donc si la combinaison est pas dans le tableau, vous n'êtes probablement pas le voir. Vous pourrez peut-être ajouter un peu définitions aux tables si quelque chose manque. Il y a aussi un code dans la même routine qui définit les états (BUTTON_SHIFT, BUTTON_CONTROL, BUTTON_ALT), mais cela semble être pour l'entrée de la souris. Ainsi, vous pouvez vérifier ces clés dans la structure MOUSE_STATUS. Cela ne se rapporte à la la mise en œuvre de Windows. Chaque plate-forme a une façon unique de déterminer les touches sont enfoncées.

16 DOS bits, I utilisé pour changer l'état de déplacement, le verrouillage des majuscules et de verrouillage numérique en changeant les paramètres à l'adresse hexadécimale 417. Cela ne fonctionne que pour de vrai programmes en mode. La plupart des nouveaux compilateurs de Windows ne vous permettent même de bios d'accès ou de mémoire directement avec des fonctions plus. Le 16 bits emplacement hex 417 et 418 hex indique que le décalage vers la droite a été pressé en réglant le bit à l'adresse 417, le déplacement vers la gauche, par réglage du second bit le plus élevé dans l'octet, la touche ctrl en réglant le suivant le plus élevé et la touche alt le plus élevé suivant après. le 418 adresse détient le statut du droit ou gauche alt ou non et touches de commande ont été enfoncées.

Il semble que vous pourriez avoir à faire quelques modifications à votre version particulière de malédictions pour obtenir exactement ce que vous voulez. Curses est interface utilisateur très portable, il supporte donc souvent le plus petit commun dénominateur des fonctionnalités sur certaines plates-formes.

Par ailleurs, je me souviens avoir lu qu'il y avait des travaux en cours pour une nouvelle malédictions standard inclus soutien de caractère international. Est-ce que quelqu'un rien entendu plus loin cet effort?

Les meilleurs voeux.

Laura Michaels http://www.distasis.com

On dirait que je dois faire mon propre décodage du clavier.

Autres conseils

Vous pouvez essayer d'utiliser les bibliothèques open source « ncurses » plutôt que la bibliothèque AIX fournie qui a été fortement axée sur les bibliothèques matérielles et logicielles IBM spécifiques.

Je ne me souviens pas exactement s'il y a une xlC la version compatable là-bas afin que vous pourriez avoir à construire la bibliothèque de la source ou de passer à « gcc ». Thier est également une version de ncurses pour les fenêtres afin que vous puissiez être en mesure de rétroporter vos modifications à la version originale de votre code.

J'ai une mémoire Vauge de ncurse supportant des noms logiques comme up_arrow etc. plutôt que des chiffres pour les touches de commande. Le problème depenfing sur la plate-forme, l'émulation de terminal, les paramètres NLS etc simple flèche pourrait revenir comme 'up_arrow', 'Esc_UP', 'Cntrl_K'.

Je me souviens plusieurs coups de cartographie clés à une logique « intention » comme «MEANT_UP la dernière fois que je devais porter une application de malédictions à une autre plate-forme (et qui était un AIX relativly facile au port Solaris).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top