《UNIX系统V第4版 程序员指南:字符用户界面 FMLI与FTI Programmer's guide:character user interface FMLI and ETI》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:钟宁等译校
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1992
  • ISBN:7505315536
  • 页数:567 页
图书介绍:

前言 1

0.1 有关文档及培训课程 1

目录 1

0.1.3 如何订购其它参考书 2

0.1.2 有关UNIX系统shell及C编程的书目 2

0.1.1 有关字符用户界面的其它书目 2

0.2 如何对本指南提出意见 3

0.1.4 培训课程 3

Ⅰ.1.2 本指南的组织 5

Ⅰ.1.1 本指南的读者 5

第一篇 程序员指南:字符用户界面(FMLI) 5

有关本指南 5

Ⅰ.1 简介 5

Ⅰ.1.3 本指南使用的印刷符号约定 6

1.2 什么是FMLI? 9

1.1 简介 9

第一章 FMLI引论 9

图1-1:FMLI屏幕 10

1.2.1 屏幕布局 10

1.2.2 画面 11

1.3.1.1 菜单画面 12

1.3 用FMLI编程 12

1.3.1 画面定义文件 12

1.3.1.2 表格画面 13

1.3.3 终端独立性 14

1.3.1.3 正文画面 14

1.3.2 应用层定义文件 14

1.3.2.1 初始化文件 14

1.3.2.2 命令文件 14

1.3.2.3 别名文件 14

1.4 应用程序示例 15

1.3.3.1 异常中止后的恢复 15

图1-3:Text·welcome:一个正文画面定义文件 16

图1-2:Menu·sample:一个简单的菜单画面定义文件 16

1.5 使用FMLI应用程序 17

图1-4:Menu·sample:屏幕输出 18

1.5.1 命名键及替代的击键 19

1.5.2 游动 19

1.5.2.1 在菜单画面内游动 19

1.5.2.2 选择菜单项 20

1.5.2.3 在正文画面内游动 21

1.5.2.4 在画面之间游动 21

图1-5:Menu·Sample:选择welcome之后的屏幕输出 21

1.5.3 执行命令 22

1.5.3.1 命令菜单 22

1.5.3.2 命令行 23

1.5.3.4 联机帮助 24

1.5.3.5 访问UNIX系统 24

1.5.3.3 标记屏幕的功能键 24

2.1 简介 27

2.2.2 注释 27

2.2 句法、规则及约定 27

第二章 表格和菜单语言 27

2.2.1 画面定义文件的命名约定 27

2.2.3 区分大小写 28

2.2.4 类型强制 28

2.2.4.1 文件类型强制 28

2.2.4.2 改变描述字赋值次数的类型强制 28

2.2.5 特殊字符 29

2.2.6 引括机制 30

2.2.7 反引括表达式 30

2.2.8 文件改向 31

2.2.9 语法错误 31

2.2.7.1 表达式算符 31

2.3.1 用户定义的变量 32

2.3.2 内部变量 32

2.3 变量 32

2.3.2.1 变量赋值 33

2.4 描述字 35

2.4.1 描述字类型 35

2.4.2 画面定义文件描述字 36

2.4.2.1 菜单描述字 36

表2-1:用于菜单定义文件的画面描述字 37

表2-2:用于菜单定义文件的项描述字 37

2.4.2.2 表格描述字 38

表2-3:用于菜单定义文件的SLK描述字 38

表2-4:用于表格定义文件的画面描述字 38

表2-5:用于表格定义文件的字段描述字 39

表2-6:用于表格定义文件的SLK描述字 40

2.4.2.3 正文画面描述字 40

表2-7:用于正文画面定义文件的画面描述字 40

表2-8:用于正文画面定义文件的SLK描述字 41

2.4.3 应用层文件描述字 41

表2-9:用于初始化文件的介绍性画面描述字 42

2.4.3.1 初始化文件描述字 42

表2-10:用于初始化文件的标题行描述字 43

表2-11:用于初始化文件的一般描述字 43

表2-13:用于初始化文件的应用程序SLK描述字 44

表2-12:初始化文件的色彩描述字 44

2.4.3.2 应用程序SLK描述字 44

2.5 FMLI命令 45

