Last Update: 2000-11-23

95knmfont1.3の作りかた

  1. まず、どのファイルが Terminal 10pointのフォントファイルにあたるのか、調べるわけですが... 95toXfontのときは、 こせきさんのページの情報を元に、 fjのアーカイブで過去の投稿を検索して、
    Subject: Tera Term & Font
    Message-ID: <1997Feb1.161838.10592@merope.opus.or.jp>
    Newsgroups: fj.os.ms-windows
    Date: Sat, 1 Feb 1997 16:18:38 GMT
    
    のスレッドで知識を得ました。ここで、Terminal10ポイントの字形は APP932.FONに含まれているという情報を仕入れました。そこで投稿されていた太田さんのツールでフォントファイルを解析してました。
  2. フォント画像 (9KB)を、MS-DOSプロンプトなどから取得して、観察する。フォントファイルを、C:\WINDOWS\FONTS\APP932.FON を適当なディレクトリにコピーして、解析します。
  3. 画像ソフトのPictBearやD-pixedやPhotoshop,Gimpなどを使って、95knmfontで使われるフォント字形を作る。 画像ソフトは、1)レイヤー機能がある、2)グリッド表示ができる、3)拡大縮小が かんたんにできる、という条件を満たしていれば作業がやりやすいです。 PictBearでは、グリッドの幅、高さを12にして、分割線を4にして作業 (29KB) しました。
  4. 画像ソフトを見ながら、2進数 -> 16進数変換を行なう。
    0000  0001  0010  0011  0100  0101  0110  0111
       0     1     2     3     4     5     6     7
    
    1000  1001  1010  1011  1100  1101  1110  1111
       8     9     a     b     c     d     e     f
    
    この表を見ながら手計算です。まあ、156文字程度なら、人がやっても それほど困難はない、と思う。何千文字もあると手計算はしたくないですけど。 ほんとは、computerにやらせるほうがまちがいがなくていいんですけどね。 できたのが、このテキストファイル (8KB) です。
  5. このテキストファイルを元に、バイナリファイルに流しこめる(コピーペーストできる)形式へとテキスト整形します。バイナリファイルは、コピーペーストに関してテキストエディタと相性がいい『狐's バイナリエディタ 2.05』を使用しました。 このあとの記述は、『狐's バイナリエディタ 2.05』のクリップボード形式に依存した文章、スクリプトになってしまいますが...
  6. まず、Terminalフォント 10ポイントの大きさは、幅x高さが 6x13 なので、上で作った 6x12のフォントに、高さを +1 しなくてはならない。フォント最下部に 1 pixelゲタをはかせることにします。
    ## append00.pl
    while(<>){
        if(length($_) == 36){
    	s/ //g; #空白を無くす
    	chop; #改行をとりさる
    	print $_ . "00\n"; # 幅x高さが6x12のglyphを 6x13にするため、
    	                   # 00を後ろ(フォントの最下部)にappendする
        }elsif(length($_) >70){
    	print; # asciiと半角カタカナの境目の行は表示する
        }
        #そのほかの行は表示しない
    }
    
    このPerlスクリプトを
    C:\home>  perl append00.pl <glyph.txt >6x13.txt
    
    として、6x13のglyphデータを作ります。そのとき、pとqのglyphについては、もし高さが13ピクセルだったら線を伸ばしたい、と思ってたので 6x13.txtを手作業で修正しました。
  7. そのあとは、区切りの線より上を 6x13asciiとしてセーブ。区切りの線より下を6x13kanaとしてセーブして、改行をとりさります。
    ## rmret.pl
    while(<>){
        chop;
        print;
    }
    
    C:\home\95knm13>  perl rmret.pl <6x13ascii >ascii
    C:\home\95knm13>  perl rmret.pl <6x13kana >kana
    
    でOK。この結果できるテキストファイル、たとえば、kana (2KB) というファイルはこうなっています。改行も空白もない、1行のファイルです。この形式が『狐's バイナリエディタ 2.05』のクリップボード形式です。
  8. それでは、バイナリ書き換えしましょう。
  9. 上で作った ascii というファイルの内容をテキストエディタで表示させてコピーします。バイナリエディタの 0x20a7にカーソルを置き、上書きモードであることを確認してから[編集 - 貼り付け]でペーストします。新規保存(「狐's バイナリエディタ 2.05」では新規保管になってますね)で、ファイル名を APP932.NEWにします。半角英数字の字形データを書き換えたフォントファイルができました。

    asciiというファイルの内容をペーストしたあとで、それに続けて 0x2727に kanaというファイルの内容をペーストして、APP932O.NEWというファイル名で保存します。(O は OMAKE のオーを意図しています)。これで、半角英数字に加え半角カタカナの字形データを書き換えたフォントファイルもできました。

  10. これで、新しいフォントファイルができました。このファイルのどちらかを APP932.FONという名前で C:\WINDOWS\FONTS に置けばいいんですが、Windowsの動いているときには無理なはずです。Windowsが使用中のファイルは上書きできません、とか表示されるでしょう。なので、[スタート - Windowsの終了 - MS-DOSモードでコンピュータを再起動する] でWindowsを終了させ、MS-DOSの状態にします。こうすれば APP932.FONを上書きできます。個人的に使うなら、これで作業は終わりです。
  11. 不特定多数に配布するなら、Microsoft製のフォントファイルをそのまま配るのはまずいので、パッチの形式にする必要があります。

    WSP 1.50を使って、APP932.WINから APP932.NEW と APP932O.NEW というバイナリファイルを作るパッチファイルを作ります。APP932.WINは Windowsがもともと持っている APP932.FON をrenameしただけです。

    WSPを使うなら、WUP2EXE (自己展開差分作成) と、 WSPST.COM Ver.1.0(WSP自己展開差分タイムスタンプ比較抑制ツール) もダウンロードしておきましょう。

  12. WSP_E.COM と WUP2EXE.COM と WSPST.COM をフォントファイルと同じディレクトリに置きます。作業手順はこうなります。
    C:\home\95knm13>  wsp_e app932.win app932.new
    app932.WUP  Making!
    
    0.....10.....20.....30.....40.....50.....60.....70.....80.....90....100(%)
    =======================================================================  done!
    
    C:\home\95knm13>  wup2exe -E app932
    英語版自己アップデート形式のファイルを作成します.
    app932.EXE を作成しました.
    
    C:\home\95knm13>  wspst app932.exe
    WSP自己展開差分タイムスタンプ比較抑制ツール WSPST.COM Ver.1.0
      Copyright (C) 1995 by 毎黒仮節渡万
    app932.exeのタイムスタンプ比較を抑制しました。
    
    C:\home\95knm13>
    
    で、APP932.EXEができました。 同様に、
    C:\home\95knm13>  wsp_e app932.win app932o.new
    app932o.WUP  Making!
    
    0.....10.....20.....30.....40.....50.....60.....70.....80.....90....100(%)
    =======================================================================  done!
    
    C:\home\95knm13>  wup2exe -E app932o
    英語版自己アップデート形式のファイルを作成します.
    app932o.EXE を作成しました.
    
    C:\home\95knm13>  wspst app932o.exe
    WSP自己展開差分タイムスタンプ比較抑制ツール WSPST.COM Ver.1.0
      Copyright (C) 1995 by 毎黒仮節渡万
    app932o.exeのタイムスタンプ比較を抑制しました。
    
    C:\home\95knm13>
    
    とすれば、APP932O.EXEができます。
  13. できあがり。 自動で、APP932.FONを書き換えてくれる batファイルを書けばとりあえず完成です。 batファイルの書式についてはそんなに詳しく知ってるわけではないですが、ただコマンドを並べればいいです。

    カレントディレクトリに APP932.FONをコピーしてきて、上で作ったEXEファイルで APP932.NEW というファイルに作り変えて、C:\WINDOS\FONTS に APP932.FONというファイル名で上書きしてくれるbatファイルです。INSTALL.BATというファイル名にしてあります。

    : Windows95/98がインストールしてあるディレクトリを指定する
    set win_dir=c:\windows
    
    @echo off
    echo  ** install 95knmfont **
    
    : change attribute of app932.fon in order to copy
    %win_dir%\command\attrib -h -s %win_dir%\fonts\app932.fon
    
    : copy app932.fon with renaming
    copy %win_dir%\fonts\app932.fon app932.win
    
    : update app932.win to app932.new
    app932.exe
    
    : install font
    copy app932.new %win_dir%\fonts\app932.fon
    
    : change attribute of newfon
    %win_dir%\command\attrib +h +s %win_dir%\fonts\app932.fon
    
    : delete app932.new
    del app932.new
    
    : exit (または win) でWindowsにもどりましょう
    echo  Please, type 'exit' or 'win'.
    
  14. あとは、インストール -> 実際に使用してみて、よくない点を探る -> 画像段階に修正を加えて、16進数化して、バイナリ書き換えして、パッチファイルを制作する -> いったんアンインストールしてから新しくインストールする -> 実際に使用してみて、よくない点を探る.....というサイクルを行ない完成度を高める
  15. インストールのときは、こうなります。
    C:\WINDOWS>
    
    C:\WINDOWS>  cd \home
    C:\HOME>  cd 95knm13
    C:\HOME\95KNM13>  install
    
    C:\HOME\95KNM13>set win_dir=c:\windows
    
    C:\HOME\95KNM13>
     ** install 95knmfont **
            1個のファイルをコピーしました.
    WSP self update EXE 1.52 amapro Wakichi
    app932.win 95-10-03 00:00 => app932.new 00-10-16 11:28 Updating!
    Update complete!
            1個のファイルをコピーしました.
     Please, type 'exit' or 'win'.
    C:\HOME\95KNM13>  exit
    
    Windowsが再起動されます。 [スタート - プログラム - MS-DOSプロンプト]で、フォントの大きさ を「6 x 13」にして確かめてみましょう。

itouh