上一頁 目錄 下一頁

十、字形產生器技術說明


十、字形產生器技術說明


1.功能要求:
1-1 如何在最有效的空間,提供最多、最全的字形?
由於目前我們所採用的中樞是8088 CPU,其繪圖功能極差,且對內存記憶的
控制也考慮欠週。以「中文字形產生器」這樣大的軟體工程,莫說設計不容易,
要想達到空間小、速度快的目標,非要有極為週詳的準備不可。
8088 CPU的「段」單位為64KB,也就是說如能在此空間內完成,自然能免除
很多不必要的麻煩。問題是字首加字身,已經超過了一萬個。而每一個字形起碼
要一個「索引碼」,如果冠以輸入碼,則僅僅這些碼,就已經佔了50KB以上。所
以,事先一定要規劃好資料的結構,如果資料結構浪費空間太多,不論程式寫得
多麼精簡,都不足以彌補。
我們先決定將輸入碼切成兩段,一為字首碼,一為字身碼。這正符合我們設
計的原意,也就是「形聲」的結構。字首碼共需十個位元,字身碼需十五個位元
,實際上與取碼的規則完全一致。字首碼可以視作「索引碼」,建一個索引住址
檔,只不過是25*26*2個字元而已。
因為24個字母加上重複鍵共25個,故採用由一到廿五的數位代表之,第一碼
一定有碼,故恰好夠用。而第二碼以後則可能遇到空格,空格要用0表示,故而
多了一個碼,是為26,再加上索引指住址區,要用二字元表示,故再乘二。
在住址區的資料有一萬多筆,每一筆皆由一個「字身碼」表示之,字身碼為
15位元,可以合併為二字元。兩萬筆就要兩萬個字元,為了未來收字更多的準備
,必需事先保留空間。所以,在這個段中,我們只放字身的「對照碼」,以供輸
入字碼的對照用。
在找到該字之後,必然要有一些處理的資料,以資組成字形。這些資料要一
一對應於對照碼,而且要與對照碼段的結構完全相同,否則當資料一大,就會產
生無窮的後遺症。因此,我們把資料段也設為二字元的結構,如果資料長度超過
,便向橫的平面發展,以增加「段」的方式,以補不足。
這一來,就有了我們特殊定義的「指令」,這些指令,我們將在第4項詳細介紹之。
最後,我們實際設計的結果,全部資料共佔了約140 KB空間。
其次,是字形處理的功能問題。對字庫而言,字形只要能做出來,要多大都
不是問題,甚至於,大字遠比小字要容易設計得多。問題在:大字所需要的點陣
空間多,一個128*128的字形,要佔2KB緩衝區。再加上各種變化處理,至少要兩
倍以上的空間,才能做各種加工,光是放字形,6KB就用掉了。
256*256 呢?又要乘四,是24KB,512*512是96KB,字越大,空間越大。 對
字形產生器的設計來說,空間都浪費在緩衝區上,是不是有必要呢?
所以,字形的大小,應該先看目前的其他週邊設施,其邊際效益又是如何?
以顯示螢幕來說,一個字就佔滿螢幕,似乎不太實際。而且列印機最常用的是18
0 DPI ,常用的雷射印表機也不過是300 DPI ,半吋見方一個字應該夠用了。
更重要的是,程式處理速度要快,螢幕上每秒鐘至少要處理一個畫面,否則
會令使用者感到不耐煩。基於8088的特性,每次繪圖時,一到八點的效率最高,
九點到十六點就要多費一倍的時間。而八點粗的筆畫,最多只能提供100*100 大
小。所以多方考慮的結果,我決定先做128*128 的低精度字庫,以供微電腦辦公
室自動化之用。如果有必要,再用其他晶片,專門開發一顆高精度的字形產生器。
基於上述的理念,我們完成了目前這一套「全漢字字庫」,能提供六萬個以
上,128*128 各種比例,多種字體的字形產生器。所佔空間為170KB,在10MHZ的
頻率下每秒鐘可提供40*40的字形達400個。