表2-14:命令文件描述字 45

2.4.3.3 命令文件描述字 45

2.5.1 FMLI命令:句法和应用 46

图2-1:命令菜单的FMIL命令的默认设置 50

图2-2:FMLI命令对功能键的默认设置 50

2.5.2 用户访问FMLI命令 50

2.6 内部实用程序 51

2.6.1 内部实用程序概述 51

2.7 条件语句 53

2.8 中断信号处理 54

2.9 终端显示属性 56

图2-3:用于决定按下中断键时,interrupt和Oninterrupt值的继承层次 56

表2-15:对应显示属性的FMLI字符序列表 57

表2-16:替代的字符集 57

2.9.1 使用替代的字符集 57

3.2 菜单画面描述字 59

第三章 画面定义文件 59

3.1 简介 59

3.2.1 菜单的画面描述字 60

3.2.2 菜单的项描述字 64

3.3 菜单定义文件的示例 65

3.3.1 定义简单菜单 65

图3-1:Menu·items:有关菜单项描述字的一个示例 66

图3-2:Menu·items:屏幕输出 66

图3-3:Menu·frame:有关菜单画面描述字的一个示例 67

3.3.2 创建多列和可滚动的菜单 68

图3-4:Menu·frame:屏幕输出 68

图3-5:Menu·rows:有关可滚动菜单的一个示例 68

图3-6:Menu·rows:屏幕输出 69

图3-7:Menu·columns:有关两列菜单的一个示例 69

3.3.3 使用reread描述字 70

图3-9:Menu·reread:一个动态更改菜单的示例 70

图3-8:Menu·columns:屏幕输出 70

图3-11:Menu·reread:出现一个SIGALRM之后的屏幕输出 71

图3-10:Menu·reread:屏幕输出 71

图3-12:Menu·interrupt:有关中断信号处理的一个示例 72

3.3.4 使用interrupt和oninterrupt描述字 72

图3-13:Menu·oninterr:有关中断处理的又一个示例 73

图3-14:Menu·descrip:有关description描述字的一个示例 73

3.3.5 为菜单项提供补充信息 73

3.3.6 显示项消息 74

图3-15:Menu·descrip:屏幕输出 74

图3-16:Menu·itemmsg:有关itemmsg描述字的一个示例 75

图3-17:Menu·itemmsg:屏幕输出 75

图3-18:Menu·show:有关show描述字的一个示例 76

3.3.7 使用show描述字 76

图3-19:Menu·show:屏幕输出 77

图3-20:Menu·edit:一个动态创建菜单的示例 77

3.3.8 创建动态菜单 77

图3-21:Menu·edit:屏幕输出 78

图3-22:Menu·dynamic:一个动态创建菜单的示例 78

3.4 表格的画面描述字 79

图3-23:Menu·edit:选择Menu Files时的屏幕输出 79

3.4.1 表格的画面描述字 80

3.4.2 字段描述字 83

3.5.1 把用户的输入存入表格 88

3.5 表格定义文件的示例 88

图3-24:Form·addr:有关表格的一个示例 89

图3-25:Form·addr:屏幕输出 90

图3-27:Addr·file:用户保存该表格之后的内容 91

3.5.2 验证表格字段 91

图3-26:Form·addr:用户填完表后的屏幕输出 91

图3-29:Form·6choices:有关选择菜单的一个示例 92

图3-28:Form·3choices:用menuonly描述字进行字段验证的一个示例 92

图3-30:Form·6choices:屏幕输出 93

3.5.3 用valid描述字验证一个字段值的示例 94

图3-31:Form·6choices:在用户从选择菜单中选择了一个项之后的屏幕输出 94

图3-32:Form·valid:使用valid描述字进行字段验证的一个示例 94

3.6 正文画面描述字 95

3.6.1 正文画面描述字 96

图3-33:Text·USA:有关正文画面的一个示例 99

3.7 正文画面定义文件的示例 99

3.7.1 定义正文画面的属性 99

图3-35:Text·readfile:在一个正文画面中使用readfile和longline的一个示例 100

3.7.2 用readfile和longline定义正文画面 100

图3-34:Text·USA:屏幕输出 100

