縱橫碼-以數字編碼的輸入法

ckcsys.com.hk



開發AUTOCAD的縱橫漢字環境

常州技術師範學院計算機科學系
鄭成增、陳志鋒、尹長青

一、前言
目前,在市場上流行著各種各樣的CAD系統,但是在眾多的產品中,AUTOCAD使用最為普遍。為了促進縱橫漢字在CAD領域中的應用,同時也滿足CAD使用者希望有一種能適用於任何AUTOCAD環境的漢字系統,筆者進行了AUTOCAD的縱橫漢字環境(以下簡稱縱橫環境)的開發。

二、開發縱橫環境的基本構思
開發縱橫環境,實現漢化AUTOCAD,從而使用者可以輕鬆地在AUTOCAD下應用縱橫漢字輸入法進行漢字的標註、說明(在機械製圖時,對標註、說明,大都要求使用仿宋字體),即實現了AUTOCAD應用的本地化。

1、本環境主要完成下述基本功能:
(1)在AUTOCAD圖形螢幕某個區域(即漢字輸入提示區)用中文提示提供使用者進行漢字輸入的選擇:
(2)截獲鍵盤輸入,採用縱橫碼、區位、西文等輸入法實現漢字的輸入;
(3)調用矢量漢字庫(HZTXT.SHX)中的漢字標註到AUTOCAD圖形中;
2、開發縱橫環境的程式模塊:
(1)矢量漢字庫(HZTXT.SHX)的製作;
(2)漢字在AUTOCAD中的顯示;
(3)縱橫漢字輸入法模塊;
(4)區位漢字輸入法模塊;
(5)漢字在AUTOCAD中的標註模塊;
(6)其它輔助功能模塊
如圖一所示即為本系統功能模塊。


圖一 程式功能模塊

三、各功能模塊的實現
1、矢量漢字庫(HZTXT.SHX)的製作
在AUTOCAD中,形(SHAPE)是特殊的實體,可以用線、弧、圓來定義。形狀常見的是用於定義文字字體。形狀是用專用格式文字存貯在磁碟中的檔案(副檔名為.SHP),將其編譯後即可被AUTOCAD所使用。在AUTOCAD中,每個形狀必須具有1到255之間的唯一的號碼。文字字體(如字母、數字等ASCII字符)要求與ASCII碼中的每個字符的值都對應;其它形狀可以分配給任意的號碼。

每個形狀定義具有以下格式的標題行:shapenumber, defbytes, shapename
後面跟有用逗號分隔和以0(零)表示該形態技術的一行或多行形狀說明字節。在形狀檔案中的所有數碼,帶有前導0意味著是十六進制數,否則為十進制數。

shapenumber為形狀代碼,一般為1到255之間的唯一號碼;
difbytes用於說明所需資料字節的數量,包括結束碼0。每個形狀不超過10000個字節。
shapename用於定義形狀名,如果形狀名中含有小寫字母,則形狀名字將不存貯。

形狀說明字節包括兩部分:矢量長量,方向代碼。高4位是矢量長度,低四位是方向代碼。方向與方向代碼如圖二所示:


圖二

除上述基本的形狀說明字節外,還定義幾個專用碼(十進制)。
0 形狀定義結束
1 進入繪圖方式
2 退出繪圖方式
3 用下一個字節除矢量長度
4 用下一個字節乘矢量長度
5 將當前位置壓入堆棧
6 從堆棧中彈出當前位置
7 繪製由下一個字節給出的子形狀號
8 由下兩個字節給出的X-Y相對偏移量
9 由(0,0)結束多個X-Y相對偏移量
10 由下兩個字節定義的八分圓弧
11 由下五個字節定義的小段
12 根據X-Y位移量和凸度定義的弧
13 多個指定凸度的弧
14 只明是垂直文字字體時才處理下一條命令

文字字體是在上述形狀檔案的基礎上,採用形狀來定義的,形狀編號對應於每個字符的ASCII。
文字字體檔案必須包含一個特殊的形狀編號,存貯有關字體自身的資訊。格式如下:
*0,4,字體名
above,below,modes,0
above規定大寫字母超過基線向量長度的大小,below規定小寫字母在基線下向量的大小,定義了基本字符尺寸和高度的比例因子。
modes通常為0;當為雙向(水平或垂直)字體,modes為2。只有modes為2時,專用碼14才起作用。
為了使AUTOCAD的通用性更好,AUTOCAD提供了一種稱為大字體文體檔案的形狀定義檔案來滿足漢字等多種文字的使用。

一個大字體形狀的第一行必須為:
*BIGFONT nchars, nranges, b1, e1, b2, e2 ...
nchars是在這個集合中所定義的字符數的近似值,如果實際值超過其10%則出錯。
nranges表示需要使用連續的幾個數碼用作特殊字符(如漢字需用兩個字節表示,則nranges為2)。
(b1,e1),(b2,e2),..., 等定義這樣範圍的起始碼和中止碼。

