代码之家  ›  专栏  ›  技术社区  ›  EvilTeach

AIX/xp curses以跨平台方式获取键/修改键

  •  1
  • EvilTeach  · 技术社区  · 15 年前

    我正在开发一个简单的控制台应用程序,让我的脚再次被诅咒湿透。将我的应用程序从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下运行这个命令时,我从一个向下箭头和一个ctrl-downarrow得到如下输出。

    Press a Key 258
    Press a Key 481
    Press a Key
    

    建议258是向下箭头的代码,481是ctrl向下箭头的代码。

    在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向下箭头的响应。 我认识到27/29/66可能是标准的转义序列之一。 我希望诅咒能把它映射到一个值上。xp端在curses.h文件中定义了一个ctl-down。AIX端没有。

    所以我的问题是

    它们是我在这里遗漏的咒语吗?它会神奇地将这三个字符映射成一个很好的唯一整数吗?或者我需要编写某种类型的类来处理将平台特定的击键隐藏到我真正的应用程序可以使用的地方?

    我的眼睛是从艾克斯在线搜索的血迹。 如果能帮我指出正确的方向,我将不胜感激。

    其他随机信息

    我运行的是xp pro,带有最新的服务包 MSVC 6,带Service Pack 6。诅咒图书馆是一个宝库

    另一个编译器是IBM XL C/C++Enterprise Voices V8.0 编译使用

    xlc++-g app.cpp-l曲线

    我在电脑上使用pdcurses33 还有当地人对艾克斯的诅咒。

    2 回复  |  直到 15 年前
        1
  •  1
  •   James Anderson    15 年前

    您可以尝试使用开放源码的“ncurses”库,而不是AIX提供的库,后者主要面向IBM特定的硬件和软件库。

    我不清楚是否有一个XLC兼容版本,所以您可能需要从源代码构建库或切换到“gcc”。Thier也是一个用于Windows的ncurses版本,因此您可以将所做的更改返回到代码的原始版本。

    我有一个支持逻辑名称(如向上箭头等)而不是控制键数字的变换存储器。这个问题取决于平台、终端仿真、NLS设置等,一个简单的向上箭头可以返回为“向上箭头”、“Esc向上”、“cntrl-k”。

    我记得上次我不得不将一个Curses应用程序移植到另一个平台(这是一个相对简单的AIX到Solaris端口)时,我曾将几个关键笔画映射到一个逻辑“意图”,比如“意图”。

        2
  •  0
  •   EvilTeach    15 年前

    回复:Windows上的[pCurses]alt+shift+n(例如)

    LM 2002年7月12日星期五08:13:53-0700

    2002年7月7日下午6:10:00,杰里米·史密斯写道:

    我遇到了一个小问题。我在中使用curses函数getch()。 我的程序,用于键如“n”或“alt+'n”,但如何检测这些 组合:

    CTRL+N ALT+Shift +N CTRL+ALT+N ctrl+alt+shift+n

    我想肯定有某种标志可以将shift+alt+2作为 实际的键码(不同于shift、alt或2),但我没有 知道怎么做。:

    我检查了文件头中的curses.h,它们似乎列出了 标准扫描代码,你可以从键盘上得到,包括一些alt 组合和一些控制组合。

    然后,我检查了Windows实现是否获取了一个字符。在 pdckbd.c例程win32_kbhit调用readconsoleinput。转变,ALT, 控件和其他状态键从中的此函数返回 dwcontrolkeystate.pdc_get_bios_键报告按下的键使用 两个kptab表(kptab和ext_kptab),因此如果组合不是 在桌子上,你可能没有看到它。您可以添加一些 如果缺少某些内容,则为表定义。还有一些密码 在设置状态的相同程序中(按钮移位、按钮控制, 按钮“alt”),但这似乎是用于鼠标输入。所以你可以查一下 鼠标状态结构中的这些键。这只适用于 Windows实现。每个平台都有独特的方法 按了哪些键。

    在16位DOS中,我经常更改移位、大写锁定和num锁定的状态。 通过更改十六进制417地址的设置。这只适用于真正的 模式程序。许多新的Windows编译器甚至不允许您 使用更多功能直接访问BIOS或内存。16位 位于Hex 417和Hex 418处的位置表示右移已经 通过设置417地址的最高位,左移位,按下 通过设置 下一个最高点和下一个最高点之后的alt键。418 地址保持左右alt和 已按下控制键。

    似乎您可能需要对 特别版的诅咒来得到你想要的。诅咒是一种 非常可移植的用户界面,因此它通常支持最低的公共 某些平台上的特性分母。

    顺便说一下,我记得我读到有一个新的 包含国际字符支持的Curses标准。有人吗 听到关于这项努力的进一步消息了吗?

    最美好的祝福。

    劳拉迈克尔斯 http://www.distasis.com

    看起来我需要自己做键盘解码。