D0I:10.13374/j.issn1001-053x.1984.04.005 北京钢铁学院学报 1984年第4期 屏幕编辑程序Y一edit的研制 软件开发室余重三 摘 要 编辑程序是计算机系统中基本应用软件包之一。文章论述了北京钢铁学院软件开发室研制成功的屏幕编 辑程序Y一edit的主婴设计思想和结构特点 Y-一edit是在U如x操作系统支持下,用C语言编写的,具有很好的可移植性。采用终端虚拟化的方法,Y一 edt可以在任何终端使用。定义了控制命令和对应控制健的语法,给用户提供了自己定义控制命令和对应控 制健的便利。采用GaP工作区域结构和简化控制命令。以提高响应速度。 通过研制Y一edit,为设计系统应用程序提供了成功的经验。 前 言 正象作家希望有一支得心应手的笔去写作修改文章,使用计算机的用户也希望有一 个灵活方便,功能齐全的编辑程序去编写修改程序。编辑程序是计算机系统中基本应用 软件包之一。 最近我们在北京钢铁学院软件开发中心Intel86/330x机上,设计,研制了一个可用 于任何CRT终端的屏幕编辑程序Y-©dit,具有结构合理,简单易学,使用方便,响应速 度快等特点,达到预期效果。 编辑程序的现状及Y一edit的特点: 随着计算机迅速发展,推广应用,越来越多的人们使用计算机去完成各种工作,其中 必须的一步,就是通过各种方式向计算机输入或修改程序。通过在纸带卡片上穿孔输入, 修改文件的方法是不能适应用户需要,正在逐步被淘汰。编辑程序应运而生,很快被用户 所熟悉和掌握,成为编写、修改程序的得力工具。目前国内引进的各种计算机大多都配备 了功能大小不等的编辑程序。 但并不是所有计算机配备了功能齐全的编辑程序,部分编辑程序也有不足之处。比如 Intel系列中微处理机86/330x虽然配备了Unix操作系统的行编辑程序ed和屏幕编辑程序 Vi,实际上仅具有Unix操作系统ed和Vi的部分功能,不能很好地满足用户要求。 各个公司用于移动CRT终端光标的控制代码串是各种各样的,所以大多数屏幕编辑程 序是按照特定CRT终端设计的。这样要使用屏幕编辑程序,就必须使用该公司的CRT终端 设备。这种情况,限制了屏幕编辑程序在各种CRT终端的使用。 每个屏幕编辑程序都有一套固定的控制命令与对应的控制健,用户无法根据自己习惯 去更改或重新定义控制命令与对应的控制健。这就要求用户每使用一个新的屏幕编辑程 55
北 京 钢 铁 学 院 学 报 年 第 期 屏幕编辑程序 一 的研制 软件开 发 室 余重三 摘 要 编辑程序是计算机 系统中基本应用软件包之一 。 文章论述了北京钢铁学院软件开发室研制成功 的 屏幕编 辑程序 一 的主要设计思想和结构 特点 一 是在 川 操作系统支持下 ,用 语言编写 的 ,具有很好的可移植性 。 采用终端虚拟化的方 法 , 一 可以在任何终端使用 。 定义了控制命令和对应控制键的语法 , 给用户提供了 自己定义控制命令和对应控 制键的便利 。 采用 工作区域结构和简化控制命令 。 以提高响应速度 。 通过研制 一 , 为设计系统应用 程序提供了成功 的 经 验 。 启介 护 日 巨 正象作家希望有一 支得心应手的笔去写作修改文章 , 使用计算机的用 户 也希望 有 一 个灵活方便 , 功能齐全的编辑程序去 编写修改程序 。 编辑程序是计算机系统中 基 本 应 用 软件包之一 。 最近我们在北京钢铁学 院软件开 发中心 机上 , 设计 , 研制 了 一个可用 于任何 终端的屏 幕编辑程序 一 , 具有 结构合理 , 简单易学 , 使用方 便 , 响应速 度快等特点 , 达到预期效果 。 编辑程序的现状及丫一 的特点 随着计算机迅 速发展 , 推广应 用 , 越来越多 的人们使用计算机去完成各种工 作 , 其中 必须的一 步 , 就是 通过 各种方式 向计算机输入或修改程序 。 通过在纸带卡片上穿孔输入 , 修改文件的方法是不 能适应用户 需要 , 正在逐步被淘汰 。 编辑程序应运而生 , 很快被用户 所熟悉和掌握 , 成为 编写 、 修改程序的得力工具 。 目前国 内引进 的各种计算机大多都配备 了功能大小不等的编辑程序 。 但并不是所有计算机配备了功能齐全的编辑程序 , 部分编辑程序也有不足之 处 。 比如 系列中微处理 机 虽然配备 了 操作系 统 的行编辑程序。 和屏 幕编辑 程 序 , 实际上仅具有 操作系统 和 的部分功能 , 不能很好地满足用户要求 。 各个公司用于移动 终端光标 的控制 代码 串是 各种各样的 , 所 以大多数屏幕编辑程 序是按 照特定 终端设计的 。 这样要使用屏 幕编辑程序 , 就必须使用该公司 的 终端 设备 。 这种情况 , 限制 了屏 幕编辑程序在各种 终端的使用 。 每个屏幕编辑程序都有一 套固定的控制命令 与对 应 的控制键, 用户无法根据 自己习 惯 去更改或重新定义控制命令与对应的控制键 。 这就要求用户每使用一个新的 屏 幕 编 辑 程 导 ‘口 DOI :10.13374/j .issn1001-053x.1984.04.005
序,就要重新学习,熟悉该编辑程序所规定的一套控制命令与对应的控制键。 除了上述问题外,引进的编辑程序的一个较普遍问题是我们一般得到的是目标程序, 而不是源程序,难以对编辑程序的功能进行修改和扩充。 我们决定自己编写屏幕编辑程序,以解决以上问题。要求Y一edit屏幕编辑程序具有 以下特点: 1.独立于特定的CRT终端设备,能在任何CRT终端上使用。 2。用户可根据自己的习惯重新定义控制命令与对应的控制键 3。响应速度是编辑程序的重要指标,我们要求Y一edit的响应速度高于Vi。 概 述 Y一edit是在Intel86/330x上设计、运行的,Intel86/330X是美国Intel公司在1982年推 出的一个高性能微机系统。主存256K,可扩充到1M,(现为640K),配有35MB温盘和 1MB软盘。· Intel86/330x采用Xenix操作系统(Unix第七版本)是多用户分时操作系统,最多可 接9个CRT终端,(现为三个CRT终端,主终端为Televideo Models95O,其余为Model-- 910)。有较丰富的系统软件,可以运行多种算法语言和系统程序语言。 考虑Unix操作系统是相当成功的操作系统,C语言是功能很强的系统程序语言,Unix 本身是用C语言编写的,C语言可以直接调用Unix系统程序,使用Uix文件系统,我们 决定采用C语言编写Y一edit程序,在Unit操作系统支持下运行。 主要设计思想 在设计Y一edit时,首先考虑使Y一edit在任何终端都能使用,通常想到的方法是使终 端虚拟化。虚拟终端是人们假定的终端,它具有一些标准参数,如终端屏幕的行数,列数, 光标移动的延迟时间等:和一些标准功能,如光标上移一行,下移一行,清除屏幕一行字符, 清除整个屏幕等等。我们以虚拟终端的这些标准参数,标准功能做为Y一edit设计的依据。 在Unix操作系统中,有一个文件/etc/termcap'它把各个制造商的各种起止同步无顺序 终端的属性,做为数据记录下来(见表1)。 表1终端属性数据库(/etc/tenmcap的主要项目 (一共有92个项目,*表示基本功能) al·add new blank line ¥插入空白行 am automatic margins 左右边自动换行(yes/no) be back cursor 光标向左 bs back space work BS有效吗?(yes/no) bt back tab 反方向列表 cd clear to end of display 共清除到画面末尾 ce clear to end of line 清除到行末(=HO一CD) cl clear screen 光清除整个画面 66
序 , 就要重新学习 , 熟悉该编辑程序所规定的一 套控制命 令与对应的控制键 。 除 了上述 间题外 , 引进的编辑程序的一个较普遍 问题是 我们一般得到的是 日标程序 , 而不是源程序 , 难 以对编辑程序的功能进行修改和扩充 。 我们决定 自己 编写屏 幕编辑程序 , 以解决以上 问题 。 要 求 一 屏 幕编辑程序具有 以下特点 独立于特定的 终端设备 , 能在任何 终端上使用 。 用户可根据 自己的习惯 重新定 义控制命令 与对应的控制键 响应速度是 编辑程序的重要指标 , 我们要求 一 的 响应 速度高于 。 概 述 一 是在 上设计 、 运行的 。 是美国 公司在 年报 出的一 个高性能微机系统 。 主存 , 可扩充到 , 现 为 , 配有 温盘 和 软盘 。 一 采用 议操作系统 第七 版本 是 多用户分 时操作系统 , 最 多 可 接 个 终端 , 现为 三个 终 端 , 主终端为 , 其余为 。 有较丰富的系统软件 , 可 以运行多种算法语言和系 统程序语言 。 考虑 操作系统是相 当成功的操作系统 , 语言是功能很强的系统程序语言 , 本身是用 语言编写的 , 语言可 以直接调 用 系统程序 , 使用 文件系 统, 我 们 决定采用 语 言 编写 一 程序 , 在 操作系统支持下运行 。 主要设计 思想 在设计 一 时 , 首先考虑使 一 在任何终端都能使用 , 通常想到的方 法是使终 端虚 拟化 。 虚拟终端是人们假定的终端 , 它具有一 些标准参数 , 如终端屏 幕的行数 , 列数 , 光 标移动的延 迟 时间等,和一 些 标准功能 , 如光标上移一行 ,下 移一行 , 清除屏 幕一 行字符 , 清除整个屏 幕等等 。 我们 以虚 拟终端的这些标准参数 , 标准功能做为 一 设计的依据 。 在 操作系统中 ,有一个文件 它把各个制造商的各种起止 同步无顺序 终端的属性 , 做为 数据记 录下 来 见表 。 表 终端属性数据库 的主要项 目 一 共有 个项 目 , 关 表示基本功能 · 关 插入空 白行 左右边 自动换行 光标向左 有效吗 反方 向列表 关 清除到画面末尾 清除到行末 一 釜 清除整个画面 月
cm cursor motion 移到光标(X,Y) C○#80 1行长=80个字符 dc delete character 并清除字符 dl delect line 米清除行 do down linc 光标向下 ei end insert mode 插入状态结束 ho home cursor 光标向左上 ic insert character 插入字符 im enter insert mode 转到插入状态 ip pad after char inserted 并插入后的插入(pad) is clear screen labels 清除画面标记 li#24 lines per frame 画面行数=24 nd non-destructive space 光标向右 os overstrike works 可重复工作(yes/no) ta tab *标记 tc entry of similar terminal 参考其它项目 upup line 光标向上 当Y一edit被调用,起动时,它从文件/etc/ttytype确定现行终端类型,然后打开 /etc/termcap文件,找到相应的终端标准参数的具体值和实现标准功能的特定控制字符 串,并赋给虚拟终端的上述参数的T一STR数据结构。Y一edit是通过Ttyset.c模块完成 这些工作。其框图见图1。 业Y一edit要执行虚拟终端的某标雅功能时,通过与该标准功能相对应的T一STR数 据结构,得到实际终端能接受并执行的控制字符串,然后向实际终端发出此控制字符申, 去完成该标准功能。这样就实现了Y一edit在任何终端都能使用的要求。 其次考虑向用户提供能自己定义控制命令和对应控制键的便利。 Y一cdit定义了一组说明各种控制命令所对应的控制键的语句、语法、语义的规范。 首先Y一edit定义了一套控制命令符号,用大写字母串表示,如: D-L表示删除光标左边字符 D-R表示刷除光标右边字符 L表示光标左移 R表示光标右移 U表示光标上移 WRITE表示写一个文件 CD表示改变目录路经,等等。 然后又规定了控制键字符串的 语法、语义规则,如:“AA”表示控制A, “AXb”表示控制X,字符b, AW”=WRITE,表示按控制W,是写入文件命令。 7
。 一 。 移 到光标 , 行长 个 字符 斧 清 除字符 关 清 除行 光标 向下 插 入状 态结束 光标向左上 插入字符 转到插入状 态 关 擂入后的插入 清除画 面标记 画 面行数 光标 向右 可重 复工作 关 标 记 参考其它项 目 光标向 上 当 一 被调 用 , 起动 时 , 它从文件 八 确定现行终端类 型 , 然 后 打 开 文件 , 找 到相应 的终端标准参数的具 体值和 实现 标准功能的特定 控 制 字 符 串 , 并赋给虚 拟终端的上述 参数的 一 数据结构 。 一 是通过 模 块 完成 这些工作 。 其框图见 图 。 当 一 要 执行虚 拟终端 的某 标准功能 时 , 通 过 与该标准功能相对应的 一 数 据 结构 , 得到 实际终端能接受并执 行的控制 字符 串 , 然后 向实际终端发 出此控制字符 串 , 去完成该 标准功能 。 这样就 实现 了 一 在任何终端都能使用的要 求 。 其次考虑向用户提供能 自己定 义控制命 令和 对应 控制键的便 利 。 一 定 义 了一 组 说 明各种控制命 令所对应 的控制键 的语 句 、 语 法 、 语 义的规范 。 首先 一 定 义 了一 套控制命 令符 一 号 , 用大写 字母 串表示 , 如 一 表 示 删 除 光 标 左边字符 一 表示删除光标 右边字符 表示光标左移 表 示光标右移 表示 光标 移 表 示 写 一个文件 表 示 改变 目录 路经 , 等等 。 然 后 又规定 了控制键 字符 串的 语法 、 语 义规则 , 如 “ 人 ” 表 示控制 , “ ” 表示控制 , 字符, 人 ” 表示按拉制 , 是 写入文件命 令 。 乒
“AK”=U,表示按控制K,是光标上移一行的命令, 如果某些终端有功能键F0、F1…F8等,Y-edit定义条件语句和功能键符号,比如: if TERM=Vi200 K0=CD] K1=WRITE endif 表示如果终端类型是Vi200,按功能键F0,是改变目录路经命令,按功能键F1,是 写入文件命令。 读入现行终端类型 这样用户可以按照上述规范去定义控制 命令和对应的控制键字符串,建立一个控制 键文件。当Y一edit运行时,它有一个Key 打开/ctc/termcap 文件 board链表,每一个节点表示一组控制命令 到相应终端入口 及其对应的控制键字符串,在节点用一个两 叉树表示它们的对应关系,左叉存放命令符 号(如D-L,D-R)右叉存放对应的控制健 价成拟终揣基木参数赋值, 字符串。Y一edit可以从用户指定的控制健文 COL-CNT=相应终端行宽 件读入用户定义的控制命令与对应控制健字 ROW-CNT=相应终端行数 符串,建立起相应的控制键链表。当用户从 键盘输入控制字符串时,Y-一edit就可以从 给虚拟终滞帮本功能赋值,如 该链表中找到对应的命令符号,调用相应的 仁c一eol=清除一行字符的控制字中 子程序去执行该命令。这样,就给用户提供 tc-cos=清除屏幕的控制字符中 了自己定义控制命令和对应控制键的便利。 t-c-dc=删除一个字符的控制字串 读入控制键文件和建立控制健链表是由 Keybrd.c模式完成的,其框图见图2。 我们是从两方面考虑去提高Y一edit的响 返回主控程序 应速度的: 图1 Ttyset.c模块流程图 1。屏幕编辑工作区域采用GAP的结构。 在Y一ebt,存放被编辑文件的内存工作区域不是连续地存放被编辑文件的,而是分 成三段(见图3) (1)bof到top段,存放文件开始到光标的部分。 (2)bof到eof段,存放光标到文件结束的部分 (3)top到bot段,是空白的间隙GAP区域。 由于屏幕编辑中使用最频繁的删除、修改、增添等命令都是以光标在文件的位置为起 始点,采用GAP结构,使字符的别除,增添等命令都是以光标在文件的位置为起始点, 采用GAP结构,使字符的删除,增添都是在GAP区域完成的,大大减少了由于增添或别 除字符而在工作区域移动被编辑文件的工作量,提高了响应的速度。 2。简化控制键的输入方式: 58
“ 人 ” , 表示按控制 , 是光 标上移一行的命令 , 如果某些 终端有功能键 、 , , 表示如果终端类型是 ’ 卜 · · … 等 , 一 定义条件语句和功能键符号 , 比如 按功能键 , 是 改变 目录路经命令, 按功能键 , 是 读入 现行 终端类型 打开 八 文件 到 相 应 终端 入 口 给 虎 担终端 荃 木参数 赋值 , 一 相应 终端行宽 , 相应 终端行 数 给 虚拟 终端 墓 本 功能 赋 值 , 如 “ 一 二 畜青除一行字符的控 制字串 一 清除屏幕 的控 制字符 串 一 “ 一 “ 二 删 除一 个字符的控制字串 返回主 控程 序 图 模块流程图 写入文件命令 。 这样用户可 以按照上述规范去定义控制 命令和对应 的控制键字符串 , 建立一个控制 键文件 。 当 一 运行时 , 它有一个 链表 , 每一个节点表示一组控制 命 令 及其对应 的控制键字符 串 , 在节点用一个两 又树表示 它们 的对应关系 , 左叉存放命令符 号 如 一 , 一 右叉存放对应的控制键 字符 串 。 一 可 以从用户 指定的控制健文 件读入用户定义的控制命令与对应控制键字 符 串 , 建立起相应 的控制键链表 。 当用户 从 键盘输入控制字符 串时 , 一 就可 以从 该 链表 中找到对 应 的命令符号 , 调用相 应 的 子程序去执行该命令 。 这样 , 就给用户提供 了 自己定义控制命令和对应 控制键的便利 。 读入控制键文件和建立控制键链 表 是 由 。 模式完成 的 , 其框 图见 图 我们是从两方面考虑去提高 一 的响 应 速度 的 屏 幕编辑工作区域采 用 的结 构 。 在 一 , 存放被编辑文件的内存工作区域不是 连续地存放被编辑文件的 , 而是 分 成三段 见 图 到 段 , 存放文件开始到光标的部分 。 到 段 , 存放光标到文件结束的部分 到 段 , 是 空 白的间隙 区域 。 由于屏 幕编辑中使用最频繁的删 除 、 修改 、 增添等命 令都是 以光标在文件的位置为起 始 点 , 采用 结构 , 使字符的 删除 , 增添 等命令都是 以光标在文件 的位置为 起始 点 , 采用 结构 , 使字符的删除 , 增添都是在 区域完成 的 , 大大减少 了由于 增添 或删 除字符而在工作区域移动被编辑文件的工作量 , 提高了响应的速度 。 。 简化控制键的输入方式
打开指定的控制钱文件 是文件结束吗? 否 返同主控程序 读入一行字符 是说明语 赋值语宫: 条件语句 语法错误: 言,跳过 获得Keyboard 到相应CRT类型 输出错误信患 这行字符 链表的一个节点。把 把功能键代表的字符 控制健字符串赋给节 串赋给Keyboard 节点的左叉。把相应 控制命令赋给节点的 链表的一个节点的 左义。 右叉 把相应控制命令赋 给节点的右叉 Kcyboard 链表 tr Next Next 键表结束 #tok-str Nucl match- "AH L”.“八L” “R” FO aCD”F1D。4 write” “ESC7P” “ESC7Q” 图2 koybrd..c模块流程图和keyboard链表示意图 (1)在编辑命令中,使用最频繁的莫过于删除或增添字符的命令了。因此简化删除和 增漏字符命令的输入方式,对提高响应速度效果最显著。在Y一edit中增添字符,只需要 从健盘上直接输入所增添的字符:删除字符,只需要选择相应删除命令,一般只按一次控 制健就可以了 相比较之下,屏幕编辑程序Vi,增加字符前,要按输入增舔开始命令,‘a',增添字 符后,要按输入结束命令八',这样既使增加一个字符,也要按健三次(输入命令两次, 字符本身一次)。降低了响应速度。 (2)Y一edit绝大多数控制健是不可见字符(如控制A,控制B…等),这样控制 字符与增添的字符(一般是可见字符)相区别,减少了要增深字符是控制健字符时的麻 ,提高了响应速度。 59
寸 ‘ 开于肯定的控制键 文件 返同主控程序 读 入一行字符 是说 明语 赋值语 言 条到件相语应旬 类型 输语出法错错误误信息 言 , 跳过 获得 把功能键代表的 字符 这行字符 链表的一 个节点 。 把 串赋给 上 ‘ , 。 ‘ 一 六 ‘ , 含 夕幻沈七 链表的一个节点的 左叉 。 侄 键 子付 币 然万 一 把相应控制 命令斌 节点的左叉 。 把相应 给节点的右叉 控制命令赋 给节点的 右叉 书 镇表结束 “ 八 ’, , 图 了 。 模块流程图和 了 链表示愈图 、 在编辑命令 中 ,使用最频繁的莫过于删除或增添字符的命令了 。 因此简化侧除和 增举宇特命令的输入方式 , 对提高响应 速度效果最显著 。 在 一 中增添字符 , 只 舫 要 从健盘上直接输入所增添的字符, 删除字符 , 只 需要选择相应删除命令 , 尸般只按一 次控 制键就可 以 了 相比较之下 , 屏幕编辑程序 , 增加字符前 , 要按输入增添开始命令 , ‘ ’ , 增添字 符后 , 要按输入结束命令 ‘ ’ , 这样既使增加一个字符 , 也要按键三次 物入命令两 次 , 字符本身一 次 。 降低 了响应速度 。 一 绝大多数控制键是不可见字符 如控制 , 控制 二 等 , 这样 控 制 字符与增添的字符 一般是可见字符 相 区别 , 减少 了要增添字符是控制键字符 时 的 麻 级 , 提高了响应速度
Y-edid流图 naiu(argc,agv)‘ 得到CRT终端 建立符号栈 类型和特征 (Token stack) 龙立屏幕图 从键盘读入符 号栈,入符号校 执行栈中符号 改变终瑞CTR 命令 的状态~Ech。 RAW 是qnit命令? 得到工作级冲区 bof eof top bot N 恢复终端CTR 的状态记录本 调用相应子程序 次编辑状况 读入要被编拟的文件 去执行符号命令 退出 Ga卫> N 扩展工作级冲区 确定光标位置, 读入文件到屏系田 和屏暮 得到控制命令文件, 读入控制命令,建 立控胡命令链表 60
一 沈程图 妞协 , 肠月 · 嘴声尸 得到 终端 类型和 特征 止立屏幕图 口 曰 , 改 变终端 的状态 一 性 互公二 得到工作缓冲区 谈 入要被编辑 的文件 扩展工作级冲区 确定光标 位置 , 读 入 文件到屏您 图 和屏 落 建立符号校 从键盘读 入符 号栈 , 入符号校 执行栈中符 号 命令 是 们 七命令 调用 相 应子程序 去疚行符 号命令 恢夏终端 的 状态记 录本 次编辑状况 退 出 得到控制命令文件 , 读 入控制命令 , 建 立控 制命令链表
被编辑文件 工作缓冲区< 图滩添字符A top 刑除字符B to p Gap Gap Gap bnt一光称位置 禁 文件 co f cof 图3工作缀冲区的GAP结构 另外,在设计Y一edit时,考虑到被编辑文件的扩大和占据内存空间的问题。它可以 自动扩展工作区域以适应被编辑文件扩大的要求,但是在86/330X的Xenix操作系统是采 用二级虚拟存贮的多用户分时操作系统,它分配给每个进程最多8页存贮空间,64K。 Y一edit目标程序本身运行占据40K左右,留给被编辑文件的内存空间为23K左右, 这已能满足普通大小文件编辑的需要。对于超过23K的文件,可以分段编辑,然后调用cat 命令并拼成一个大文件的方法去解决。 使用结果和今后的发展 Y一edit投入使用后,经过实践,效果良好,达到了设计目的,能满足用户的需要。由 于国内许多小型机,微型机都配备了Uix操作系统和C语言,C语言具有很好的可移植 性。Y一edit在设计和编写中较好地考虑了可移植性,所以Y一edit可以几乎不加修改地 在所有Unix操作系统支持下运行。如32位小型机VAX11系列,16位机PDP系列,Inte 系列,随着Unix系统越来越多地在各种小型机微型机运行,Y一edit可以普遍地推广, 应用,为我们自己编写系统应用程序增加一条途径。今后可以发展为汉字屏幕编辑程序。 在调试Y一edit屏幕编辑程序中,得到软件开发中心孙奎英、李智华、蒋一凡、张伯 年、刘莲英、王小燕等同志的帮助,特此表示感谢。 61
卜 工 作缓冲 区 · 增添字符 、 〕 删除字符 -光称位置 图 工作缓冲区 的 人 结构 另外 , 在设计 一 时 , 考虑到被编辑文件的扩大和 占据内存空 间的问题 。 它可 以 自动扩展工作区域以适应被编辑文件扩大的要求 , 但是 在 的 操作系统是采 用二级虚拟存贮的多用户 分时操作系统 , 它分配给每个进程最多 页存贮空 间 , 。 一 目标程序本身运行 占据 左 右 , 留给被编辑文件的内存空 间为 左右 , 这 已能满足普通大 小文件编辑的需要 。 对 于超过 的文件 , 可 以分段编辑 , 然 后调 用 命 令并拼成一个大文件的方法去解决 。 使 用结果和今后的发展 一 投入使用后 , 经过实践 , 效果 良好 ,达到 了设计 目的 , 能满足用户的需要 。 由 于 国内许多小型 机 , 微型机都配备 了 操作系 统和 语言 , 语言具有很好 的 可 移 植 性 。 一 在设计和 编写 中较好地考虑 了可移植性 , 所 以 一 可 以 儿 乎不加修 改 地 在所有 操作系统支持下运行 。 如 位小型机 系列 , 位机 系列 , 系列 , 随着 系统越 来越 多地在各种小型 机微型 机运行 , 一 可 以普遍地 推 广 , 应用 , 为我们 自己编写系统应 用程序 增加一条途径 。 今后 可 以发展为汉字屏 幕编辑程序 。 在调 试 一 屏幕编辑程序 中 , 得到软件开发中心 孙奎英 、 李智华 、 蒋一凡 、 张 伯 年 、 刘莲英 、 王小燕 等同志的帮助 , 特 此表示感谢
附录: Y一edit屏幕编辑程序使用说明 一。调用Y一edit屏幕编辑程序 Y[-K控制键文件][编辑文件名] 说明:如果编辑文件名被给出,则Y一edt读入此文件到工作缓冲区进行编辑,若该 文件不存在,则Y一edit创建该文件。 如果编辑文件名没有被给出,则Y一edit读入前一次被编辑的文件。 当“-K控制键文件”被给定,则Y一edit从该文件读入并建立控制命令链表。 否则Y一edit从/etc/j.key文件读入并建立控制命令链表。 二。主要控制命令一览表: 〈一〉移动光标: 控制健L一左移, 控制键R一右移, 控制键K一上移, 控制健】一下移, ◆ 控制健X,然后b一移到一个字的开始。 控制健X,'然后e一移到一个字的末尾, 控制键D一移到一行的开始, 控制健F—一移到一行的末尾, 控制健T一一移到屏幕的开始, 控制健Y一移到屏幕的末尾, 控制健N一移到文件的开始, 控制健]一移到文件的结束。 控制键A一光标跳移,显示Jump:等待输入: 1》数字一光标移到该数字的行。 《2〉+数字一光标从现在行数再下移该数字行。 〈3〉~数字一光标从现在行数上移该数字行。 〈4〉?一一显示光标现在行的数目。 〈5〉控制健B一一光标移到前一次设定控制健B的位置。 〈二〉删除命令, Del健一别除光标左边字符。 控制键一一刷除光标右边字符。 控制健一副除到一行的结尾。 控制健@一副除整个一行。 62
附录 一“ 屏幕编辑程序使用说明 一 调 用 一 屏 幕编辑程序 〔 一 控制键文件」 〔编辑文件名〕 说明 如果 编辑文件名被给出 , 则 一 读入此文件到工作缓冲区进行编辑 , 若该 文件不存在 , 则 一 创建该文件 。 如果编辑文件名没有被给 出 , 则 一 读入前一 次被编辑的文件 。 当 “ 一 控制键文件” 被 给定 , 则 一 从该文件读入并建立控制命令链 表 。 否 则 一 从 。 文件读入并建立控制命令链表 。 二 主要控制命令一览表 一 移 动光标 控制键 -左 移 , 控制键 - 右移 , 控制键 -上移 , 控制键 - 下移 , 控制键 , 然后 -移到一个字的开始 。 控制键 , 然后 -移到一个字的末尾 , 控制键 -移到一 行的开始 , 控制键 - 移到一行的末尾 , 控制键 - 移到屏 幕的开始 , 控制键 - 移到屏幕的末尾 , 控制键 -移到文件的开始 , 控制健 〕- 移到文件的结束 。 控制健人- 光标跳移 , 显 示 等待输入 数字-光标移到该数字的行 。 》 数字-光标从现在行 数 再下移该数字行 。 》 一 数字-光标从现在行 数上移该数字行 。 - 显示光标现在行的数 目 。 控制键 -光标移到前一次设定控制键 的位置 。 二 删除命令 键-删除光标左边字符 。 控制健一-删除光标右边字符 。 控制健 - 侧除到一行的结尾 。 控制键 -侧除整个一行
控制键Z一删除,要求输入光标位置参数确定删除区域,如: 1〉控制键N一一删除现在光标位置到文件开始的整个区域。 〈2〉控制键]一别除现在光标位置到文件结束的整个区域。 (3〉控制键T一删除现在光标位置到屏幕开始的整个区域。等等。 控制键U一恢复前一次连续删除的内容。 (三)宏操作(Micro): 控制键X,然后m,一开始/结束宏操作定义。 控制键X,然后x一执行复合操作。 〈四〉杂项 控制键A一一自动设置新一行的起始位置与上一·行的起始位置相同。 控制键B一设置标记在当前光标位置。 控制键C一清理屏幕。 控制键E一改变增添方式, 控制键O一申请操作系统命令, 控制键P一显示先前的信息, 控制键Q一离开Y一edit, 控制键S一寻找某一字符串 控制健R一用一字符串代替某一字符串, 控制键W一写入一个文件, 控制键V一允许下一个插入字符是控制字符, ESC键两次一废除目前命令的申请, 控制健G一得到一个文件进入工作缓冲区: 〈1)Retur▣:指定文件代替原被编辑文件成为现行被编辑文件。 〈2>按控制键K:指定文件插入到被编辑文件,位置在光标之前。 〈3〉按控制键J,指定文件插入到被编辑文件,位置在光标之后, 控制键M(或Returns键)一插人一空行, 控制键X,然后一改变目录路径, 控制键X,然后t一建立TAB停止点。 Y一edit屏幕编辑主要文件及程序一览表 意俳客 语 源程序量 目标程 主 要 功 能 序字节 言 行 数 字节数 y,h C 定义,全局变量,宏指令,控制命令符号表 146 4K tuna,h C 定义,文件络经,常量和错误信息表 76 7.2K y。c 主程序(1)建立工作缓冲区 200 3.7K 3.8K 63
控制键 -删除 , 要求输入光标位置参数 确定删除区域 , 如 控制键 - 删除现在光标位 置到文件开始的整个 区域 。 控制键〕 - 删除现在光标位置到文件结束的整个区域 。 控制键 - 删除现 在光 标位置 到屏 幕开始的整个 区域 。 等等 。 控制键 - 恢复前一 次连 续删除 的内容 。 三 宏操作 控制键 , 然后 , - 开 始 结束宏操 作定 义 。 控制键 , 然后 - 执行复合操作 。 四 杂项 控制键 - 自动设置新一 行的起始位置与上一 行的起始位置相同 。 控制键 - 设置标记在 当前光 标位置 。 控制键 -清理屏幕 。 控制键 - 改变增添方式 , 控制键 -申请操作系统命令 , 控制键 - 显示先前的信息 , 控制键 -离开 一 , 控制键 - 寻找某一 字符 串 控制键 - 用一字符 串代替某一字符 串 , 控制键 - 写入一个文件 , 控制键 - 允许下一个插入字符是控制字符 , 键两 次-废除 目前命 令的 申请 , 控制键 - 得到一个文件进入 工作缓 冲区 画巫西 指定文件代 替原被编辑文件成为现 行被编辑文件 。 按控制键 指定文件插入到被编辑文件 , 位置在光标之前 。 按控制键 指定文件插入到被 编辑文件 , 位置在光标之后 , 控制键 或 键 - 插 人一 空 行 , 控制键 , 然后 -改变 目录路径 , 控制键 , 然后 - 建立 停止 点 。 一 屏幕编辑主要文件及程序一 览表 语 主 要 功 能 源 程 序 量 目 行 数 字节数
斋排繁 语 源程序嗽 目标程 主 要 功 能 序字节 言 行数字节数 数 (2)读取CRT终端特征 (3)读入要被编辑的文件 (4)读入控制健文件,建立控制 命令链表 Ttyset.c C 读得终端CRT类型,从Termcap文件中 122 2.8K 3.5K 读取相应CRT的特征。 File.c 读被编辑文件到缓冲区,如果工作缓冲 102 2K 2.2K 区小于文件长度,自动扩展工作缓冲区 把工作缓冲区的文件写入磁盘文件系统。 Keybrd.c C 读入控制键文件,建立控制命令链表 202 4.2K 4.5K gbl.c C 控制命令字符与相应子程序表 77 1.8K 1.5K delete.c C 删除字符、行、段 132 2.6K 3K insert.c C 插入字符、行、段 119 2.3K 3K jmp.c C 移动光标到要求的位置 15 3.7K 1.5K map.c 根据控制命令链,改变屏幕图相应内容 147 2.6K 2.8K scr,c 建立屏幕图,从工作缓冲区读取相应区 123 2.3K 3K 段的字符 key.c C 从键盘读入字符或控制命令符,定义宏 136 2.3K 2K 操作 m.c C 移动光标位置 246 4.2K 5K replace.c 寻找相应字符串,替换相应字符串 155 2.9K 2.8K Research and Design of the Screen Oriented Display Editor Program,Y-edit, Yu Chong san Abstract The Editorial program is one of the basic software package in a compu- ter system The paper deals with the main idea and structure of the screen oriented (visual)display editor,for convenience called Y-edit,developed at software Development Center,Peking University of Iron and Steel Tech. Y-edit written in C language is highly portable,running under unix operating system,It works at all kinds of visual terminals,by utilizing virtual terminal.The grammer between the control commands and corresponding con- trol keys is defined,providing the user with the facility to define his own control commands and the corresponding control keys.The responsive speed is 64
源 程 序 量 ‘ 主 要 功 能 行 数 字节数 目标程 序字节 数 语言 文程 件序 或名 ’ 。 。 。 八口,乙八自 飞 。 。 匕几工﹄叹﹄︶ 攀 ‘‘,目 。 立,‘,山一,,“八了八,曰 曰丹自公勺,了口尸 。 。 。 。 。 一 。 ‘︸ 读取 终端特征 读入要被编辑的文件 读入控制键文件 , 建立控制 命令链表 读得终端 类型 , 从 文件中 读取相应 的特征 。 读被编辑文件到缓冲区 , 如果工作缓冲 区小于文件长度 , 自动扩展工作缓冲区 把 工作缓冲 区的文件写入磁盘文件系 统 。 读入控制键文件 , 建立控制命令链表 控制命令字符与相应子程序表 删除字符 、 行 、 段 插入字符 、 行 、 段 移动光标到要求的位置 根据控制命令链 , 改变屏幕图相应 内容 建立屏 幕图 , 从工作缓冲区读取相应 区 段 的字符 从键盘读入字符或控制命令符 , 定 义宏 操作 移动光标位置 寻找相应 字符 串 , 替换相应字符 串 。 。 。 。 。 。 。 。 。 。 。 一 一 班 亡 , 一 , , 一 , 。 , 。 厂 一 七 , 、 甲 护 月