第Ⅰ部分 Tcl语言 3
第1章 Tcl和Tk概览 3
1.1 从这里起步 3
1.2 用Tk编写“Hello,world!”程序 5
1.3 脚本文件 7
1.3.1 在Unix和Mac OS X中运行脚本 7
1.3.2 在Windows中执行脚本 8
1.3.3 在交互式解释器中运行脚本 8
1.4 变量与替换 8
1.5 控制结构 9
1.6 关于Tcl语言 11
1.7 事件绑定 12
1.8 Tcl和Tk的更多功能 14
第2章 Tcl语言的语法 16
2.1 脚本、命令和单词 16
2.2 处理命令 16
2.3 变量替换 18
2.4 命令替换 19
2.5 反斜线替换 20
2.6 双引号引用 21
2.7 大括号引用 22
2.8 参数展开 24
2.9 注释 25
2.10 正常返回和异常返回 26
2.11 有关替换的更多信息 27
第3章 变量 29
3.1 本章出现的命令 29
3.2 简单变量和set命令 30
3.3 Tcl的内部数据存储 30
3.4 数组 31
3.5 变量替换 32
3.6 多维数组 33
3.7 查询数组的元素 34
3.8 incr命令和append命令 35
3.9 移除变量:unset和array unset 36
3.10 预定义变量 36
3.11 其他变量功能预览 37
第4章 表达式 38
4.1 本章出现的命令 38
4.2 数值操作数 38
4.3 操作符及其优先级 39
4.3.1 算术操作符 40
4.3.2 关系操作符 40
4.3.3 逻辑操作符 41
4.3.4 按位操作符 41
4.3.5 选择操作符 41
4.4 数学函数 42
4.5 替换 43
4.6 字符串操作 44
4.7 列表操作 45
4.8 类型与转换 46
4.9 精度 46
第5章 字符串操作 47
5.1 本章出现的命令 47
5.2 取得字符:string index和string range 50
5.3 长度、大小写转换、裁剪以及重复 50
5.4 简单搜索 51
5.5 字符串比较 51
5.6 字符串置换 52
5.7 确定字符串类型 53
5.8 用format创建字符串 54
5.9 用scan解析字符串 56
5.10 通配符样式的模式匹配 57
5.11 使用正则表达式进行模式匹配 58
5.11.1 正则表达式的原子 58
5.11.2 正则表达式的分支和量词 61
5.11.3 逆向引用 62
5.11.4 非捕获子表达式 62
5.11.5 regexp命令 62
5.12 使用正则表达式进行替换 63
5.13 字符集专题 64
5.13.1 字符编码和操作系统 65
5.13.2 编码和通道输入/输出 65
5.13.3 转化字符串的编码格式 66
5.14 消息目录 66
5.14.1 使用消息目录 66
5.14.2 创建本地消息文件 67
5.14.3 在源字符串和翻译字符串中使用转换符 68
5.14.4 在命名空间中使用消息目录 69
5.15 二进制字符串 69
第6章 列表 73
6.1 本章出现的命令 73
6.2 基本列表结构与lindex和llength命令 74
6.3 创建列表:list、concat和lrepeat 76
6.4 修改列表:lrange、linsert、lreplace、lset和lappend 77
6.5 从列表中取得元素:lassign 79
6.6 搜索列表:lsearch 79
6.7 排序列表:lsort 80
6.8 在字符串和列表之间转化:split与join 81
6.9 用列表创建命令 82
第7章 字典 84
7.1 本章出现的命令 84
7.2 基本字典结构与dict get命令 86
7.3 创建和更新字典 88
7.4 检测字典:子命令size、exists、keys和for 89
7.5 更新字典中的值 90
7.6 使用嵌套字典 92
第8章 流程控制 96
8.1 本章出现的命令 96
8.2 if命令 97
8.3 switch命令 98
8.4 循环命令:while、for和foreach 100
8.5 循环控制:break与continue 101
8.6 eval命令 102
8.7 从文件运行:source 103
第9章 过程 104
9.1 本章出现的命令 104
9.2 过程基础:proc与return 105
9.3 局部和全局变量 106
9.4 参数变量的数目和默认设置 106
9.5 传引用调用:upvar 107
9.6 创建新的控制结构:uplevel 109
9.7 应用匿名过程 110
第10章 命名空间 112
10.1 本章出现的命令 112
10.2 在命名空间中处理Tcl脚本 114
10.3 操作限定名称 116
10.4 在命名空间中导出和导入命令 117
10.5 检查命名空间 118
10.6 有关集合命令 119
10.6.1 基本的集合命令 119
10.6.2 在集合命令中设置集合命令 120
10.6.3 控制集合命令的设置 121
10.6.4 管理集合unknown子命令 121
10.7 访问其他命名空间的变量 123
10.8 名称解析路径的控制 124
第11章 访问文件 126
11.1 本章出现的命令 126
11.2 操纵文件和目录名 128
11.3 当前工作目录 130
11.4 列出目录的内容 130
11.5 处理磁盘上的文件 132
11.5.1 创建目录 132
11.5.2 删除文件 132
11.5.3 复制文件 133
11.5.4 重命名和移动文件 133
11.5.5 文件信息命令 134
11.5.6 处理名称怪异的文件 135
11.6 读写文件 135
11.6.1 基本文件I/O 135
11.6.2 输出缓冲区 137
11.6.3 处理各平台的行结束约定 137
11.6.4 管理字符编码集 139
11.6.5 处理二进制文件 139
11.6.6 随机访问文件 139
11.6.7 复制文件内容 140
11.7 虚拟文件系统 142
11.8 系统调用中的错误 143
第12章 进程间通信 144
12.1 本章出现的命令 144
12.2 用exit终止Tcl进程 145
12.3 用exec调用子进程 146
12.4 命令管线的输入输出 148
12.5 配置通道选项 149
12.5.1 通道阻塞模式 149
12.5.2 通道的缓冲模式 150
12.6 事件驱动的通道交互 150
12.6.1 用vwait进入Tcl事件循环 151
12.6.2 注册文件事件处理器 151
12.7 进程ID 153
12.8 环境变量 153
12.9 TCP/IP套接字通信 153
12.9.1 创建客户通信套接字 154
12.9.2 创建服务器套接字 155
12.10 向Tcl程序发送命令 157
12.10.1 send基础 157
12.10.2 应用程序名称 157
12.10.3 有关send的安全问题 158
第13章 错误与异常 159
13.1 本章山现的命令 159
13.2 在出现错误后会发生什么 160
13.3 由Tcl脚本生成错误 161
13.4 用catch捕获错误 161
13.5 异常概述 162
13.6 后台错误与bgerror 164
第14章 创建与使用Tcl脚本库 166
14.1 本章出现的命令 166
14.2 load命令 168
14.3 库的使用 168
14.4 自动加载 168
14.5 包 170
14.5.1 包的使用 170
14.5.2 包的创建 170
14.5.3 使用∷pkg∷create 172
14.5.4 包的安装 172
14.5.5 包的实用命令 172
14.6 Tcl模块 173
14.6.1 使用Tcl模块 173
14.6.2 安装Tcl模块 174
14.7 把脚本打包为Starkit 175
14.7.1 安装Tclkit 176
14.7.2 创建Starkit 176
14.7.3 创建平台相关的可执行文件 178
第15章 Tcl内部管理 179
15.1 本章出现的命令 179
15.2 时间延迟 183
15.3 时间和日期操作 184
15.3.1 产生可读的时间和日期字符串 184
15.3.2 扫描可读的时间和日期字符串 186
15.3.3 进行时间计算 187
15.4 运行计时命令 188
15.5 info命令 188
15.5.1 有关变量的信息 188
15.5.2 有关过程的信息 189
15.5.3 有关命令的信息 190
15.5.4 Tcl解释器版本及其他运行环境信息 191
15.6 对简单变量的跟踪操作 191
15.7 跟踪数组变量 194
15.8 重命名和删除命令 194
15.9 跟踪命令 195
15.10 未知命令 197
15.11 从解释器 198
15.11.1 命令别名 200
15.11.2 安全从解释器和隐藏命令 201
15.11.3 解释器之间的传输通道 202
15.11.4 为解释器设定限制 203
第16章 历史 205
16.1 本章出现的命令 205
16.2 历史列表 206
16.3 描述事件 206
16.4 从历史列表中再次执行命令 207
16.5 利用unknown实现的快捷方式 207
16.6 当前事件号:history nextid 208
第Ⅱ部分 编写Tk脚本 211
第17章 Tk入门 211
17.1 窗口系统简介 211
17.2 组件 213
17.3 应用、顶层组件和屏幕 214
17.4 脚本和事件 215
17.5 创建和删除组件 216
17.6 几何管理器 216
17.7 组件命令 217
17.8 互连命令 218
第18章 Tk组件概览 219
18.1 组件基础 219
18.2 框架 221
18.2.1 浮雕选项 221
18.2.2 屏幕距离选项 221
18.3 颜色选项 222
18.4 顶层 223
18.5 标签 223
18.5.1 文本选项 223
18.5.2 字体选项 224
18.5.3 图像选项 224
18.5.4 复合选项 225
18.6 标签框架 225
18.7 按钮 226
18.7.1 复选按钮 226
18.7.2 单选按钮 227
18.7.3 菜单按钮 228
18.8 列表框 229
18.9 滚动条 229
18.9.1 移动单个的组件 230
18.9.2 多个组件的同步滚动 231
18.10 标尺 232
18.11 输入框 233
18.11.1 输入框组件 233
18.11.2 调节框 234
18.11.3 show选项 234
18.11.4 验证 235
18.12 菜单 236
18.12.1 下拉菜单 237
18.12.2 级联菜单 238
18.12.3 键盘遍历和快捷键 239
18.12.4 针对平台的菜单 240
18.12.5 弹出式菜单 240
18.13 分栏窗口 241
18.14 标准对话框 243
18.15 其他的常见选项 244
18.15.1 组件状态 244
18.15.2 组件尺寸选项 244
18.15.3 锚定选项 245
18.15.4 内部补白 245
18.15.5 光标选项 246
第19章 主题组件 247
19.1 比较经典组件和主题组件 247
19.2 组合框 249
19.3 记事本 249
19.4 进度条 251
19.5 分隔符 252
19.6 尺寸控制柄 252
19.7 目录树 252
19.7.1 管理目录树条目 252
19.7.2 控制目录树的列和标题 255
19.7.3 目录树条目选择管理 256
19.7.4 目录树条目标记 257
19.8 主题组件状态 258
19.9 主题组件样式 259
19.9.1 使用主题 260
19.9.2 样式的元素 260
19.9.3 创建和配置样式 261
19.10 其他标准主题组件选项 263
第20章 字体、位图和图像 264
20.1 本章出现的命令 264
20.2 font命令 265
20.2.1 控制和使用命名字体 266
20.2.2 其他的字体应用 269
20.2.3 字体描述 269
20.3 image命令 270
20.3.1 位图图像 271
20.3.2 相片图像 271
20.3.3 图像和命名空间 275
第21章 几何管理器 277
21.1 本章出现的命令 277
21.2 几何管理器概览 278
21.3 网格管理器 279
21.3.1 grid命令和-sticky选项 282
21.3.2 跨行和跨列 283
21.3.3 拉伸行为与-weight和-uniform选项 283
21.3.4 相对位置字符 284
21.4 打包器 285
21.4.1 pack命令和-side选项 287
21.4.2 充满 288
21.4.3 扩充 288
21.4.4 锚定 290
21.4.5 打包顺序 290
21.5 补白 291
21.6 定位器 291
21.7 层级结构几何管理 292
21.8 组件堆栈顺序 293
21.9 其他几何管理器选项 294
21.10 Tk里的其他几何管理器 295
第22章 事件和绑定 297
22.1 本章出现的命令 297
22.2 事件 298
22.3 bind命令概览 299
22.4 事件模式 300
22.5 事件序列 301
22.6 脚本中的置换 301
22.7 解决冲突 302
22.8 事件绑定层级结构 303
22.9 事件何时被处理 304
22.10 命名虚拟事件 305
22.11 生成事件 307
22.12 逻辑动作 308
22.13 绑定的其他用途 310
第23章 画布组件 311
23.1 画布基础:条目和类型 311
23.2 控制带标识符和标记的条目 313
23.3 绑定 315
23.4 画布滚动 318
23.5 生成Postscript 319
第24章 文本组件 321
24.1 文本组件的基本原理 321
24.2 文本索引与记号 323
24.3 搜索与替换 324
24.4 文本标记 325
24.4.1 标记选项 326
24.4.2 标记优先级 328
24.4.3 标记绑定 328
24.5 虚拟事件 329
24.6 嵌入式窗口 329
24.7 嵌入图像 330
24.8 撤销 331
24.9 同级文本组件 334
第25章 选择与剪贴板 336
25.1 本章出现的命令 336
25.2 选择、检索和类型 337
25.3 定位和清除选择 338
25.4 用Tcl脚本提供选择 339
25.5 clipboard命令 340
25.6 拖曳和释放 341
第26章 窗口管理器 342
26.1 本章出现的命令 342
26.2 窗口尺寸 344
26.3 窗口位置 346
26.4 网格化窗口 346
26.5 窗口状态 347
26.6 装饰 348
26.7 特殊处理:瞬态、组和覆盖-重定向 349
26.8 针对系统的窗口属性 349
26.9 可停靠的窗口 350
26.10 关闭窗口 351
26.11 会话管理 352
第27章 焦点、模态交互与自定义对话框 353
27.1 本章出现的命令 353
27.2 输入焦点 354
27.2.1 焦点模式:显式与隐式 354
27.2.2 设置输入焦点 355
27.2.3 查询输入焦点 355
27.3 模态交互 356
27.3.1 攫取 356
27.3.2 局部和全局攫取 357
27.3.3 攫取中的键盘处理 357
27.3.4 等待:tkwait命令 358
27.4 自定义对话框 359
第28章 更多配置选项 363
28.1 本章出现的命令 363
28.2 选项数据库 364
28.3 选项数据库条目 364
28.4 RESOURCE_MANAGER属性和.Xdefaults文件 365
28.5 选项数据库的优先级 366
28.6 option命令 367
28.7 configure组件命令 367
28.8 cget组件命令 368
第29章 关于Tk的其他内容 369
29.1 本章出现的命令 369
29.2 删除组件 370
29.3 update命令 370
29.4 关于组件的信息 371
29.5 tk命令 371
29.6 Tk控制的变量 372
29.7 响铃 373
第Ⅲ部分 C语言中Tcl应用程序的编写 377
第30章 Tcl与C语言的集成原理 377
30.1 Tcl与C:如何选用 378
30.2 资源名称——把C结构连接到Tcl 379
30.3 “面向动作”与“面向对象” 380
30.4 描述性信息 381
第31章 解释器 382
31.1 本章出现的函数 382
31.2 解释器概述 383
31.3 简单的Tcl应用程序 384
31.4 删除解释器 385
31.5 多重解释器 385
第32章 Tcl对象 387
32.1 本章出现的函数 387
32.2 字符串对象 390
32.3 数值对象 390
32.4 从对象中获取C语言数据 391
32.5 Tcl对象的动态本质 391
32.6 字节数组 392
32.7 复合对象 392
32.8 引用计数 393
32.9 共享对象 393
32.10 新的对象类型 394
32.11 解析字符串 395
32.12 内存分配 395
第33章 处理Tcl代码 397
33.1 本章出现的函数 397
33.2 处理Tcl代码 398
33.3 动态创建脚本 399
33.4 Tcl表达式 400
第34章 访问Tcl变量 401
34.1 本章出现的函数 401
34.2 设置变量值 403
34.3 读取变量 404
34.4 删除变量 405
34.5 链接Tcl和C变量 405
34.6 设置与删除变量跟踪 407
34.7 跟踪回调 407
34.8 全数组跟踪 409
34.9 多重跟踪 409
34.10 删除回调 409
第35章 创建新的Tcl命令 411
35.1 本章出现的函数 411
35.2 命令函数 413
35.3 注册命令 414
35.4 果协议 416
35.5 Tcl_AppendResult 416
35.6 Tcl_SetResult和interp->result 416
35.7 clientData和删除回调 418
35.8 删除命令 420
35.9 获取与设置命令参数 420
35.10 Tcl过程如何工作 422
35.11 命令跟踪 423
第36章 扩展包 424
36.1 本章出现的函数 424
36.2 Init函数 425
36.3 包 425
36.4 命名空间 426
36.5 Tcl占位符 426
36.6 ifconfig扩展包 427
第37章 嵌入Tcl 433
37.1 本章出现的函数 433
37.2 将Tcl添加到应用程序 433
37.3 初始化Tcl 434
37.4 创建新的Tcl外壳 435
第38章 异常 437
38.1 本章出现的函数 437
38.2 完成代码 438
38.3 设置errorCode 440
38.4 管理返回的选项字典 441
38.5 在errorInfo中添加堆栈跟踪 441
38.6 TcL_Panic 444
第39章 字符串工具 445
39.1 本章出现的函数 445
39.2 动态字符串 449
39.3 字符串匹配 452
39.4 正则表达式匹配 453
39.5 处理字符编码 454
39.6 处理Unicode和UTF-8字符串 455
39.7 命令完整性 457
第40章 哈希表 459
40.1 本章出现的函数 459
40.2 关键字和值 461
40.3 创建和删除哈希表 461
40.4 创建条目 462
40.5 查找已存在的条目 463
40.6 搜索 464
40.7 删除条目 465
40.8 统计 465
第41章 列表和字典对象 467
41.1 本章出现的函数 467
41.2 列表 469
41.3 字典 471
第42章 通道 475
42.1 本章出现的函数 475
42.1.1 基本通道操作 475
42.1.2 通道注册函数 478
42.1.3 通道属性函数 478
42.1.4 通道查询函数 479
42.1.5 通道类型定义函数 480
42.2 通道操作 480
42.3 注册通道 482
42.4 标准通道 484
42.5 创建新的通道类型 484
42.5.1 创建自定义通道实例 485
42.5.2 堆叠通道 485
42.5.3 ROT13通道 486
第43章 事件处理 492
43.1 本章出现的函数 492
43.2 通道事件 493
43.3 时间处理器 495
43.4 休眠回调 496
43.5 调用事件调度器 497
第44章 文件系统的交互 500
44.1 Tcl文件系统函数 500
44.2 虚拟文件系统 502
第45章 操作系统工具 503
45.1 本章出现的函数 503
45.2 进程 504
45.3 收割子进程 506
45.4 异步事件 507
45.5 信号名称 509
45.6 退出与清理 509
45.7 其他 510
第46章 线程 511
46.1 本章出现的函数 511
46.2 线程安全 512
46.3 构建支持线程的Tcl 512
46.4 创建线程 512
46.5 终止线程 513
46.6 互斥体 513
46.7 条件变量 514
46.8 其他 515
第47章 构建Tcl及其扩展 517
47.1 构建Tcl和Tk 517
47.1.1 在Unix中构建Tcl和Tk 518
47.1.2 在Mac OS上构建Tcl和Tk 519
47.1.3 在Windows中构建Tcl和Tk 519
47.2 Tcl扩展架构(TEA) 520
47.2.1 TEA标准配置选项 521
47.2.2 TEA扩展包的目录结构 521
47.2.3 定制aclocal.m4文件 522
47.2.4 定制configure.in文件 522
47.2.5 定制Makefile.in文件 525
47.2.6 在Windows中构建扩展包 525
47.3 构建嵌入的Tcl 525
第Ⅳ部分 附录 529
附录A 安装Tcl和Tk 529
A.1 版本 529
A.2 Tcl发布包 529
A.3 ActiveTcl 530
A.4 Tclkit 530
A.5 用发布的源码编译Tcl/Tk 530
附录B 扩展包和应用程序 531
B.1 获取和安装扩展包 531
B.1.1 手动安装扩展包 531
B.1.2 为ActiveState TEApot档案库安装扩展包 531
B.2 TkCon扩展控制台 533
B.3 标准Tcl库:Tcllib 533
B.4 Img提供的额外的图形格式 534
B.5 Snack提供的声音支持 534
B.6 面向对象的Tcl 534
B.7 多线程Tcl脚本 535
B.8 XML编程 535
B.9 数据库编程 536
B.10 整合Tcl和Java 536
B.11 SWIG 537
B.12 Expect 537
B.13 扩展Tcl 538
附录C Tcl资源 539
C.1 在线资源 539
C.2 书籍 540