庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>操作系统>Linux>编程开发>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

Linux程式设计入门 - termios/keymap/terminal program

 作者:本站收集   日期:2005-4-13
字号选择〖 〗/ 双击滚屏 单击停止   
  termios

inttcgetattr(intfd,structtermios*termios_p);
inttcsetattr(intfd,intoptional_actions,conststructtermios
*termios_p);

keymap

我写了一个小程式来专门处理Linux上的keymap,keymap.h及keymap.c。在LinuxTerminal上,如果您想要设定某些按键返回特定值,您会需要用到以下这些技巧

设定keymap

#include<linux/kd.h>
#include<linux/keyboard.h>
voidsetkeymap(void)

{

structkbentryKEYMAP;

KEYMAP.kb_table=STATE;

KEYMAP.kb_index=SCANCODE;

KEYMAP.kb_value=VALUE;

ioctl(console,KDSKBENT,&KEYMAP);

}


STATE为状态键组合

/usr/include/linux/keyboard.h中


#defineKG_SHIFT0

#defineKG_CTRL2

#defineKG_ALT3

#defineKG_ALTGR1

#defineKG_SHIFTL4

#defineKG_SHIFTR5

#defineKG_CTRLL6

#defineKG_CTRLR7

#defineKG_CAPSSHIFT8


使用方式如:

#defineKST_CTRL(1<<KG_CTRL)

#defineKST_ALT(1<<KG_ALT)

#defineKST_SHIFT(1<<KG_SHIFT)

#defineKST_CTRL_ALT(KST_CTRL|KST_ALT)

#defineKST_ALT_SHIFT(KST_ALT|KST_SHIFT)


SCANCODE为键盘扫描码


#defineSCAN_ESC0x01

#defineSCAN_10x02

#defineSCAN_20x03

#defineSCAN_30x04

#defineSCAN_40x05

#defineSCAN_50x06

#defineSCAN_60x07

#defineSCAN_70x08

#defineSCAN_80x09

#defineSCAN_90x0A

#defineSCAN_00x0B

#defineSCAN_MINUS0x0C

#defineSCAN_PLUS0x0D

#defineSCAN_BACK0x0E

#defineSCAN_TAB0x0F

#defineSCAN_Q0x10

#defineSCAN_W0x11

#defineSCAN_E0x12

#defineSCAN_R0x13

#defineSCAN_T0x14

#defineSCAN_Y0x15

#defineSCAN_U0x16

#defineSCAN_I0x17

#defineSCAN_O0x18

#defineSCAN_P0x19

#defineSCAN_LTQUOTE0x1A

#defineSCAN_RTQUOTE0x1B

#defineSCAN_ENTER0x1C

#defineSCAN_CTRL0x1D

#defineSCAN_A0x1E

#defineSCAN_S0x1F

#defineSCAN_D0x20

#defineSCAN_F0x21

#defineSCAN_G0x22

#defineSCAN_H0x23

#defineSCAN_J0x24

#defineSCAN_K0x25

#defineSCAN_L0x26

#defineSCAN_SPLIT0x27

#defineSCAN_QUOTE0x28

#defineSCAN_MARK0x29

#defineSCAN_LSHIFT0x2A

#defineSCAN_STAND0x2B

#defineSCAN_Z0x2C

#defineSCAN_X0x2D

#defineSCAN_C0x2E

#defineSCAN_V0x2F

#defineSCAN_B0x30

#defineSCAN_N0x31

#defineSCAN_M0x32

#defineSCAN_LSQUOTE0x33

#defineSCAN_RSQUOTE0x34

#defineSCAN_QUESTION0x35

#defineSCAN_RSHIFT0x36

#defineSCAN_PRTSCR0x37

#defineSCAN_ALT0x38

#defineSCAN_SPACE0x39

#defineSCAN_CAPSLOCK0x3A

#defineSCAN_F10x3B

#defineSCAN_F20x3C

#defineSCAN_F30x3D

#defineSCAN_F40x3E

#defineSCAN_F50x3F

#defineSCAN_F60x40

#defineSCAN_F70x41

#defineSCAN_F80x42

#defineSCAN_F90x43

#defineSCAN_F100x44

#defineSCAN_NUMLOCK0x45


#defineSCAN_HOME0x47

#defineSCAN_UP0x48

#defineSCAN_PGUP0x49

#defineSCAN_LEFT0x4B


#defineSCAN_RIGHT0x4D


#defineSCAN_END0x4F

#defineSCAN_DOWN0x50

#defineSCAN_PGDN0x51

#defineSCAN_INSERT0x52

#defineSCAN_DELETE0x53

#defineSCAN_F110x85

#defineSCAN_F120x86


/usr/include/linux/kd.h中


structkbentry{

unsignedcharkb_table;

unsignedcharkb_index;

unsignedshortkb_value;

};


#defineKDGKBENT0x4B46/*getsoneentryintranslation

table*/

#defineKDSKBENT0x4B47/*setsoneentryintranslation

table*/


而console为

console=open("/dev/console",O_RDWR);


读取按键


read(console,&c,sizeof(char));



terminalprogramming


term.h/term.c是我写来专门处理一些小型的互动界面程式。


Terminal指令集


设定颜色:\033〔colorm

其中color可以是以下的值


0:ResetColorAttributes

1:boldon

2:boldoff

4:underlineon

5:blinkon

7:reverseon

21/22:boldnormal

24:underlineoff

25:blinkoff

27:reverseoff


30:前景,黑色

31:前景,红色

32:前景,绿色

33:前景,黄色

34:前景,篮色

35:前景,紫色

36:前景,青色

37:前景,白色

40:背景,黑色

41:背景,红色

42:背景,绿色

43:背景,黄色

44:背景,篮色

45:背景,紫色

46:背景,青色

47:背景,白色


清除萤幕:\033c


设定水平游标位置:\033〔XG

X为水平游标位置。


设定垂直游标位置:\033〔Xd

Y为垂直游标位置。


\033〔YA

Current_Cursor_Y-=Y


\033〔YB或\033〔Ye

Current_Cursor_Y+=Y


\033〔XC或\033〔Xa

Current_Cursor_X+=X


\033〔XD

Current_Cursor_X-=X


\033〔YE

gotoxy(0,Current_Cursor_Y+Y)


\033〔YF

gotoxy(0,Current_Cursor_Y-Y)


\033〔Y;XH

gotoxy(X,Y);


\033〔0K:删除从游标到该行结尾

\033〔1K:删除从该行开始到游标处

\033〔2K:删除整行


\033〔0J:删除游标到萤幕结尾

\033〔1J:删除从萤幕开始到游标处

\033〔2J:删除整个萤幕


\033〔N@:insertNchar

\033〔P:deletechar

\033〔M:deleteline

\033〔L:insertline

\033〔s:savecursorposition

\033〔u:restorecursorposition


\033E:carry;linefeed

\033M:Current_Cursor_Y-1

\033D:linefeed
上一篇:Linux程式设计入门 fork/pthread/signals    下一篇:Linux程式设计入门 - SVGALIB  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-4-13
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