谈谈设备驱动程序ANSI.SYS 山东 殷玉法 李宝玉 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:"+ F2="DIR B:"+ 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文件。(山东 殷玉法 李宝玉)