我正在开发一个简单的控制台应用程序,让我的脚再次被诅咒弄湿。我在将我的应用程序从 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 下运行它时,我从 DOWNARROW 后跟 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 可能是标准转义序列之一。我希望 curses 将其映射到单个值。XP 端在 curses.h 文件中定义了一个 CTL_DOWN。AIX 端没有。
所以我的问题是
它们是我在这里错过的一些咒语吗,它会神奇地将这三个字符映射成一个很好的唯一整数?还是我必须编写某种类来处理将平台特定的击键隐藏到我的真实应用程序可以使用的东西中?
由于搜索 AIX 在线资料,我的眼睛充满了血丝。任何帮助我指出正确方向的帮助将不胜感激。
其他随机信息
我正在运行 xp pro,带有最新的服务包 msvc 6,带有服务包 6。curses 库是 pdcurses
另一个编译器是 IBM XL C/C++ ENTERPRISE EDITION V8.0 编译使用
xlc++ -g app.cpp -lcurses
我在 pc 上使用 pdcurses33,在 AIX 上使用本机 curses。