Frage

Ich arbeite an einer einfachen Konsolen -App, um meine Füße wieder mit Flüchen nass zu machen. Ich habe ein bisschen Probleme, meine App von XP nach AIX zu portieren. Hier ist ein Beispiel -Code -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;
}

Wenn ich dies unter XP ausführe, erhalte ich die folgende Ausgabe von einem Downarrow, gefolgt von einem Strg-Downarrow.

Press a Key 258
Press a Key 481
Press a Key

Dies suggeriert 258 der Code für den Down-Pfeil und 481 für Strg-Down-Pfeil.

Durchführung desselben Tests unter AIX.

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

Der 1858 ist der Abwärtspfeil, und der 27/29/66 ist die Antwort für den Strg-Down-Pfeil. Ich erkenne, dass der 27/29/66 wahrscheinlich eine der Standard -Fluchtsequenzen ist. Ich hatte gehofft, dass Flüche es einem einzelnen Wert zuordnen würden. Die XP -Seite hat eine CTL_Down in der Datei curses.h. Die AIX -Seite nicht.

Meine Frage hier ist also

Ist sie eine Beschwörung, die ich hier verpasst habe, das diese drei Charaktere auf magische Weise zu einer schönen einzigartigen Ganzzahl abbilden? Oder muss ich eine Art Klasse schreiben, um die Plattformspezifische Tastenanschläge in etwas zu verbergen, das meine echte App verwenden kann?

Meine Augen sind blutgeschossen, wenn er das AIX -Online -Zeug sucht. Jede Hilfe, um mich in die richtige Richtung zu weisen, wäre geschätzt.

Andere zufällige Informationen

Ich betreibe XP Pro mit den neuesten Servicepaketen MSVC 6 mit Service Pack 6. Die Flursbibliothek ist pdcurses

Der andere Compiler ist IBM XL C/C ++ Enterprise Edition v8.0 Das Compile verwendet

xlc ++ -g app.cpp -lcurses

Ich verwende PDCurses33 auf dem PC und die nativen Flüche auf AIX.

War es hilfreich?

Lösung 2

Betreff: [pdcurses] Alt + Shift + n (zum Beispiel) unter Windows

LM Fr, 12. Juli 2002 08:13:53 -0700

Am 7.07.2002 um 18:10:00 Uhr schrieb Jeremy Smith:

Ich bin auf ein Problem gestoßen. Ich verwende die Flüchefunktion getCh () in meinem Programm für Schlüssel wie 'n' oder Alt+'n', aber wie erkenne ich diese Kombinationen:

Strg+n Alt+Verschiebung+n Strg+Alt+N Strg+Alt+Shift+N

Ich kann mir vorstellen, dass es eine Art Flag geben muss, um Shift+Alt+2 als tatsächlicher Schlüsselcode zurückzugeben (der sich von Verschiebung, Alt oder 2 unterscheidet), aber ich weiß nicht wie. :-(

Ich habe den Header auf Datei für Flüche überprüft.

Dann habe ich die Windows -Implementierung überprüft, um einen Charakter zu erhalten. In PDCKBD.C ruft die routinemäßigen Win32_KBHit Readconsoleinput auf. Die Schicht-, Alt-, Steuer- und andere Statusschlüssel werden von dieser Funktion im DWControlkeyState zurückgegeben. Der pdc_get_bios_key berichtet, welche Taste mit den zwei KPTAB -Tabellen (kPTAB und ext_kptab) gedrückt wird. Wenn sich die Kombination also nicht in der Tabelle befindet, sehen Sie es wahrscheinlich nicht. Möglicherweise können Sie den Tabellen einige Definitionen hinzufügen, wenn etwas fehlt. Es gibt auch einen Code in derselben Routine, der die Zustände (Button_shift, Button_Control, Button_ALT) festlegt. Dies scheint jedoch für die Mauseingabe zu sein. So können Sie diese Schlüssel in der Struktur der Maus_Status überprüfen. Dies betrifft nur die Windows -Implementierung. Jede Plattform hat eine einzigartige Möglichkeit, herauszufinden, welche Schlüssel gepresst werden.

In 16 -Bit -DOS habe ich den Zustand der Verschiebung, Caps Lock und Num Lock geändert, indem ich die Einstellungen an der HEX 417 -Adresse geändert habe. Dies funktioniert nur für echte Modusprogramme. Viele der neuen Windows -Compiler ermöglichen es Ihnen nicht einmal, auf BIOS oder Speicher direkt mit Funktionen zugreifen zu können. Der 16 -Bit -Standort bei Hex 417 und Hex 418 zeigt an, dass die rechte Verschiebung gedrückt wurde und der Alt -Schlüssel nach dem nächsthöchsten danach. Die 418 -Adresse hält den Status, ob die rechten oder linken Alt- und Steuerschlüsse gedrückt wurden oder nicht.

Es sieht so aus, als müssten Sie möglicherweise einige Änderungen an Ihrer speziellen Flüchenversion vornehmen, um genau das zu erhalten, was Sie wollen. Flüche sind eine sehr tragbare Benutzeroberfläche, die häufig den niedrigsten gemeinsamen Nenner von Funktionen auf einigen Plattformen unterstützt.

Ich erinnere mich übrigens daran, dass ich gelesen habe, dass Arbeiten für einen neuen Fluchstandard im Gange gebe. Hat jemand etwas weiter über diese Bemühungen gehört?

Besten Wünsche.

Laura Michaelshttp://www.distasis.com

Es sieht so aus, als müsste ich meine eigene Tastatur -Dekodierung durchführen.

Andere Tipps

Sie können versuchen, die Open -Source -Bibliotheken "NCurses" zu verwenden, anstatt die von der AIX bereitgestellte Bibliothek, die stark auf IBM -spezifische Hardware- und Software -Bibliotheken ausgerichtet war.

Ich kann mich nicht genau erinnern, ob es eine XLC -kompatible Version gibt, sodass Sie möglicherweise die Bibliothek von Quelle oder zu 'GCC' erstellen müssen. Thier ist auch eine Version von NCurses für Windows, sodass Sie möglicherweise Ihre Änderungen an der Originalversion Ihres Codes zurückführen können.

Ich habe eine Vauge -Erinnerung an NCURSE, die logische Namen wie UP_Arrow usw. anstelle von Zahlen für die Steuerschlüsse unterstützt. Das Problem Depenfing auf der Plattform, der Terminalemulation, NLS -Einstellungen usw. Ein einfacher Up -Pfeil könnte als "up_arrow", "ESC_UP", "cntrl_k" zurückkommen.

Ich erinnere mich, dass ich mehrere Schlüsselstrokes auf eine logische "Absicht" wie "gemeint" abgebildet habe. Das letzte Mal musste ich eine Flutanwendung auf eine andere Plattform portieren (und das war eine relativ einfache AIX zu Solaris -Port).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top