Проклятия AIX/XP Получите ключ клавиши/модификатор в кросс -платформе

StackOverflow https://stackoverflow.com/questions/1285313

Вопрос

Я работаю над простым приложением для консоли, чтобы снова промокнуть ногами с проклятиями. У меня возникает небольшая проблема с переносом моего приложения с XP в AIX. Вот образец куски кода.

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

Когда я запускаю это под XP, я получаю следующий вывод от Down-Marrow, за которым следует Ctrl-DownArrow.

Press a Key 258
Press a Key 481
Press a Key

Предложение 258 является кодом для стрелки вниз и 481 для стрелки Ctrl-Down.

Выполняя этот же тест под AIX.

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

1858 год-это стрелка вниз, а 27/29/66-это ответ для стрелы Ctrl-Down. Я признаю, что 27/29/66, вероятно, является одной из стандартных последовательностей побега. Я надеялся, что проклятия сопоставляют это с одним значением. Сторона XP имеет CTL_DOWN, определенную в файле curses.h. Сторона AIX нет.

Итак, мой вопрос здесь

Является ли они каким -то заклинанием, которое я здесь пропустил, что волшебным образом составит эти три персонажа в хорошее уникальное целое число? Или мне нужно написать какой -то класс, чтобы справиться с скрытой платформой конкретных клавишет в чем -то, что может использовать мое настоящее приложение?

Мои глаза - кровь, снятые в поисках онлайн -материалов AIX. Любая помощь, чтобы указать мне в правильном направлении.

Другая случайная информация

Я использую XP Pro, с последними пакетами обслуживания MSVC 6, с пакетом обслуживания 6. Библиотека проклятий - PDCurses

Другим компилятором является IBM XL C/C ++ Enterprise Edition v8.0. Компиляция использует

xlc ++ -g app.cpp -lcurses

Я использую Pdcurses33 на ПК и нативных проклятиях на AIX.

Это было полезно?

Решение 2

Re: [pdcurses] alt + shift + n (например) в Windows

LM пт, 12 июля 2002 г. 08:13:53 -0700

В 7/7/2002 18:10:00, Джереми Смит написал:

Я столкнулся с некоторой проблемой. Я использую функцию Curses getCh () в своей программе, для таких ключей, как 'n' или alt+'n', но как я могу обнаружить эти комбинации:

Ctrl+n alt+shift+n ctrl+alt+n ctrl+alt+shift+n

Я полагаю, что должен быть какой -то флаг, чтобы вернуть Shift+Alt+2 в качестве фактического ключа (который отличается от сдвига, ALT или 2), но я не знаю как. :-(

Я проверил заголовок для файла для curses.h, и они, по -видимому, перечисляют все стандартные коды сканирования, которые вы можете вернуть с клавиатуры, включая некоторые комбинации ALT и несколько комбинаций управления.

Затем я проверил реализацию Windows для получения персонажа. В pdckbd.c обычные вызовы win32_kbhit readconsoleinput. Сдвиг, ALT, управление и другие клавиши статуса возвращаются из этой функции в DWControlKeyState. PDC_GET_BIOS_KEY сообщает, какой клавишу нажимается с использованием двух таблиц kptab (kptab и ext_kptab), поэтому, если комбинация нет в таблице, вы, вероятно, не видите ее. Вы можете добавить некоторые определения в таблицы, если чего -то не хватает. Есть также какой -то код в той же подпрограмме, которая устанавливает состояния (button_shift, button_control, button_alt), но это представляется для ввода мыши. Таким образом, вы можете проверить эти ключи в структуре Mouse_status. Это относится только к реализации Windows. У каждой платформы есть уникальный способ выяснить, какие клавиши нажимают.

В 16 -битной DOS я использовал состояние сдвига, блокировки Caps и Num Lock, изменяя настройки по адресу HEX 417. Это работает только для программ реального режима. Многие из новых компиляторов Windows даже не позволяют вам больше получать доступ к BIOS или памяти с функциями. 16 -битное местоположение на HEX 417 и HEX 418 указывает, что правая сдвиг была нажата путем установки наивысшего бита на адрес 417, левой сдвиг, установив второй самый высокий бит в байте, клавиша CTRL, установив следующий самый высокий и Alt Key к следующему самым высоким после этого. Адрес 418 содержит статус того, были ли нажимали правые или левые клавиши ALT и управления.

Похоже, что вам, возможно, придется внести некоторые изменения в вашу конкретную версию проклятий, чтобы получить именно то, что вы хотите. Crseses - очень портативный пользовательский интерфейс, поэтому он часто поддерживает самый низкий общий знаменатель функций на некоторых платформах.

Кстати, я помню, как читал, что началась работа для нового стандарта проклятий, который включал международную поддержку персонажей. Кто -нибудь слышал что -нибудь дальше об этих усилиях?

С наилучшими пожеланиями.

Лора Майклсhttp://www.distasis.com

Похоже, мне нужно сделать собственное декодирование клавиатуры.

Другие советы

Вы можете попробовать использовать библиотеки с открытым исходным кодом «NCURSES», а не предоставленную AIX библиотеку, которая была в значительной степени ориентирована на IBM -специальные аппаратные и программные библиотеки.

Я не могу точно вспомнить, есть ли существующая версия XLC, так что вам, возможно, придется создать библиотеку из источника или переключиться на «GCC». The Thier также является версией Ncurses для Windows, поэтому вы можете вернуть свои изменения в исходную версию вашего кода.

У меня есть воспоминания о Vauge о поддержке логических имен, таких как up_arrow и т. Д., А не номера для клавиш управления. Проблема, разделяющаяся на платформе, эмуляция терминала, настройки NLS и т. Д. Стрелка простой вверх может вернуться как «up_arrow», 'esc_up', 'cntrl_k'.

Я помню, как отображал несколько ключевых ударов с одним логическим «намерением», например, «ADAD_UP» в последний раз, когда мне приходилось переносить приложение CRSSES на другую платформу (и это был относительно легкий AIX для порта Solaris).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top