为TANGO绘电路图建立汉字元件库

🏠 首页 《无线电》杂志 1994年 🔗 第12期 🔗 第29页 分类:无线电技术自学经验交流 🔗 浦晓明 🔗

(浦晓明)TANGO V3.16电路板设计软件,使用方便,功能强劲,唯一缺憾是没有汉字功能。但由于TANGO的元件库是开放式的,因此可以将汉字做成元件,让TANGO调用汉字象调用元件一样。进入电原理图中的汉字也可以移动和旋转,这样在所绘制出的电原理图中,即可实现汉字的标题、名称和说明。

要建立汉字元件库并不难,方法如下:

在西文方式的GWBASIC环境下,运行本文所提供的TGHZ.BAS,它完成将汉字的点阵模向TANGO元件库源文件格式的转换,以便TANGO再进一步将它编译成元件库文件。关于TGHZ.BAS运行时的含义,在程序清单中说明。在运行TGHZ.BAS时,请注意两点:

(1)要选择一个16×16点阵的汉字库,拷入当前目录,作为待转换的原版,根据笔者经验,选择2.13汉字系统的HZK16汉字库较为合适,尤其是2.13版的HZK16更佳,其字符图集和汉字比较丰富齐全。

(2)由于TANGO对一个元件库的元件数限制在2000内,而HZK16中所含二级汉字及图符共81732个,因此只能分库建立汉字元件库。考虑到TANGO可同时调入三个元件库操作的特点,所以将字符图集及一级汉字分为三个库,其余二级汉字归入另外两个库。这样建库制作比较容易,以后使用比较方便。

TGHZ.BAS在运行时会动态显示正在转换的汉字区位码,整个转换工作数据处理量较大,完成一个库的转换大约需要10分钟(与CPU主频速度有关)。当5个分库转换结束以后,在磁盘上即产生5个*.SRC元件库的源文件。

然后退出GWBASIC,再启动TANGO的SLM程序,执行COMILE命令,将*.SRC编译成*.LIB文件。至此,建库工作即告完成。

在使用TANGO绘制电路图调用汉字时,应明确:汉字是以4位数字的区位码为名调用的,为防止与某些电子元件名称重复(比如CMOS元件有不少都用4位数字命名),可考虑汉字加入集中进行,此时将一级汉字的3个库一起调入使用。另外,手头上应准备一份区位码表供查阅,此项工作可用汉字系统打印完成。

根据实践,具体分库及编译完成情况如表1所示。

图1
图1 🔍原图 (877×378)

表中的压缩库是指将*.LIB文件经LHA.EXE压缩软件处理后形成*.LZH文件,备份在软盘上时将大大节约空间,5个压缩库文件不足一张360K的低密盘。

顺便提一下有关此项操作的命令(以其中一库为例,其余类似)。

将元件库文件压缩备份到A:盘上:

LHA A A: HZK—1 HZK—1.LIB <回车>

将A:盘压缩库文件恢复当前目录:

LHA E A:HZK—1<回车>

TGHZ.BAS程序清单见表2。

表2:TGHZ.GAS程序清单
g禕g

10 REN 本程序为TANGO/PROTEL软件制作汉字元件库源文件

20 CLEAR:CLS:OPTION BISE 1:DIM A%(16,16):D=1

25 PRINT"*****CREATE TANGO/PROTEL CHINESE LIBRARY*****"

30 REM 输入原汉字系统16×16阵字库文件名

31 INPUT"NAME OF CHINESE BASE:":F1¥

32 REM输入起始汉字区位码(0101~8794)

33 INPUT" INPUT START NUMBER *0101~8794):";C1

34 IF C1><101 OR C1>8794 THEN 33

35 REM 输入结汉字区位码(<8794)

36 INPUT:INPUT END NUMBER(<=8794):" ;C2

37 IF C2<C1 OR C2>8794 THEN 36

38 REM 将生成汉字元件库源文件取名为(*.SRC)

39 INPUT"INPUT CREATE NEW FILE’S NAME(*.SRC):" ;F2¥

40 PRINT"****OF!****" :PRINT" START:";STR¥(C1):PRINT" END:" ;STR¥(C2)

50 OPEN F1¥AS #1 LEN=32:FIELD #1,32 AS A¥

55 OPEN" R" ,# 2,F2¥,1:FIELD #2,1 AS B¥

60 QM%=C1\100:WM%+C1-QM%*100

65 LOCATE 9,1:PRINT" TRANSLATED;" ;STR¥(C1)

70 REM 根据区位码获取汉字点阵信息,存入数组A%(I%,J%)之中

80 RE%=(QM%-1)*94+WM%:GET #1,RE%: W¥=A¥

100 FOR K%=32 TO 1 STEP-1:B%=ASC(MID¥(W¥,K%,1)):I%-(K%-1)\2+1

110 FOR L%=8 TO 1 STEP-1:J%=(((K%-1)*8+L%-1)MOD 16)+1

120 A%(I%,J%)= B% MOD 2: B%=B%\2:NEXT L%:NEXT K%

130 D1=C1\1000:D2=(C1-D1*1000)\100:rem"\"表示整除运算

140 D3=(C1-D1*1000-D2*100)\10:D4=(C1-D1*1000-D2*200-D3*10)

150 LSET B¥=CHR¥(39):GOSUB 500

151 LSET B¥=CHR¥(D1+48);GOSUB 500