1-2 如何能用軟體程式,不加輔助計算器,而能高速處理字形?
這又是一項新的挑戰,文字就是圖形,僅僅直線問題不大,一碰到曲線,就
涉及多次方程式的運算。而一涉及運算,雖然是在所謂的「計算機」上,其計算
速度,就顯著地慢了下來。
有什麼方法能提高計算速度呢?我前後花了很多時間,想了不少方案,最後
我決定採用「多邊形逼進圓」的觀念,用直線畫多邊形,以組成曲線。
然而,要知道每個弧所需要的邊,也涉及運算,如果能先決定多少點用多少
邊,則又簡單得多了。為了這個問題,我做了些試驗,發現由32點到96點的筆畫
,在一個象限中,可以用六條線完成。也就是說,半徑值在18點到96點之間者,
其弧約為3-13之間,視覺即可以接受了。
當然,這並非說六條線段組成的弧最理想,而是說這樣做不論在速度及空間
要求上,都最為經濟。至於上限到128或當筆畫短於6時,其效果上就難免有所犧牲了。
決定了六條線段,只要算出每條線段的X:Y 值,為了避免運算,我決定建表
。因為圓有對稱的性質,所以X:Y與Y:X相當於其對應值,反向使用即可。這一來
,即使建表,也只需求建一半。由一至128,所需的空間是128*6字元,再若需要
五種不同的角度,也不過多五倍的空間而已。
又基於對稱的特性,在X、Y表值不等時,則相當於圓心重合的橢圓形。再將
五個表配合使用,在我多方試驗下,發現用三組即可以得到近似的效果。
茲以X=10,Y=10之圓,求其第四象限之弧為例,查第三個表,得到:1, 1, 1, 2, 2, 3
X 之值由X1至X6,順序分配,Y1 至Y6則由後向分配,得到:
X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 X6 Y6
1 3 1 2 1 2 2 1 2 1 3 1

以之作圖:

X:1 2 3 4 5 6 7 8 9 10 DOTS
├─┘├┘├┘│││
X6 X5 X4 X3X2X1
0 1──┐
0 2 ├Y1
0 3──┘
0 4──┐
0 5──┴Y2
0 6──┐
0 7──┴Y3
0 0 8───Y4
0 0 9───Y5
0 0 0 10───Y6

如以 Y=10 查第三表如上,再以 X=15 查第二表為:2,2,2,2,3,4
X 之值由X1至X6,順序分配,Y1至Y6則由後向前分配,得到:
X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 X6 Y6
2 3 2 2 2 2 2 1 3 1 4 1
以之作圖:
X:1 2 3 4 5 6 7 8 9 A B C D E F DOTS
├──┘├─┘├┘├┘├┘├┘
X6 X5 X4 X3 X2 X1
0 1──┐
0 2 ├Y1
0 3──┘
0 4──┐
0 5──┴Y2
0 6──┐
0 7──┴Y3
0 0 8───Y4
0 0 0 9───Y5
0 0 0 0 10───Y6
這個弧度就要小得多,所以只要用三個表,即可得到五種弧度,各種比值的
曲線。除了空間小以外,由於全用直線作圖,還具有速度特快的優點。
當然,這種方法的精度不足,曲線的美觀不夠。不過,我認為這應該是所下
的功夫多少的問題。我個人想做的事太多,不可能停留在這種技術上,無休無止
的鑽研。正因為我對這種技術很有信心,所以決定公之於眾,希望有心的朋友,
能繼續努力研究下去,說不定有很理想的結果。
上述的三個表,我是先畫出來後,再分割成六條線段的。又由於我耐心不夠
,圖畫了一半,就利用「推理」,把其餘的數據「推演出來」,最後再加以調整
,所以並不很美觀。
我建議各位用數學公式,或用繪圖,仔細地描繪一遍,相信會好得多。此外
在應用時,線段的比例,也應該隨長度而變,精度一定會高得多。