3.7.3 使用正文画面头及终端属性 101

图3-36:Text·header:有关正文画面头的一个示例 101

图3-37:Text·header:屏幕输出 102

3.8 其他一些有用的示例 102

图3-38:Menu·lininfo:一个用LININFO定义帮助信息的示例 102

3.8.1 为菜单或表格字段定义求助画面 102

图3-39:Text·get-help:有关帮助正文画面的一个示例 103

图3-40:Text·item2:有关帮助正文画面的一个示例 103

图3-42:Menu·lininfo:屏幕输出 104

图3-41:Text·item3:有关帮助正文画面的一个示例 104

图3-43:Menu·lininfo:对项1求助之后的屏幕输出 105

图3-44:Menu·lininfo:对项2求助之后的屏幕输出 105

3.8.2 使用合作处理实用程序 105

图3-45:Menu·talk:有关合作处理的一个示例 106

图3-47:talk:有关合作进程的一个示例 107

图3-46:Form·talk:有关合作处理的一个示例 107

第四章 应用层定义文件 109

4.1 简介 109

4.2 初始化文件 109

4.2.1 介绍性画面描述字 110

4.2.2.1 标题行的示范定义 111

4.2.1.1 介绍性画面的示范定义 111

4.2.2 标题行描述字 111

4.2.3 色彩属性描述字 112

4.2.3.1 定义色彩属性的示例 113

4.2.4 一般的应用程序描述字 114

4.2.5 标记屏幕的功能键描述字 116

图4-1:将FMII命令指派给功能键的默认方式 117

4.2.5.1 标记屏幕的功能键的示范定义 118

4.3 命令文件 119

4.3.1 命令描述字 119

4.3.1.2 禁用已存的FMLI命令的示例 120

4.4 别名文件 120

4.3.1.1 增加针对应用程序的命令的示例 120

4.4.1 增加路径别名的示例 121

4.5 fmli命令句法 121

附录A 编程建议及已知的问题 123

A.1 编程建议 123

A.1.1 自动的功能键下行装入 123

A.1.2 表格字段的验证 124

A.1.2.1 相互依赖字段的验证 124

A.1.2.2 使用跨画面的全局变量 125

A.1.3 命令 125

A.1.5 表格 126

A.1.6 菜单 126

A.1.4 合作处理 126

A.1.7 正文 128

A.1.8 反引括表达式 128

A.1.9 色彩 129

A.1.10 消息行 129

A.1.11 语法 129

A.1.12 杂项 129

A.2.2 屏幕呈现 130

A.2.1 初始化 130

A.2 已知的问题 130

A.2.3 消息行 130

A.2.4 命令行 130

A.2.6.2 表格字段的验证 131

A.2.5 标记屏幕的功能键 131

A.2.6.3 水平可滚动的表格字段 131

A.2.6.4 表格的其他问题 131

A.2.6 表格 131

A.2.6.1 多页表格 131

A.2.7 正文画面 132

A.2.8 命令 132

A.2.9 内部实用程序 133

A.2.9.1 regex 133

A.2.9.3 合作处理实用程序 133

A.2.9.2 readfile 133

A.2.10 描述字 134

A.2.9.4 if then else 134

A.2.9.5 其他的内部实用程序问题 134

A.2.12 杂项 135

A.2.11 中断设施 135

附录B 命名键及替代的击键 137

附录C FMLI手册页 143

词汇表 171

5.1 概述 179

第二篇 程序员指南:字符用户界面(ETI) 179

第五章 ETI引论 179

5.1.1 本指南的组织 179

5.1.2 本文档中使用的约定 180

5.2 什么是ETI? 181

5.2.1 ETI库 181

图5-1:一个简单的ETI程序 182

5.2.2 ETI/terminfo的连接 182

图5-2:屏幕管理系统的组成 183

5.2.3 屏幕管理系统的其余部分 183

第六章 基本的ETI程序设计 185

6.1 简介 185

6.2 每个ETI程序需要什么 185

6.2.1 前导文件 185

6.2.2 例程initscr(),refresh(),endwin() 186

图6-1:在程序中应用initscr()、refresh()、以及endwin()的意图 186

6.3 编译ETI程序 187

6.3.1 使用TAM变换库 187

6.4 运行ETI程序 188

6.5 有关initsrc()行数和列数的详情 188

6.5 有关refresh()以及窗口的详情 189

图6-2:stdscr和终端屏幕的关系(之一) 189

6.5.1 充填 190

图6-3:stdscr和终端屏幕的关系(之二) 190

图6-4:映射到一个物理屏幕的多个窗口和pad 191

7.2 输出 193

7.1 简介 193

7.2.1 addch() 193

第七章 简单的输入和输出 193

7.2.2 addstr() 194

7.2.3 printw() 195

7.2.4 move() 196

7.2.5 clear()和erase() 197

7.2.6 clrtoeol()和clrtobot() 198

7.3 输入 199

7.3.1 getch() 199

7.3.2 getstr() 201

7.3.3 scanw() 202

7.4 输出属性 203

7.4.1 attron(),attrset()和attroff() 204

7.4.2 standout()和standend() 205

7.4.3 色彩处理 205

7.4.3.1 色彩特征是如何起作用的 205

图7-1:默认的色彩表 206

图7-2:一个色彩对表的示例 207

7.4.3.4 可移植性准则 208

7.4.3.2 使用COLOR_PAIR(n)属性 208

7.4.3.3 改变色彩的定义 208

7.4.3.5 其他的宏和例程 209

7.4.3.6 start_color() 210

7.4.3.7 init_pair() 210

7.4.3.8 init_color() 211

7.5 响铃、振鸣以及光闪烁:beap()和flash() 212

7.6 输入选项 212

图7-3:ETI程序的输入选项设置 213

7.6.1 echo()和noecho() 214

7.6.2 cbreak()和nocbreak() 214

8.2 输出和输入 217

第八章 窗口 217

8.1 简介 217

8.3 例程wnoutrefresh()和doupdate() 218

图8-1:使用wnoutrefresh()和doupdate() 218

图8-2:窗口和终端屏幕的关系(之一) 219

图8-3:窗口和终端屏幕的关系(之二) 220

图8-4:窗口和终端屏幕的关系(之三) 221

8.4 新窗口 221

8.4.1 newwin() 222

8.4.2 subwin() 222

8.5 ETI与高级函数的低级界面(curses) 223

图8-5:低层ETI(cunes)界面的示范例程 224

9.2 编译和连接面板程序 225

9.3 创建面板 225

第九章 面板 225

9.1 简介 225

9.4 基本面板窗口操作 226

9.4.1 获取面板窗口指针 226

9.4.2 改变面板窗口 227

9.4.3 在屏幕上移动面板窗口 227

9.6 更新屏幕上的面板 228

9.5 将面板移至舱面的顶部或底部 228

9.7.1 隐藏面板 229

9.7 使面板不可见 229

9.7.1.1 核实面板是否已被隐藏 230

9.7.2 恢复面板 230

9.8 获取给定面板之上或之下的面板 231

9.9 设置和获取面板用户指针 232

图9-1:使用面板用户指针的示例 233

9.10 删除面板 234

10.1 简介 235

图10-1:一个样本菜单 235

10.2 编译和连接菜单程序 235

10.3 用ETI编写菜单程序概述 235

第十章 菜单 235

10.3.3 菜单程序样本 236

10.3.1 一些重要的菜单术语 236

10.3.2 菜单应用程序所做的事情 236

图10-2:用ETI创建菜单的样本菜单程序 237

10.4 创建和释放菜单项 238

图10-3:创建一个项数组 239

10.5 两种菜单:单值菜单和多值菜单 240

10.5.1 在多值菜单中操纵项的选择值 240

10.6.2 设置项的选项 241

10.6 操纵项属性 241

图10-4:在菜单处理中使用item_value() 241

10.6.1 获取项名及说明 241

10.6.3 核实项的可见性 243

10.6.4 改变项属性的当前默认值 244

10.7 设置项的用户指针 244

图10-5:使用项用户指针 245

10.8 创建和释放菜单 246

10.9.1 获取和改变菜单项 247

10.9 操纵菜单属性 247

图10-6:改变和菜单相关联的项 248

10.9.2 计算菜单项的数目 248

10.10.1 决定菜单的大小 249

10.9.3 改变菜单属性的当前默认值 249

10.10 显示菜单 249

10.10.1.1 规定菜单格式 250

图10-8:菜单格式(3,2)的示例 251

图10-7:菜单格式(2,2)的示例 251

10.10.1.2 改变菜单的标记串 252

图10-9:菜单格式(4,3)的示例 252

10.10.1.3 查询菜单大小 254

10.10.2 将窗口和子窗口和菜单相联 254

图10-10:菜单函数写入子窗口,应用程序写入窗口 255

10.10.3 获取和改变菜单的显示属性 256

图10-11:创建一个带有边界的菜单 256

10.10.4 安置和撤除菜单 258

图10-12:显示和抹掉菜单的样本例程 259

10.11 菜单驱动程序处理 260

图10-13:将键翻译成菜单请求的样本例程 261

10.11.1 定义键虚拟化的对应 261

10.11.2.1 项游动请求 262

10.11.2 ETI菜单请求 262

10.11.2.5 模式缓冲区请求 263

10.11.2.3 菜单滚动请求 263

10.11.2.2 定向的项游动请求 263

10.11.2.4 多值菜单选择请求 263

10.11.3 应用程序定义的命令 264

10.11.4 调用菜单驱动程序 265

图10-15:菜单输出举例(2) 265

图10-14:ETI键值的整数范围和MENU请求 265

图10-16:调用菜单驱动程序的样本程序 266

10.11.5 建立项和菜单初始化和终止例程 269

10.11.5.4 函数set_menu_term 270

10.11.5.1 函数set_menu_init 270

10.11.5.2 函数set_item_init 270

10.11.5.3 函数set_item_term 270

10.11.6 获取和改变当前项 271

图10-17:使用一个初始化例程来产生项的提示符 271

10.11.7 获取和改变顶行 273

10.11.8 定位菜单光标 274

图10-18:将光标返回到菜单驱动程序处理的正确位置 274

10.11.9 改变和获取模式缓冲区 274

10.12 操纵菜单用户指针 275

图10-19:设置和使用菜单用户指针示例 276

10.13 设置和获取菜单选项 277

11.2 编译和连接表格程序 281

11.3.1 一些重要的表格术语 281

11.1 简介 281

11.3 用ETI编写表格程序的概述 281

第十一章 表格 281

图11-1:表格显示的样本 281

11.3.2 典型的表格应用程序做些什么 282

11.3.3 表格应用程序样本 282

图11-2:生成表格样本的代码 283

11.4 创建和释放字段 286

11.5.1 获取字段大小和位置信息 288

11.5 操纵字段属性 288

11.5.2 动态可增长的字段 289

11.5.3 移动一个字段 291

图11-3:按给定的行数移动所有表格字段 292

11.5.4 改变字段属性的当前默认值 292

11.5.5 设置字段类型以保证合法性 292

11.5.5.1 TYPE_ALPHA 293

11.5.5.2 TYPE_ALNUM 294

11.5.5.3 TYPE_ENUM 294

11.5.5.4 TYPE_INTEGER 295

图11-4:将一个字段设置为颜色的TYPE_ENOM 295

11.5.5.5 TYPE_NUMERIC 296

11.5.6 对齐字段中的数据 297

11.5.5.6 TYPE_REGEXP 297

11.6 设置字段前景、背景和填充字符 298

11.7 某些有帮助的字段特点 300

11.7.1 设置和读取字段缓冲区 300

11.7.2 设置和读取字段状态 301

11.7.3 设置和获取字段用户指针 302

图11-5:使用字段状态来更新数据库 302

图11-6:使用字段用户指针来匹配项 303

11.8 操纵字段选项 304

11.9 创建和释放表格 307

11.10 操纵表格属性 308

图11-7:创建一个表格 308

11.10.1 改变和获取已有表格上的字段 309

11.10.2 计算字段的数目 310

11.10.4 改变ETI表格默认属性 311

11.11 显示表格 311

11.10.3 查询脱屏数据的存在 311

11.11.1 决定表格的尺寸 312

11.11.1.1 确定表格的尺度 312

11.11.2 使窗口和子窗口与一个表格相关联 313

图11-9:在一个表格周围创建边界 314

图11-8:表格函数写入子窗口,应用程序写入窗口 314

11.11.3 安置和撤除表格 315

图11-10:安置和撤除表格 316

11.12 表格驱动程序处理 317

11.12.1 定义虚拟键映射 317

图11-11:键虚拟化例程样本 318

11.12.2 ETI表格请求 320

11.12.2.1 页游动请求 320

11.12.2.2 当前页上的字段间游动请求 320

11.12.2.3 字段内的游动请求 321

11.12.2.4 字段编辑请求 322

11.12.2.5 滚动请求 323

11.12.2.7 选择请求 324

11.12.3 应用程序定义的命令 324

11.12.2.6 字段合法化请求 324

11.12.4 调用表格驱动程序 324

图11-12:赛马表格输出 325

图11-13:表格驱动程序的用法示例 325

11.12.5 建立字段和表格初始化和终止例程 329

11.12.5.2 set_field_init()函数 330

11.12.5.4 set_form_term()函数 330

11.12.5.3 set_field_term()函数 330

11.12.5.1 set_form_init()函数 330

图11-14:更新一列总数的终止例程样本 331

11.12.6 操纵当前字段 332

图11-15:增亮当前字段的字段初始化和终止例程 332

图11-16:操纵当前字段示例 333

图11-17:改变和核实表格页数的示例 334

11.12.7 改变表格页 334

11.12.8 定位表格光标 335

图11-18:在打印页号后重新定位光标 335

图11-19:使用表格用户指针的模式匹配 336

11.13 设置和获取表格用户指针 336

11.14 设置和获取表格选项 337

11.15.1 从另两个字段类型建造一个字段类型 339

11.15 创建和操纵程度员定义的字段类型 339

11.15.2 用合法化函数创建一个字段类型 340

图11-20:创建程序员定义的字段类型 341

11.15.4 支持程序员定义的字段类型 342

11.15.3 释放程序员定义的字段类型 342

11.15.4.1 字段类型的实参支持 343

图11-21:创建带有填充和范围实参的TYPE_HEX 344

11.15.4.2 支持下一个以及先前的选择函数 346

图11-22:创建字段类型的下一个选择函数 347

12.2 画线条或其它图形的例程 349

12.1 简介 349

第十二章 其它ETI例程 349

12.3 使用软标号的例程 350

12.4 用多个终端进行工作 351

图12-1:向几个终端发送消息 352

13.1.1 本章的组织 353

13.1 简介 353

第十三章 terminfo 353

13.1.2 terminfo是什么 353

13.2 用terminfo例程进行工作 354

13.2.1 每个terminfo程序需要什么 354

图13-1:使用terminfo例程的shell脚本 354

图13-2:terminfo程序的典型画面 355

13.2.2 编译和运行terminfo程序 355

13.2.3 terminfo程序示例 355

图13-3:terminfo程序示例 356

13.3 用terminfo数据库进行工作 358

13.3.1 编写终端说明 358

13.3.1.1 命名终端 359

13.3.1.2 了解终端能力 359

13.3.1.3 说明终端能力 360

13.3.1.4 编译终端说明 363

13.3.1.5 测试终端说明 364

13.3.2 比较或显示terminfo说明 365

13.3.3 将termcap说明转换为terminfo说明 365

D.2 在ETI下编译和运行TAM应用程序 367

D.1 简介 367

附录D TAM变换库 367

D.3 完善在ETI下运行的TAM应用程序的提示 368

D.4 TAM变换库如何工作 368

图D-1:从TAM到ETI函数调用的转换 368

D.4.1 TAM调用到ETI调用的转换 368

图D-2:TAM高级函数 371

图D-3:在TAM转义序列和虚拟键值之间进行转换 371

D.4.2 TAM变换键盘子系统 371

附录E ETI程序示例 375

E.1.1 editor程序 375

E.1 程序示例 375

E.1.2 higldight程序 379

E.1.3 Scatter程序 381

E.1.4 show程序 382

E.1.5 two程序 384

E.1.6 window程序 386

E.1.7 clors程序 387

附录F ETI手册页 389