6.特殊显示
UCDOS3. 0以后版本都向用户提供了特殊显示的功能,在使用特殊显示功能之前,必须先运行RDSL.COM(打印字库读取模块)和TX. COM(特殊显示模块)。
如同输入法模块一样,这两个程序同样也是TSR程序。它们修改了lOH号中断,预先截获特殊显示命令串并予以解释执行。
C语言调用特殊显示的命令格式如下:
具体的命令串格式请参考相关手册。显示特殊汉字是特显功能中的一个重要组成部分,其命令串包括许多控制命令:
①-x 横坐标
②|y 纵坐标
③@ 字形 指定汉字显示的字形,取值范围为A-X或a-t。如:L代表48 * 48点阵黑体字
④@ 宽,高 指定汉字显示的大小
⑤= 字库 选择汉字显示的字库编号,取值范围为0-33。如:2代表HZKSLHTJ字库文件。
⑥# 字号n 选择汉字的字号,字号范围为0-7,n可以为“+(正常)”、“-(扁体)”、“|(长体)”三种。
⑦& 行距
⑧^ 字距
⑨( 前景色
⑩) 背景色
如
将在(100100)处以红底黄字显示96 * 96点阵的黑体“青春工作室”五个字。
特显功能主要用来设计软件的封面,而在运行软件时最好不再依赖于中文系统,这就要求我们使用图形函数getimage)和putimage (),先将生成画面用getimage ( )截取下来,放在某一指定的文件中,再利用putimage()将画面读出来。以下例程中SaveImage和LoadImage即实现相应的功能。
运行结果如下:

二、西文状态下的汉字处理
我们常见到这样一些汉字软件,它们并不是在中文环境下运行的,但是它们的的确确提示有中文信息。例如一些较大的游戏软件,如果必须在中文环境中运行的话,那么内存恐怕就会有点危机。这就必须掌握如何在西文状态下进行汉字的处理。
1.在图形状态下的汉字处理
“汉字是画出来的”,事实确是这样。聪明的电脑是必须在你教会它如何画点画线,才能正确地写出汉字来的,正如我们的先生教我们如何横、竖、撇、捺一样。
这样,我们就必须为每一个字准备一个数组以保存它的信息,人们管它叫“字模”。这些字模的属性如同图形的属性一样,分为点阵和矢量两种。
点阵字是点点地画出来的;而矢量字则是一笔一笔地画出来的。在保存诸如“王”、“中”、“大”等笔划简单的字时,把它作为矢量字来画速度较快,而且所需的存储容量较小,但在保存诸如“谢”、赢;“餐”等字形复杂的字时,恐怕采用点阵字要简单得多。
矢量法还有一个点阵法不能达到的优点:矢量法容易实现汉字的放大缩小,这点是很重要的,本文将在“汉字的放大”一节中介绍它。
常见的点阵字有16 * 16 24 * 24等等,分别称之为16点阵、24点阵字。在谈及m*n点阵时,我们假想有一个横m格,竖n格的框子,每一格只有0和1的属性,当为1时,表示画笔工作,否则表示画笔提起。(当然,如果“逆其道而行之”,亦可得到反相的字)。
右图为汉字“中”的16 * 16点阵模型。

通过如下的程序可以实现“中”字的显示:

对于“中”字,作为矢量字来显示,更为方便。

我们可以记录各笔划端点的坐标,并且在坐标前用1,0分别标记,表示画笔的工作状态(1=画线,0=不画)。则以上“中”字可以表示为:
这样符合笔划的先后顺序,但它完全可以用以下更简单的数据表示:
如下程序用来“中”字的矢量显示,通过改变zoom_x,zoom _y的即可实现字体的缩放。

本文曾经发表于《电脑爱好者》期刊杂志98年4期,版权CFan所有。