1-3 用什麼方法,將字形有效地提供給使用者?
字畫妥當以後,應該如何提供給使用者?什麼方式最有效呢?
我們已經決定了最大值為128*128 點矩陣,字形畫在矩陣中,此有兩種可行
的方式。一為「連續定址」,由左至右,以字元為單位,然後由上而下,點陣總
長度即為左、右的乘積除以八再加一。
這種方式,對字庫程式的寫作有利,對應用者而言卻不夠直觀。取字形者,
可能希望能在一張「空白紙」上,看到全部的字形,用起來才方便。
所以,我們便設計了一個「空白緩衝區」,固定為128*128 點。由左上角寫
起,向右下角延伸。甚至於,使用者可以決定寫在這個緩衝區的任意位置。
於是,新的觀念又產生了,既然可以寫在任何位置,則可以避免「點陣移位
」的麻煩。因為記憶區的資料,是以字元為單位,而人看到的是點陣,這兩者間
有一至八點的差異。一般處理的方法,是在緩衝區中,根據實際的需要,一點一
點地位移,直到適當的點位為止。這種做法,在大量的文字顯示或列印時,尤其
浪費時間。
這種做法,即相當於將在一張紙上展開,視野廣闊了,舉凡字形的各種變化
,如空心、立體、投影、斜體、套邊等,都可以輕易完成。不用這種方式,處理
的過程將複雜得多,空間佔的也要大些。
這些製作前的考慮至關緊要,有些字庫採用前述連續定址法,似乎是理所當
然的事。可是細加研究,就會發現不僅應用有欠方便,要想字形加工,非得先把
字形搬到一個「展開」的緩衝區中,加工完畢,還要再裝回來。
由於我們可以將字形寫在任何位置,所以,只要知道左側開始的點位,以參
數通知字庫程式。這是唯一不方便之處。若用連續定址法,不必再送參數。
我們也考慮過利用外界傳入的字形緩衝區,大小及安排方式都由使用者決定
,這樣更為靈活。可是基於效率因素,8088 CPU有「段」的限制,在畫字時,如
果資料段不同,則在處理上平白地增加了些原本不必要的指令,加以目前的PC/A
T 系統空間有限,所以暫時不擬提供這種功能。
我們發展字庫的目標,不是為了提供專業排版或者其他高級軟體的解決方案
。我們認為中文的普及化意義更大,在IBM PC/AT上,128點目前已經相當夠用了
。至於專業用的字庫,尚需進一步的努力,到那時,隨著字形的增大,緩衝區自
當必需由外界提供,甚至要專門設計硬體來配合了。

