Subject: Make new charactor (3) (~{TlWV#(H}#)~})

From: [email-masked] (Zhiping You)
Date: 16 Aug 1993 18:58:55 GMT

造  字  （三）

三。点阵换 ASCII

    16 X 16 的点阵有 16 行，每行有 16 位，可分为两个八位
二进制数。每个可用一个 ASCII 字母表示。共计 32 个。请看下例：

               &&       
           &    &&    & 
          &&&&&&&&&&&&&&
         &&&         && 
          &        & &  
             &&&&&&&&   
                  &&    
                 &&     
                &&    & 
          &&&&&&&&&&&&&&
                &&      
                &&      
                &&      
                &&      
              &&&&      
                &       

这个字可分为下列 32 块：

      && = 00000011 = 3                 = 00000000 = 0      
  &    & = 00100001 = 33       &    &   = 10000100 = 132
 &&&&&&& = 01111111 = 127      &&&&&&&  = 11111110 = 254
&&&      = 11100000 = 224          &&   = 00001100 = 12   等等。
 &                               & &  
    &&&&                       &&&&   
                                &&    
                               &&     
       &                       &    & 
 &&&&&&&                       &&&&&&&
       &                       &      
       &                       &      
       &                       &      
       &                       &      
     &&&                       &      
       &       

再找出这些数对应的 ASCII 字母放进字库。这一步，如果用手
做不但麻烦，而且没必要。写计算机程序最容易，反正下一步放进字库
也需要写程序。对于会写程序的网友来说，写一个程序将点阵换成 ASCII
字母是很容易的。

四。放字入库 （兼 GB 码与 CCLIB.16 的关系）

    有了这 32 个 ASCII 字母，放在字库什么地方？一般来说，
最好不要动汉字部分（除非你想换字）。CCLIB.16 的第九区是没用的符号，
你可以将自己造的字放在那里，自己记下位置，便于以後用。这一区有
九十四个位置可用。如果还不够，可以将第八区也换掉（都是俄文字母）。
这样你就可以有一百八十八个位置。具体位置的运算对笫八与笫九区来说可
用如下公式：32*((a-1)*94+b-1)，其中，a 为区码，b 为位码。94 
是因为每区有 94 个字。32 是因为每个汉字是 32 BYTE。譬如：
你想把你造的字放在笫八区笫二位，则只需将 FILE POINTOR 指到：
  CCLIB.16 的 32*((8-1)*94+2-1) = 21088 BYTE 处即可开写。记住
这个字的位置，以後要用只需键入该区位即可。

    顺便说说 GB 码与 CCLIB.16 的关系。一个汉字的 GB 码是
由两个 ASCII 字母构成的。假如一个汉字的 GB 码是 AB，
则其在 CCLIB.16 中的位置是： 32*((a-166)*94+(b-161)). 

五。杂谈

    以上主要以 CCLIB.16 为主。其它 FONT FILE 的 FORMAT
不一定一样。比如：

    下里巴人的 ZIKU 就不是以排横分点阵，而是以列竖分点阵。即：
将点阵的每列用两个 ASCII 字母表示（这种形式很适合于点阵打印机）。    

      CXTERM 用的 CCLIB16ST.BDF 是 PRINTABL ASCII，很好
改动。可以用任何 EDITOR 直接编辑。其点阵是以十六进制数（HEX）
表示。每行十六点可由四个十六进制数表示。将这些十六进制数写成二进制数
即可得到点阵（或 BITMAP)。

    懂得了字库的一般原理，对其它形式的字库也可以处理。

    本人对中文计算的了解完全是自己摸索（为了写与中文有关的程序），没
有读过这方面的书。如网上的专家朋友在本文中发现有错误，请务必指出，以
免误人子弟。

-- 
-万精油-