常見矢量漢字庫檔案是一個二進制檔案,UCDOS3.1的矢量漢字庫由索引表頭和字形資料兩部分組成,字形資料部分的基本單元有4個字節,頭兩個字節為某一線段的起始偏移位置,後兩個字節為該線段的終止偏移位置。根據UCDOS的矢量字庫生成形狀檔案,將該形狀檔案編譯即可得到所需的矢量字庫hztxt.shx。

2.漢字直接寫屏技術在AUTOCAD中的實現
漢字顯示的基本方法是將要顯示的漢字的字模資料從漢字庫中讀出,然後把整個漢字一個點一個點地畫出來。
為了提高漢字顯示的速度,可以採用直接寫VRAM的方法。VGA卡在640X480的16色顯示模式下, VRAM被分成4個獨立的位平面,各位平面有相同的地址空間,其首地址為A000:0000H,可通過圖形控制器等特殊硬體來實現對每個位平面的獨立擔保。其步驟為:

設定好VRAM的首地址為001C:0000保護模式;
根據點的座標計算該點的VRAM中的偏移地址,為簡單化,該點的橫座標為8倍數,計算公式為:Y*80+X/8
.通過圖形控制器索引0號功能,設定顏色;
.通過圖形控制器索引1號功能,設定遮罩寫允許;
.通過圖形控制器索引3號功能,設定畫點方式(重寫、與、或、異或);一般為異或方式(XOR);
.通過圖形控制器索引8號功能,設定位遮罩寄存器為一次畫八個點;
.輸出資料,實現顯示;
.顯示完成後,將上述圖形控制器寄存器恢復到初值。

3、漢字輸入模塊的設計
漢字輸入模塊用於將使用者從鍵盤上輸入的資訊轉化成漢字內碼。它由兩部分組成:編碼方案(即漢字輸入法)和主控程式。
主控程式主要完成以下幾個功能:
.接管鍵盤,根據使用者輸入的不同進行相應的處理;
.在輸入過程中,允許進行輸入法的轉換;
.輸入過程中若有錯誤,則可進行修改;
.當輸入無效時,應鳴叫示意

(1)縱橫輸入法的實現
本模塊的功能將鍵盤的數字轉換成相應的漢字內碼,為簡單起見,將給縱橫碼表按數字大小排序。具體過程如下:
1. 首先建立一個縱橫碼索引表,該表包含了每一組縱橫碼所對應的所有漢字;
2. 根據使用者輸入的數字在提示行中顯示出來;
3. 將所有符合條件的漢字在提示行中顯示出來;
4. 讓使用者從重碼字選擇所需的字;
5. 取得該字的內碼。

(2)區位輸入法程式
本模塊的功能是把使用者輸入的區位碼轉換成對應的漢字內碼。漢字的內碼一般有兩個字節組成,每個字節的最高位為1,由區位碼到漢字內碼的轉換比較簡單,公式如下:
漢字內碼高字節=區碼+160
漢字內碼低字節=區碼+160
假設區碼用變量QU,位碼用變量WEI表示,字符串變量HZNM存貯轉換後的漢字內碼,則可以採用下述語句實現:
sprintf(HZNM,"%c%c",Q+160,WEI+160);

4、漢字標註模塊的設計
漢字標註是漢化AUTOCAD的目的所在,本模塊只需設定好漢字字形,然後調用AUTOCAD的標準TEXT命令將使用者從鍵盤輸入的漢字字符串在圖形中標註出來。

在標註漢字之前,首先要讓AUTOCAD準備好漢字的形狀檔案(HZTXT.SHX)和西文的形狀檔案(TXT.SHX),即定義字符STYLE。若字形名為HZCAD,則定義過程如下:
Command: STYLE
Style name <STANDARD>: HZCAD
Text file <TXT>: TXT, HZTXT
... ... (以下各項採用預設值即可)
在定義好定型後,即可調用TEXT命令來實現漢字在圖形中的標註。首先要求使用者輸入標註方式等內容,然後將這些參數和從鍵盤上輸入的漢字串一起傳送到TEXT命令,TEXT命令會自動處理漢字及西文,從相應的SHX檔案中取出對應的字形資料,並標註圖形中。

5、輔助模塊的設計
(1)實時幫助系統
當使用者鍵入[F1],即調用漢字顯示模塊顯示幫助資訊,使使用者能正確使用本軟體,退出時採用AUTOCAD的READRAW命令即可恢復原圖。
(2)命令行的漢字提示
採用漢字顯示模塊,設計一個ADS專用函數HZ_PRO(),在提示行顯示出漢字字符串,提示使用者的輸入。

四、結束語
本縱橫環境實現了在586/122 PC上,配合AUTOCAD12.0英文版,採用縱橫輸入法進行漢字的輸入、標註,效果很好。

主要參考文獻:
[1]錢培德等,微機漢字操作系統實用開發技術,北京師範大學出版社,1992
[2]縱橫漢字信息技術研究所,縱橫漢字系統,清華大學出版社,1994
[3]鄭成增等,金工實習技能操作培訓計算機CAI-CAD系統,計算機科學技術應用,1995.6
[4]王福軍,AutoCAD R12/R13應用C程式設計,電子工業出版社,1995

返回上頁


line

[香港豐利科技有限公司] 版權所有
Copyright © 1999 First Link Technologies Limited. All Rights Reserved