下圖為字庫所提供的標準格式:
┌┬─────────────┬────┬─────┬──────┐
││ . │ . │ . │ . │
││ . │ . │ . │ . │
││ 字形區 . │ . │ . │ . │
││ 60 │ . │ . │ . │
││ DOTS│ . │ . │ . │
││ . │ 80 │ . │ . │
││←左側起點 . │ DOTS│ . │ . │
││ . │ . │ . │ . │
││ . │ . │ 94 │ . │
││ . │ . │ DOTS│ . │
││……..56 DOTS………. │ . │ . │ . │
││ . │ . │ . │ . │
│├─────────────┘ . │ . │ 128 │
││ . │ . │ DOTS│
││………….76 DOTS…………… │ . │ . │
││ . │ . │ . │
│├──────────────────┘ . │ . │
││ . │ . │
││ . │ . │
││………………..90 DOTS……………….. │ . │
││ . │ . │
│├────────────────────────┘ . │
││ . │
││ . │
││ . │
││ . │
││ . │
││…………………….128 DOTS………………………. │
││ │
└────────────────────────────────┘
2.參數設定:
┌────┬──────────────────┬─────────┐
│功能項目│ 參 數 說 明 │ 備 註 │
├────┼──────────────────┼─────────┤
│BX=0 │ │ │
│ 取字形│DL=n, n 為字形點陣左端字元之起點位置│n=0-7,由用者指定 │
│ │ * * * │ │
│ │1,中文狀態:置五個倉頡序碼 │序碼=倉頡碼 A至Y│
│ │ DS:[SI],[SI+1],[SI+2],[SI+3], │ 即序位 1至25│
│ │ [SI+4] │輸入碼 │
│ │ 例:[01,00,00,00,00] 為'日’ │00表示無輸入碼 │
│ │ [14,07,08,01,06] 為'鸛’ │ │
│ │ * * * │ │
│ │ DS:[SI-1]=40H 中文字形外加圓框 │餘同上 │
│ │2,拼音文字狀態: │ │
│ │ [SI]=ASCII │輸入碼,視設定類別│
│ │ [SI+1]=指令 │ │
│ │ 2--19H= 字距定義 │任意字距 │
│ │ 20H= 英文為中文之半 │固定字距 │
│ │ 7FH= 英文同中文大小 │固定字距 │
│ │ 2EH= 連續虛點 │[SI+2]輸出點之直徑│
│ │ * * * │ │
│ │3,特殊狀態: │ │
│ │ [SI-1]之位元定義 │ │
│ │ b7=0 b6=1 圖形嵌字, │英文最多三個字符 │
│ │ b7=1 b6=1 圖形嵌字,加反白 │中文最多一字 │
│ │ 圖形:b5b4b3=000h 圓形 │ │
│ │ =001h 矩形 │ │
│ │ =002h 正三角形 │ │
│ │ =003h 倒三角形 │ │
└────┴──────────────────┴─────────┘
┌────┬──────────────────┬─────────┐
│功能項目│ 參 數 說 明 │ 備 註 │
├────┼──────────────────┼─────────┤
│ │ =004h 菱形 │ │
│ │ =005h 心形 │ │
│ │ b7=1 b6=0 比例字形 (Proportion) │供拼音字比例變化用│
│ │ [SI+1]=X1 左限 │比值由外界輸入 │
│ │ [SI+2]=X2 右限 │ │
│ │ [SI+3]=Y1 上限 │ │
│ │ [SI+4]=Y2 下限 │ │
│ │ b7=0 b6=0 排列方式 │ │
│ │ b4b3b2b1b0=10h 旋轉90度 │僅僅方向性符號直排│
│ │ b4b3b2b1b0=11h 旋轉90度 │所有符號直排 │
└────┴──────────────────┴─────────┘

2-1 取字形:先設定妥各種參數後,在參數未改變前,可以連續用倉頡碼取所需之設
定字形。
字形之起點關係到顯示及列印,可以經由 DL 之值通知字庫。此值由0至7,
視使用情況而定。
一般點陣字形,除了採用硬體結構,利用匯流排控制外,在遇到起點不在一
個字元的最左側時,唯有用點陣移位的方式,移到正確的位置。用程式來移位是
很浪費效率的手段,所以我們在「寫字」之時,就按照輸入的位置來安排,以提
高速度。
在中文態時,只要送入五個「倉頡序碼」即可。所謂倉頡序碼,是指倉頡碼
自鍵盤輸入後,僅取各碼最後的五個位元。這樣做有利於處理速度,因為我們的
中文系統採用的四字元內碼,就是將五個輸入序碼排列而得。當然,其他與我們
系統理念不同者,其處理效率難免受到影響。
由於我們的字形產生器是根據倉頡碼所提供的訊息,為基本字形參數。因此
,只要有倉頡碼,不需要任何對照表,就可以「解出」倉頡碼中所表達的「結構
」,而得到字形。這是一種設計旳藝術,我們在設計倉頡碼時,就已經週詳地考
慮了中國文字的各種功能,然後在統一的理念下,設計出具有六大文字機能的字
碼。有了碼,就可以還原成為字形,且不佔系統空間,使中文能靈活應用。
我們稱這種設計理念為「生機結構」,正如同物質元素週期表一般,有了週
期表,可以根據其性質,組成各種物質。有了文字的字形元素則得到組合的字形
。同理,在倉頡碼中,還蘊含了供辨識用的字碼元素;供語音辨識用的語音元素
;供概念理解所需的概念元素等,只要假以時日,我們都將一一釋放出來,將中
國文字的優越性發揚光大。
這些訊息,讀者們只要肯虛心揣摩,不難觸類旁通,其奧妙之處,如人飲水
,冰暖自知。

