Domanda

Sto lavorando su un semplice console app per ottenere i miei piedi bagnati con maledizioni di nuovo. Sto avendo un po 'un problema porting mia app da XP a AIX. Ecco un pezzo di esempio di codice.

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

Quando ho eseguito questo sotto XP, ricevo il seguente uscita da un downarrow seguito da un CTRL-downarrow.

Press a Key 258
Press a Key 481
Press a Key

Suggerendo 258 è il codice per la freccia giù, e 481 per freccia Ctrl-down.

L'esecuzione di questa stessa prova in AIX.

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

Il 1858 è la freccia verso il basso, e il 27/29/66 è la risposta per la freccia ctrl-giù. Riconosco che il 27/29/66 è probabilmente una delle sequenze di escape standard. Speravo che avrebbero maledizioni farlo corrispondere ad un singolo valore. Il lato XP ha una CTL_DOWN definito nel file curses.h. Il lato AIX non lo fa.

Quindi la mia domanda è qui

è loro qualche incantesimo mi mancava qui, che magicamente mappare quei tre caratteri in un bel numero intero univoco? o devo scrivere una classe di qualche tipo, per gestire nascondere la piattaforma di combinazioni di tasti specifici in qualcosa la mia vera applicazione può utilizzare?

I miei occhi sono iniettati di sangue dalla ricerca della roba online AIX. Qualsiasi aiuto per puntare nella giusta direzione mi sarebbe apprezzato.

Altre informazioni casuali

Sono in esecuzione xp pro, con gli ultimi service pack   msvc 6, con Service Pack 6. Le maledizioni biblioteca è pdcurses

L'altro compilatore è IBM XL C / C ++ ENTERPRISE EDITION V8.0   Gli usi di compilazione

xlc ++ -g app.cpp -lcurses

Sto usando pdcurses33 sul pc    e le maledizioni native su AIX.

È stato utile?

Soluzione 2

Re: [PDCurses] Alt + Maiusc + n (per esempio) su Windows

LM Ven, 12 Lug 2002 08:13:53 -0700

Al 2002/07/07 18:10:00, Jeremy Smith ha scritto:

  

ho incontrato un po 'un problema. Io uso la funzione getch Maledizioni () in   il mio programma, per le chiavi come 'n' o Alt + 'n', ma come faccio a rilevare questi   combinazioni:

     

CTRL + N   Alt + Maiusc + n   Ctrl + Alt + n   Ctrl + Alt + Maiusc + n

     

Immagino che ci deve essere una sorta di bandiera per tornare Shift + Alt + 2 come   keycode reale (che è diverso da Maiusc, Alt o 2), ma non lo faccio   competenza. : - (

Ho controllato l'intestazione per il file per curses.h e sembrano elencare tutte le codici di scansione standard, si può tornare indietro da una tastiera, tra cui alcuni ALT combinazioni e alcune delle combinazioni di controllo.

Poi ho controllato l'implementazione di Windows per ottenere un carattere. Nel pdckbd.c la routine win32_kbhit chiama ReadConsoleInput. Lo spostamento, alt, controllo e l'altra condizione chiavi vengono restituiti da questa funzione nel dwControlKeyState. Il PDC_get_bios_key riporta ciò che viene premuto il tasto utilizzando le due tabelle kptab (kptab e ext_kptab), per cui se la combinazione non è nella tabella, che probabilmente non si è visto esso. Si può essere in grado di aggiungere un po ' definizioni alle tabelle se manca qualcosa. C'è anche un po 'di codice nella stessa routine che imposta gli stati (BUTTON_SHIFT, BUTTON_CONTROL, BUTTON_ALT), ma questo sembra essere per l'input del mouse. Così si può controllare queste chiavi nella struttura MOUSE_STATUS. Questo riguarda solo il implementazione di Windows. Ogni piattaforma ha un modo unico di capire che si premono i tasti.

In 16 bit DOS, ho usato per cambiare lo stato di spostamento, Caps Lock e Num Lock modificando le impostazioni a esagono 417 indirizzo. Questo funziona solo per reale programmi in modalità. Molti dei nuovi compilatori di Windows non consentono neppure di bios di accesso o di memoria direttamente con funzioni più. Il 16 bit posizione in hex 417 e 418 hex indica che lo spostamento a destra è stata premuto impostando il bit più alto presso l'indirizzo 417, lo spostamento sinistra di impostare il secondo più alto bit nel byte, il tasto CTRL impostando il più alto successivo e il tasto Alt dal successivo più alto dopo. la 418 indirizzo detiene lo status di se la destra o sinistra e alt sono stati premuti i tasti di controllo.

Sembra come se potrebbe essere necessario apportare alcune modifiche al tuo versione particolare di maledizioni per ottenere esattamente quello che vuoi. Maledizioni è un interfaccia utente molto portatile, così sostiene spesso il minimo comune denominatore di caratteristiche su alcune piattaforme.

A proposito, mi ricordo di aver letto che c'era lavori in corso per un nuovo maledice standard che comprendeva supporto dei caratteri internazionali. Ha qualcuno sentito niente più avanti questo sforzo?

I migliori auguri.

Laura Michaels http://www.distasis.com

Sembra che ho bisogno di fare la mia decodifica della tastiera.

Altri suggerimenti

Si potrebbe provare a utilizzare il open source "ncurses" librerie, piuttosto che la libreria in dotazione AIX che è stato fortemente orientato a specifiche librerie hardware e software IBM.

Non mi ricordo esattamente se esiste una versione compatibile XLC là fuori così si può avere per costruire la libreria dai sorgenti o passare a 'gcc'. Thier è anche una versione di ncurses per finestre in modo da essere in grado di backport le modifiche alla versione originale del codice.

Ho un ricordo vauge di ncurse supportare nomi logici come UP_ARROW ecc piuttosto che i numeri per i tasti di controllo. Il problema depenfing sulla piattaforma, emulazione di terminale, le impostazioni NLS ecc una semplice freccia in su potrebbe tornare come 'UP_ARROW', 'Esc_UP', 'Cntrl_K'.

Mi ricordo di mappatura di diversi tratti chiave per una logica 'intenzione' come 'MEANT_UP' l'ultima volta che ho dovuto porting di un'applicazione maledizioni su un'altra piattaforma (e che è stato un AIX relativly facile da porto Solaris).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top