152 LSET B¥=CHR¥(D2+48):GOSUB 500

153 LSET B¥=CHR¥(D3+48):GOSUB 500

154 LSET B¥=CHR¥(D4+48):GOSUB 500

155 LSET B¥=CHR¥(39):GOSUB 500

160 LSET B¥=CHR¥(32):GOSUB 500

161 LSET B¥=CHR¥(80):GOSUB 500

162 LSET B¥=CHR¥(79):GOSUB 500

163 LSET B¥=CHR¥(87):GOSUB 500

164 LSET B¥=CHR¥(69):GOSUB 500

165 LSET B¥=CHR¥(82):GOSUB 500

166 LSET B¥=CHR¥(13):GOSUB 500

167 LSET B¥=CHR¥(10):GOSUB 500

170 LSET B¥=CHR¥(50):GOSUB 500

171 LSET B¥=CHR¥(32):GOSUB 500

172 LSET B¥=CHR¥(50):GOSUB 500

173 LSET B¥=CHR¥(32):GOSUB 500

174 LSET B¥=CHR¥(49):GOSUB 500

175 FOR R=1 TO 11:LSET B¥=CHR¥(32):GOSUB 500:NEXT R

176 LSET B¥=CHR¥(13):GOSUB 500

177 LSET B¥=CHR¥(10):GOSUB 500

180 LSET B¥=CHR¥(66):GOSUB 500

181 LSET B¥=CHR¥(73):GOSUB 500

182 LSET B¥=CHR¥(84):GOSUB 500

183 LSET B¥=CHR¥(77):GOSUB 500

184 LSET B¥=CHR¥(65):GOSUB 500

185 LSET B¥=CHR¥(80):GOSUB 500

186 LSET B¥=CHR¥(13):GOSUB 500

187 LSET B¥=CHR¥(10):GOSUB 500

190 LSET B¥=CHR¥(123): GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500:GOSUB 500

191 LSET B¥=CHR¥(48): GOSUB 500: LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600

200 FOR I%=1 TO 16

210 LSET B¥=CHR¥(123): GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500

211 IF I%=1 THEN GOSUB 500:LSET B¥=CHR¥(49):GOSUB 500

212 IF I%=2 THEN GOSUB 500:LSET B¥=CHR¥(50):GOSUB 500

213 IF I%=3 THEN GOSUB 500:LSET B¥=CHR¥(51):GOSUB 500

214 IF I%=4 THEN GOSUB 500:LSET B¥=CHR¥(52):GOSUB 500

215 IF I%=5 THEN GOSUB 500:LSET B¥=CHR¥(53):GOSUB 500

216 IF I%=6 THEN GOSUB 500:LSET B¥=CHR¥(54):GOSUB 500

217 IF I%=7 THEN GOSUB 500:LSET B¥=CHR¥(55):GOSUB 500

218 IF I%=8 THEN GOSUB 500:LSET B¥=CHR¥(56):GOSUB 500

219 IF I%=9 THEN GOSUB 500:LSET B¥=CHR¥(57):GOSUB 500

220 IF I%=10 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(48):GOSUB 500

221 IF I%=11 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(49):GOSUB 500

222 IF I%=12 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(50):GOSUB 500

223 IF I%=13 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(51):GOSUB 500

224 IF I%=14 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(52):GOSUB 500

225 IF I%=15 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(53):GOSUB 500

226 IF I%=16 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(54):GOSUB 500

230 LSET B¥=CHR¥(125):GOSUB 500

250 FOR J%=1 TO 16

260 LSET B¥=CHR¥(46-A%(I%,J%)*11):GOSUB 500

270 NEXT J%

280 FOR K=1 TO 5:LSET B¥=CHR¥(46):GOSUB 500:NEXT K

285 LSET B¥=CHR¥(13):GOSUB 500

286 LSET B¥=CHR¥(10):GOSUB 500

290 NEXT I%

300 LSET B¥=CHR¥(123);GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500

301 LSET B¥=CHR¥(49) :GOSUB 500:LSET B¥=CHR¥(55):GOSUB 500

302 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600

303 LSET B¥=CHR¥(123):GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500

304 LSET B¥=CHR¥(49) :GOSUB 500:LSET B¥=CHR¥(56):GOSUB 500

305 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600

306 LSET B¥=CHR¥(123):GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500

307 LSET B¥=CHR¥(49) :GOSUB 500: LSET B¥=CHR¥(57):GOSUB 500

308 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600

309 LSET B¥=CHR¥(123):GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500

310 LSET B¥=CHR¥(50) :GOSUB 500: LSET B¥=CHR¥(48):GOSUB 500

311 LSET B¥=CHR¥(125):GOSUB 500: GOSUB 600

320 LSET B¥=CHR¥(13) :GOSUB 500: LSET B¥=CHR¥(10):GOSUB 500

330 C1=C1+1:IF C1=995 THEN C1=1601

340 CC=C1-(C1\100)*100:IF CC>94 THEN C1=C1+6

350 IF C1>C2 THEN CLOSE:END

360 GOTO 60

500 PUT #2,D:D=D+1:RETURN

600 FOR R=1 TO 21:LSET B¥=CHR¥(46):GOSUB500:NEXT R

610 LSET B¥=CHR¥(13): GOSUB 500:LSET B¥=CHR¥(10):GOSUB 500:RETURN