谈谈设备驱动程序ANSI.SYS

Author: 山东 殷玉法 李宝玉 Date: 1994-10-21

        ANSI.SYS能识别的控制序列的第一个字符一定是“ESC”,第二个字符一定是左方括号,随后是一些数字和字母。当需要有多个参数时,各个参数之间应以分号隔开。例如,将光标移到第10行第12列的位置上,则用控制序列表示为:
        ESC [10;12H
        其中10和12是表示行和列的参数,H起表示这个控制序的作用。由于ANSI的使用较多,下面分别列出ANSI.SYS所能识别的全部控制序列的格式和部分参数。
        1、对光标位置的控制
        ESC [#;#H把光标移到由参数指定的位置上。第一个参数指明行号,第二个参数指明列号,缺省值为1。
        ESC [#A把光标上移若干行,缺省值为1。
        ESC [#B把光标下移若干行,缺省值为1。
        ESC [#C把光标右移若干行,缺省值为1。
        ESC [#D把光标左移若干行,缺省值为1。
        ESC [#;#f把光标移到由参数指定的位置上。第一个参数指明行号,第二个参数指明列号,缺省值为1。
        ESC [s保存当前光标位置。
        ESC [u恢复光标位置。
        2、清除屏幕上内容
        ESC [2J清除全屏幕,光标移至起始位置。
        ESC [K从当前光标位置开始清除到该行的结尾。
        3、设置显示方式
        ESC [=#h 参数 说明
        0 40*25,黑白,文本
        1 40*25,黑白,文本
        2 80*25,黑白,文本
        3 80*25,黑白,文本
        4 320*200,彩色,图形
        5 320*200,黑白,图形
        6 640*200,黑白,图形
        7 行结束时转到新行
        4、设置复位方式
        ESC [=#I参数和设置与上面的“设置显示方式”的相同,但参数7意指复位“行结束时转到新行”(把超过行结束的字符扔掉)。
        5、设置颜色
        ESC [#;……;#m
        参数 说明
        0 正规黑底白字
        1 高亮度
        5 闪烁
        7 反象显示
        8 不可见的显示
        32 绿色前景
        33 黄色前景
        34 蓝色前景
        37 白色前景
        40 黑色背景
        41 红色背景
        42 绿色背景
        43 黄色背景
        44 蓝色背景
        6、键的重新定义
        格式:ESC [#;#;…;#p或ESC [#;#;“字符串”p
        控制序列的第一个参数若不是0,则它代表被重新定义的字符的ASCII码。若第一个参数是0,则第二个代表被重新定义键的扫描码。其余的数字(代表ASCII码)和字符串组成了该键的新定义。
        例如,为了按如下所示定义F1-F4四个功能键:
        F1="DIR A:"+<CR>
        F2="DIR B:"+<CR>
        F3="COPY"
        F4="VER"
        则可以用如下4个控制序列去实现:
        ESC [0;59;“DIR A:”;13p
        ESC [0;60;“DIR B:”;13p
        ESC [0;61;“COPY”;p
        ESC [0;62;“VER”;p
        对键进行定义时,对于普通键需要知道它们的ASCII码,对于扩展键要知道它们的扫描码(如Alt-W、Insert、Ctrl-Home的扫描码分别是17、82、119)。
        说明
        1、用户程序只有通过标准输入输出设备的DOS系统调用发出的控制序列才可以被ANSI.SYS接受到。对于通过BIOS或硬件口地址进行显示输出或接受键盘输入的软件,控制序列将不起作用。
        2、ESC这个字符在不同的程序中输入方法不同。在BASIC中是CHR$(27),在DBASEIII是CHR(27)。
        3、在不同的DOS版本中ANSI.SYS不尽相同。如有时在用DIR或TYPE显示时满一屏后屏幕不再滚动,仅在屏幕的最末一行连续覆盖显示。出现这种现象的原因就是因为在CONFIG.SYS中设置了DEVICE=ANSI.SYS命令,而在根目录中的ANSI.SYS文件与当前的DOS版本不兼容。解决这一问题的方法就是在根目录下拷入与当前DOS相同版本的ANSI.SYS文件。(山东 殷玉法 李宝玉)