Saturday, November 15, 2008

readline库的使用

我们的mmi 测试代码部分,有的是基于命令行测试的,没有提供自动补充与历史记录功能,真是难用。想起之前看过lmaze的代码,也用readline,今天加班时间,正好可以用来研究一下这个readline库的使用。编译了一下,运行一下readline example里的例子程序,还不错。移植到我们的代码,编译时发现:

In file included from /home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:38,
from main.c:8:
/home/deli/work/pcemu/broncho/usr/local/include/readline/rltypedefs.h:65: 错误:expected ‘)’ before ‘*’ token
In file included from main.c:8:
/home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:416: 错误:expected ‘)’ before ‘*’ token
/home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:532: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:533: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:555: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/home/deli/work/pcemu/broncho/usr/local/include/readline/readline.h:827: 错误:expected specifier-qualifier-list before ‘FILE’

真令人揪心啊,还好有Google,一下子就弄过来,包含 rltypedefs.h 这个头文件之前,先包含 #include <stdio.h>,不然就出现上面的错误。我们的mmi测试代码写得很乱,于是我决心自己写一下,用了readline库,感觉好多了,代码清晰,不像以前拐来拐去的。

安装readline 前,先装termcap这个库,pc机安装一般不会出现什么问题。在我们的模拟器上,当编译到readline时,出现了一些错误,就把PC这个字符串注释掉,
[deli@localhost readline-5.2]$ diff terminal.c /root/Desktop/readline-5.2/terminal.c
498c498
< /* PC = '\0';*/
---
> PC = '\0';
509c509
< /* PC = _rl_term_pc ? *_rl_term_pc : 0;*/
---
> PC = _rl_term_pc ? *_rl_term_pc : 0;

不知道何原因,有空再去研究。

No comments: