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

前言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 regex133

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

A.2.9.2 readfile133

A.2.10 描述字134

A.2.9.4 if then else134

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:映射到一个物理屏幕的多个窗口和pad191

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_term270

10.11.5.1 函数set_menu_init270

10.11.5.2 函数set_item_init270

10.11.5.3 函数set_item_term270

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_ALPHA293

11.5.5.2 TYPE_ALNUM294

11.5.5.3 TYPE_ENUM294

11.5.5.4 TYPE_INTEGER295

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

11.5.5.5 TYPE_NUMERIC296

11.5.6 对齐字段中的数据297

11.5.5.6 TYPE_REGEXP297

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_HEX344

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

第十三章 terminfo353

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

1992《UNIX系统V第4版 程序员指南:字符用户界面 FMLI与FTI Programmer's guide:character user interface FMLI and ETI》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由钟宁等译校 1992 北京:电子工业出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。