2-2 特殊設計:
本字庫尚有很多特殊功能,例如在字形外加圓框等,當然也可加方框或者任
意形。原理很簡單,在幾何圖形畫完後,在其中適當的位置,寫上字形即可。此
外,圖形中還可以加反白,甚至可以套花等等。
實際上,字庫相當於一個小型的圖形生產工廠,對於各種排版的特殊需求,
都很容易解決。只是,這些工作要有美工、排版等專家指導,再加上細心及時間
,幾乎沒有什麼做不到的事。
英文以及其他任何拼音文字,都可以設計,在參數輸入後,可用 ASCII字符
取用字形,所有其他功能應用方式全同。
在拼音文字有一項重要的需求,就是比例字形。因為拼音文字的符號簡單,
有的僅佔很小的位置,有些則比較大,不能使用等量空間。文字所佔的空間不同
,又導致各行的長度難以對齊,必須再加調整。所以就有了比例字形的需要,不
論字的大小、及空間的大小,都因比例而定者,即稱之為比例字形。
對字庫而言,只要按照規定,即可輸出所需的比例。
還有字的排列方式,這是針對中文的特殊要求而設計。中文有直排,也有橫
排,無一成規。為了應用的方便,我們設計了一些所謂「方向性」的符號,如“
『”及“〔”、“{”等。這類符號,只要改變排列方式,都會自動旋轉90度。
    但是字庫不可能知道外界的需要,需要使用者以參數告知。
另外,所有的符號都需有旋轉的功能。總之,為了應用的方便,只要想得到
的功能,都可以透過參數的溝通,利用字庫的靈活機能,加以實現。

2-3 參數輸入:
參數有多種輸入方式,有屬於「集體」應用的,輸入時為了效率,通常是採
用一次設定的方式。亦即在文字處理時,可以連續運用,不必每次考慮。有些參
數則可能為特殊的需求,只需使用一次。
另外,一些在輸入後還需要相當手續加以處理的參數,為了工作效率,也必
須先行輸入。總之,處理輸入的參數,和設計參數的應用介面,需要從很多不同
的角度去研究,才能得到理想的效果。
如果只是臨時用的,這種參數必須隨著字碼同時輸入,所以我們留了一個字
元,以供溝通。
這就是輸入碼前面的應用指令,稱之為「特殊狀態」。我們限於時間、人力
、財力,目前僅能完成前表所載的一些功能,實際上,其潛力決不止於此。這也
是我們希望公開全部技術,以供有心人士大展鴻圖的根本原因。
由於功能組合性太多,所以採用位元定義方式,目前,我們僅定義了一部份
,還留有很多空間。甚至於在此字元之外,尚可以用暫存器定義,設計各種有實
用價值的功能。
用位元定義的排列組合甚多,建議讀者們自行將此組合展開,以便在程式中應用之。

┌────┬──────────────────┬─────────┐
│BX=1 │無 │ │
│ 繁體字│ │ │
│ │ * * * │ │
│BX=2 │無 │ │
│ 簡體字│ │ │
└────┴──────────────────┴─────────┘

本字庫中存有繁、簡兩套字體,從整個文化層面來考慮,繁、簡兩種字體,
本來就只是一時的權宜之計。隨著環境的改變,文字終將合而為一,至於究竟繁
體、簡體,何者為佳,則當由後人決定。我們從事文化工作,唯一的責任是保留
這些文字,不偏不倚,以供應用及選擇。
當繁、簡體狀態設定後,系統旗號即可控制相關內碼,以致於在任何情況下
,繁、簡體皆能同用、或相互轉換。
┌────┬──────────────────┬─────────┐
│BX=3 │ │ │
│ 定義 │CL=0 單線體 直粗一點 │供橫向19點以下用 │
│ │CL=1 細明 直粗兩點 │ │
│ │CL=2 輕明 直粗三點 │ │
│ │CL=3 中明 直粗四點 │ │
│ │CL=4 粗明 直粗六點 │ │
│ │CL=5 重明 直粗八點 │高級版最粗為12點 │
│ │CH=n n 值相當於CL,但為明體之橫厚 │n=0 表示常態 │
│ │ * * * │ │
│ │CL=129 細黑 橫直粗二點 │ │
│ │CL=130 輕黑 橫直粗三點 │ │
│ │CL=131 中黑 橫直粗四點 │ │
│ │CL=132 粗黑 橫直粗六點 │ │
│ │CL=133 重黑 橫直粗八點 │高級版最粗為12點 │
│ │ * * * │ │
│ │CL=149 中圓 橫直粗四點 │限用於48點以上 │
│ │CL=150 粗圓 橫直粗六點 │同上 │
│ │CL=151 重圓 橫直粗八點 │同上 │
│ │** 以下功能初級版不提供 │ │
│ │CL=192 宋體 橫直粗為橫向1/24 │限用於48點以上 │
│ │CL=193 楷體 橫直粗為橫向1/12 │同上 │
│ │CL=194 隸體 橫直粗為橫向1/12 │同上 │
└────┴──────────────────┴─────────┘
┌────┬──────────────────┬─────────┐
│ BX=3 │ * * * │ │
│ │DH=X向之點長 │即橫向寬 │
│ │DL=Y向之點長 │即縱向高 │
└────┴──────────────────┴─────────┘
字形所有的參數,都在此一次設定,在最初設計時,尚不失為一種方便的策
略。可是,隨著觀念的拓展,發現用起來過於麻煩,所以尚有待修改。
原因之一是,當我設計字庫之初,只知道理念絕對可行,卻沒有想到功能能
強到如今的地步,更遑論未來的發展了。
首先是字級限於128*128 以下,所以筆畫最粗只用到八點。當然要畫粗一點
不是難事,問題在於全面的配合,與以往的一些包袱。
所應注意者,由於這些排列組合的可能性太高,我們在發展的時間內,不可
能一個一個字地全部檢查到,所以一定會有些比例很特別的字形,產生了不可預
知的情況。如果有足夠的時間,自當加以改進,也希望讀者們加以指正。
在參數中,CL的高四位元定字體,低四位元定字粗。對最初只有三種字體,
八種字粗說來,委實綽綽有餘了。但若將字級放大,字體加全,粗度增加,顯然
將有不少問題。
我的解決方案是,另行規定新的參數,這個只供過去的一些程式使用。
直向筆畫最多只有八點粗,的確是不夠用,但是基於 8088 CPU 的特性,為
了速度,不得不如此。在高精度的字庫中,字粗的上限應以筆畫之間的距離為限
。由於字是由繪圖程式所畫,所以只要事先設定了參數,不僅直向,連橫向的筆
畫也可以加以控制。只是一般鉛字沒有這種可能,所以很少人有此要求,我提供
了這種功能,很怕弄巧成拙。因為橫向筆畫一旦粗過直向,在某些情況下會極其
難看,而使用者未必記得他所設定的橫向粗細。所以我限定在每次使用前都必須
重新設置,或許不太方便,然而這只是輔助的功能,關係不大。
CL的高四位定字體,在初我只打算做明體及黑體兩種,所以為了省事,只將
CL最高位元設為旗號。0時為明體,1為黑體,其餘位元作為粗度用。後來又做了
圓體,當時就想到一定會做其他的字體,因此將四個高位元用來排列組合如次:


b7 b6 b5 b4───────0:用方筆 1:用圓筆
│ │ └──────── 0:外框不變 1:外框變
│ └───────── 0:用兩段筆形 1:用四段筆形
└────────── 0:橫直不等 1:橫直等粗

明體、黑體為方筆,隸體也有方筆隸;外框大小則用以決定筆畫的鬆緊度,
楷書的特色即在於「外鬆內緊」,所以在組字時,先將外框收緊,再於畫時將外
側筆畫放開,就可達到上述的效果。至於收、放多少,則由各種不同的楷書字體而定。
筆形有「起、承、轉、合」四種,但對某些字體來說,僅需起、合兩種就夠
了。如同明體、圓體,甚至於最簡單的黑體,只要一種筆形已足。可是楷、宋、
隸以及藝術體則不然,所以用幾種筆形寫出來的字形,其效果就全然不同。除此
以外,每種筆形的參數皆可由使用字庫者自行選定,諸如筆形的斜度、粗度、曲
度及「刀口」的定義等等。所以不僅用這種方法可以寫各種字,且可開放給使用
者,任其自由發揮,創造各種嶄新的字體。
橫直的粗細比也可加以變化, 各種可能的排列組合多, 字體變化更為豐富。
一共有十六種組合種類,每種可經由外界輸入參數來控制,所以變化無窮。
用這種方法,至少可以模擬出明、宋、黑、圓、漢隸、魏隸以及王、柳、顏
、蘇、歐陽等各家楷體。至於其他組合出來的新體,則是多得難以描述。
只是在產品上,我沒有時間全部做完,希望朋友們繼續努力。
最後要定的參數,也是最重要的,就是字級的大小。一般鉛字只有特、初、
一、二、三、四、新四、五、新五、六、新六、七等號。但在電腦上,尤其是我
們這種方式產生的字形,編號劃分反而不便。
對使用者來說,他們只要字形符合需求,多大多小並沒有概念。為了應用的
方便起見,我們希望能走出一條新路,更便於排版、植字。
字級編號的缺點,是分類太多使用不便,太少則又不夠用。採用 X Y向點陣
座標定義方式,則不夠直觀,使用者難以下手。
當然,這些都是排版軟體所應該考慮的問題,可是字庫如果不先有準備,則
排版的處理上事倍功半。我們考慮之下,決定採用點陣座標定義,是因為雷射印
表機的發展極為迅速,如果字庫採用字級編號,則對300與400 DPI,甚至600DPI
的印表機而言,其字號各異,字庫將無法處理。
所以,對寫排版軟體的人,字號重於點陣,但對字庫製作而言,點陣值重於字號。
只是基於前面談過的因素,我只用DH表示X 向,DL表示Y 向,其值限於 128
點以內。要將字加大必須將字形緩衝區也成比例增加,此外參數設定也要同時考
慮,技術上並不難,只是兼容性有待商榷。

┌────┬──────────────────┬─────────┐
│BX=4 │ │ │
│ 空心體│DL=0 取消空心體 │ │
│ │DL=1 設定空心體 │ │
└────┴──────────────────┴─────────┘
空心體也可以設定線粗,這些留待有心人去做。
┌────┬──────────────────┬─────────┐
│BX=5 │ │ │
│ 斜體 │DL=0 取消斜體 │ │
│ │DL=1 設定斜體 │橫向右斜縱向1/8 │
└────┴──────────────────┴─────────┘
斜體則應該定出斜度,這並不是難事,我們目前所定,固定在:
斜值=X+(Y/8)
這樣做的道理,是因為作者很懶,除八最簡單,其他的則待繼續努力。
┌────┬──────────────────┬─────────┐
│BX=6 │ │ │
│ 填花體│ DL=0 取消填花體 │ │
│ │ DL=1 設定填花體 │ │
│ │ DH=0 全黑,與空心體共用則增大一點│ │
│ │ DH=1 粗點形 │ │
│ │ DH=2 細網形 │ │
│ │ DH=3 疏斜線向右 │ │
│ │ DH=4 密斜線向左 │ │
│ │ DH=5 殘碑形 │ │
│ │ DH=6 水泡形 │ │
│ │ DH=7 直柱形 │ │
│ │ DH=8 梅花形 │ │
│ │ DH=9 龍紋形 │ │
│ │ DH=10 用者自定 │ │
│ │ DS:[SI] 為點陣四方連值 │ │
└────┴──────────────────┴─────────┘
填花是以四方連的觀念,將字形與圖形結合為一體。應用時,可以有空心填
花,實體填花,襯底填花等。其實只要有了圖形,其變化無窮無盡。
填花之點陣也可以由使用者提供,只要設一個入口,將用者所設的點陣載入
,其他處理方式全同。
四方連之圖形,目前所定以 X向16點為限,Y 向不限,規定以0F00FH為終止
符,不斷循環。舉例而言DB 055AAH,0F00FH 得形為:
註:(o) 表示打點處,(.) 表示空白處。
0 1 2 3 4 5 6 7 8 9 A B C D E F
o . o . o . o . . o . o . o . o 第一行
o . o . o . o . . o . o . o . o 第二行
o . o . o . o . . o . o . o . o 第三行
┌────┬──────────────────┬─────────┐
│BX=7 │ │ │
│ 加寬形│每次直加粗一點,至八點為止 │高級版最粗為12點 │
└────┴──────────────────┴─────────┘
為便於臨時加粗用。
這種臨時加粗的功能,很可能與一般的排版觀念不同,所以,在使用時,每
當改變文字參數時,此功能即失效,如若需要,應另行設置。
┌────┬──────────────────┬─────────┐
│BX=8 │ │ │
│ 減細形│每次直減細一點,至一點為止 │ │
└────┴──────────────────┴─────────┘
同上。
┌────┬──────────────────┬─────────┐
│BX=9 │ │ │
│ 加厚形│每次橫加厚一點,但不超過八點 │高級版最粗為12點 │
└────┴──────────────────┴─────────┘
橫向筆畫加厚,同上,供臨時用。
┌────┬──────────────────┬─────────┐
│BX=10 │ │ │
│ 減薄形│每次橫減一點,最細為一 │ │
└────┴──────────────────┴─────────┘
同上。
┌────┬──────────────────┬─────────┐
│BX=11 │ │ │
│ 系統用│在排版字形狀態下,隨時提供 15*16字形│第一次開,再用則關│
└────┴──────────────────┴─────────┘
在幕前排版時,常有系統對話及顯示的情況,字形切換不易,特此提供各種
系統功能,以便應用。
有了這種功能,則可由系統先行設定系統字,每當排版字形變化時,可以直
接設置參數,調用本功能與排版所設的參數,作快速的切換。
┌────┬──────────────────┬─────────┐
│BX=12 │ │ │
│ 系統用│便於系統應用,隨時提供系統字形 │第一次開,再用則關│
│ │ AH=Y AL=X │ │
└────┴──────────────────┴─────────┘
同上,但此功能可提供各種大小系統字級,一般多用於SUPER VGA 的 22*24
螢幕顯示,更高密度者如1280*1024 之顯示器,可用30*32之字形。此類字形已將
    字距設定,使用者無需另行處理。使用時,只要通過指定入口,知會字庫即可。
┌────┬──────────────────┬─────────┐
│BX=13 │ │ │
│ 程式用│AX中得到字庫之程式段名,SI中為入口 │字庫之入口位置 │
└────┴──────────────────┴─────────┘
為了讓程式師易於控制,可用此功能取得字庫之入口位址。
┌────┬──────────────────┬─────────┐
│BX=14 │ │ │
│ 程式用│AX中得到 DOS原環境之位置 │供字庫退出系統用 │
└────┴──────────────────┴─────────┘
這是為了釋放字庫所佔之空間用。
┌────┬──────────────────┬─────────┐
│BX=15 │ │ │
│ 程式用│字形點陣取用方式 │ │
│ │AX=字形連續區之長度 │標準值為16 │
└────┴──────────────────┴─────────┘
有些系統將字庫之緩衝區設計成連續式,為了使用方便,特此提供此功能,
將字庫中之緩衝區改為相同之形式。但應注意者,在這種格式下,所有字形變化
之功能,一概失效,本字庫不負責任。
┌────┬──────────────────┬─────────┐
│BX=16 │ │ │
│ 程式用│AX= 0 英文字形 │標準值 │
│ │AX=1 俄文字形 │可用倉頡法取碼 │
│ │AX=2 希臘文字形 │可用倉頡法取碼 │
│ │AX=3 日文平假名字形 │可用倉頡法取碼 │
│ │AX=4 日文片假名字形 │可用倉頡法取碼 │
│ │.. │其他 │
└────┴──────────────────┴─────────┘

其他文字定義。


上一頁 目錄 下一頁