jbanner

Table of Contents


Node: Top, Next: , Previous: (dir), Up: (dir)

JBANNER

このドキュメントは, jbanner について記述しています。jbanner は日本語を含 む文字列を拡大し, バナーとして画面に表示するコマンドです。CYGWIN の banner と同じ動作になるように作成したつもりですが, ソースを全く参照して いませんので, 内部処理は全く異なっているでしょう。また, 細かい動作は異なっ ていると思われます。
Copyright © 2003 Tadamegu Furukawa

このドキュメントの版数は $Revision: 1.1 $ です。


Node: 要旨, Next: , Previous: Top, Up: Top

要旨

jbanner は, 日本語を含む文字列を拡大し, バナーとして画面に表示するコマン ドです。以下の出力例を見れば何をするコマンドなのかは一目瞭然でしょう。

     [491] ~/WORK/jbanner/src: ./jbanner -c 漢 漢字
     
      漢     漢   漢           漢
       漢 漢漢漢漢漢漢漢漢漢漢漢        漢
        漢   漢   漢    漢漢漢漢漢漢漢漢漢漢漢漢漢漢漢
                     漢             漢
     漢    漢漢漢漢漢漢漢漢漢  漢             漢
      漢   漢   漢   漢     漢漢漢漢漢漢漢漢漢
       漢  漢漢漢漢漢漢漢漢漢            漢
              漢               漢
          漢漢漢漢漢漢漢漢漢         漢漢
       漢      漢             漢
       漢 漢漢漢漢漢漢漢漢漢漢漢 漢漢漢漢漢漢漢漢漢漢漢漢漢漢漢
      漢       漢             漢
      漢      漢 漢            漢
     漢     漢漢   漢漢          漢
     漢   漢漢       漢漢      漢漢漢
     
     [492] ~/WORK/jbanner/src: ./jbanner -c '_/' 漢字
     
       _/          _/      _/                      _/
         _/  _/_/_/_/_/_/_/_/_/_/_/                _/
           _/      _/      _/        _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
                                     _/                          _/
     _/        _/_/_/_/_/_/_/_/_/    _/                          _/
       _/      _/      _/      _/          _/_/_/_/_/_/_/_/_/
         _/    _/_/_/_/_/_/_/_/_/                        _/
                       _/                              _/
               _/_/_/_/_/_/_/_/_/                  _/_/
         _/            _/                          _/
         _/  _/_/_/_/_/_/_/_/_/_/_/  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
       _/              _/                          _/
       _/            _/  _/                        _/
     _/          _/_/      _/_/                    _/
     _/      _/_/              _/_/            _/_/_/
     
     

ふとした事から, banner を使用したくなったのですが, Cygwin の banner は日 本語を通してくれませんでした(当たり前ですけど)。多分, 数時間で作成できる だろうと思って作り始めたのですが, 色々と機能を追加しては削除したりして, 結構な日数を費やしてしましました。


Node: 機能概要, Next: , Previous: 要旨, Up: Top

機能概要

jbanner は, 日本語を含む文字列を拡大し, バナーとして画面に表示するコマン ドです。

ある日, メールに日本語のバナーを入れたいと思って, Cygwin の banner を使 用したところ, 思った通り, 日本語は通してくれませんでした。多分, 日本語化 されたものが有ると思い, インターネット等で検索してみたのですが, 違うバナー が沢山ヒットしてしまい, 結局目的のものは探し出せませんでした。

「しょうがない。作るか〜。」

「多分, 二〜三時間もあれば作れるだろう」

と思って, 作り始めました。ま〜, だいたいは二時間ぐらいで出来たのですが, どうせなら, オリジナルと同じ動作にしようと思い, オリジナルを操作しながら, 動作を真似て作りました。

面倒だったので, オリジナルのソースは見ないで作成したので, 細かい部分まで は真似しきれてないと思います。何れにしろ, オリジナルは多分プログラム内部 にフォント情報を持っているでしょう(違うかな?)。欧文のように数が少なけれ ば可能なのですが, 日本語は数が多いのでフォントを内部に持つのは得策ではな いと判断して, OS からフォント情報を得ています。そんな訳でオリジナルには 存在しない機能として, 以下の機能があります。

フォントの指定が可能になった事により,

     [498] ~/WORK/jbanner/src: ./jbanner -c 漢 --fontname='@MS 明朝' 漢字
      
      漢        漢   漢   漢      漢
      漢  漢漢漢 漢 漢   漢  漢漢漢    漢漢
      漢  漢 漢 漢 漢  漢    漢      漢
     漢漢漢 漢 漢 漢 漢 漢     漢  漢   漢
      漢  漢 漢 漢 漢漢      漢 漢漢   漢
      漢  漢漢漢漢漢漢漢       漢  漢漢  漢
      漢  漢 漢 漢 漢漢    漢 漢  漢 漢 漢
     漢漢漢 漢 漢 漢 漢 漢   漢漢漢  漢 漢漢漢漢漢漢漢
      漢  漢 漢 漢 漢  漢    漢  漢   漢   漢漢
      漢  漢漢漢 漢 漢   漢   漢  漢   漢   漢
      漢        漢   漢   漢  漢   漢   漢
         漢漢漢           漢  漢   漢
      漢漢    漢漢漢        漢      漢
     漢   漢漢    漢漢漢漢漢  漢漢漢     漢
        漢      漢        漢漢    漢
     

こんな事も出来るようになりました。


Node: 動作環境, Next: , Previous: 機能概要, Up: Top

動作環境

一応, Windows(32bit)汎用のつもりです。特殊な API は一切使用していません ので, 多分 Windows 95/98/98SE/ME/NT/2000/Xp の何れでも動作すると思います。 もしかすると, Win32s でも動作するかもしれません。但し私が動作確認を行っ た環境は

のみです。


Node: インストールとアンインストール方法, Next: , Previous: 動作環境, Up: Top

インストールとアンインストール方法


Node: インストール, Next: , Previous: インストールとアンインストール方法, Up: インストールとアンインストール方法

インストール

インストールは, 特殊な事は何も行う必要はありません。jbanner.exeを 任意のフォルダ(ディレクトリ)にコピーして下さい。jbanner はコマンドプロン プトから使用するツールですので, 環境変数Pathに含まれているディレ クトリにコピーする事をお勧め致します。エクスプローラから, クリックしても 何も起こりませんので悪しからず:-p


Node: アンインストール, Previous: インストール, Up: インストールとアンインストール方法

アンインストール

アンインストールは, jbanner.exeを削除するだけです。レジストリは一 切触っていませんので, それ以外には何も行う必要はありません。


Node: 使用方法, Next: , Previous: インストールとアンインストール方法, Up: Top

使用方法


Node: 簡単な使いかた, Next: , Previous: 使用方法, Up: 使用方法

簡単な使いかた

jbannerは Windows のコマンドプロンプト等から使用します。私は Emacs の shell で bash を起動して使用する事が殆どですので, このドキュメ ントの例もbash のものを使用しているのが殆どです。コマンドプロンプトで使 用する場合に於いても特に大きな違いはありませんので, 適当に読み替えて下さ い。

そのままコマンドプロンプトからjbannerと入力すると,

     C:\home\tfuruka1>jbanner
     jbanner: 引数が不十分です。
     Usage: jbanner [-c X] [-w 80] [--usage] [--version] [--help] 表示する文字列
     

といった, 簡単な使用方法を表示します。今度は「表示する文字列」を何か入力してみ ます。ここでは「ほげ」と入力します。

     C:\home\tfuruka1>jbanner ほげ
                                 X X
       X               X         X X
       X   XXXXXXXX    X        X
      X         X     X         X
      X         X     X    XXXXXXXXX
      X    XXXXXXXX   X         X
      X         X     X         X
      X         X     X         X
      X         X     X         X
      X         X     X         X
      X     XXXXX     X        X
      X    X    XX     X       X
       X   X    X X    X      X
       X    XXXX            XX
     

これが基本的な使用方法です。あとは, オプションで細かい指定がそれなりにで きます。


Node: コマンド形式, Next: , Previous: 簡単な使いかた, Up: 使用方法

コマンド形式

jbannerのコマンド形式は以下の通りです。

     jbanner [options] 表示文字列
     

表示文字列で指定した文字列を拡大して, バナーとして, 画面に表示し ます。オプションは, -又は--から始まる文字又は文字列で, 出 力形式に対する指示を行う事ができます。オプションの中には, 引数を必要とす るものもあります。その場合の引数は, コマンドの次の引数として記述する事も できますし, =で連結して指定する事も可能です。例えば, 以下の二つは どちらも同じ意味になります。

     --option argument
     --option=argument
     

因みにjbannerには--optionというオプションは存在しません。上記はあ くまで例です。


Node: ヘルプオプション, Next: , Previous: コマンド形式, Up: 使用方法

ヘルプオプション

ヘルプオプションを指定した場合は, jbanner に関連する情報を表示し, 直ちに コマンドを終了します。表示文字列を指定した場合も, バナー処理を行いません。


-?
--help
詳細な使用方法を表示し, 処理を終了します。
--usage
簡潔な使用方法を表示し, 処理を終了します。
--version
ヴァージョン情報を表示し, 処理を終了します。


Node: 全体的なオプション, Next: , Previous: ヘルプオプション, Up: 使用方法

全体的なオプション


-c=X
--char=X
バナーを作成する為に使用する文字列を指定します。このオプションを指定しな かった場合は, バナーを作成する文字列としてXを使用します。このオプ ションで指定するのは文字ではなく, 文字列です。例えば, AB を指定した場合は, 以下のようになります。
          [513] ~/WORK/jbanner/src: ./jbanner -c AB 漢字
            AB          AB      AB                      AB
              AB  ABABABABABABABABABABAB                AB
                AB      AB      AB        ABABABABABABABABABABABABABABAB
                                          AB                          AB
          AB        ABABABABABABABABAB    AB                          AB
            AB      AB      AB      AB          ABABABABABABABABAB
              AB    ABABABABABABABABAB                        AB
                            AB                              AB
                    ABABABABABABABABAB                  ABAB
              AB            AB                          AB
              AB  ABABABABABABABABABABAB  ABABABABABABABABABABABABABABAB
            AB              AB                          AB
            AB            AB  AB                        AB
          AB          ABAB      ABAB                    AB
          AB      ABAB              ABAB            ABABAB
          

-w=80
--width=80
バナーの表示幅を設定します。このオプションを指定しなかった場合の表示幅は 80文字です。表示幅は 1以上, 1024未満の範囲で指定可能です。表示幅を超えた 分部はカットされます。表示幅を 45に指定した場合の例を以下に示します。
          [517] ~/WORK/jbanner/src: ./jbanner -c AB --width=45 漢字
            AB          AB      AB
              AB  ABABABABABABABABABABAB
                AB      AB      AB        ABABABABABAB
                                          AB
          AB        ABABABABABABABABAB    AB
            AB      AB      AB      AB          ABABAB
              AB    ABABABABABABABABAB
                            AB
                    ABABABABABABABABAB
              AB            AB
              AB  ABABABABABABABABABABAB  ABABABABABAB
            AB              AB
            AB            AB  AB
          AB          ABAB      ABAB
          AB      ABAB              ABAB            AB
          


Node: 特殊オプション(WIN32), Previous: 全体的なオプション, Up: 使用方法

特殊オプション(WIN32)

jbannerは, Windows のフォントを使用してバナーを作成しています。そ のために, フォントに関連するオプションを用意しています。


-F="MS ゴシック"
--fontname="MS ゴシック"
バナー作成に使用するフォント名を指定します。このオプションを指定しなかっ た場合は, MS ゴシックを使用します。以下の例は, フォントに @FixedSysを使用した場合の例です。
          [537] ~/WORK/jbanner/src: ./jbanner -c '漢' -F=@FixedSys 漢字
           
           
           
           漢        漢   漢   漢漢漢     漢
           漢  漢漢漢 漢 漢   漢   漢       漢
           漢  漢 漢 漢 漢  漢    漢       漢
          漢漢漢 漢 漢 漢 漢  漢    漢  漢    漢
           漢  漢 漢 漢 漢 漢     漢  漢漢   漢
           漢  漢漢漢漢漢漢漢漢      漢  漢 漢  漢
           漢  漢 漢 漢 漢 漢     漢  漢  漢 漢
          漢漢漢 漢 漢 漢 漢  漢  漢漢漢  漢  漢漢漢漢漢漢漢
           漢  漢 漢 漢 漢  漢    漢  漢    漢   漢
           漢  漢漢漢 漢 漢   漢   漢  漢    漢   漢
           漢        漢   漢   漢  漢    漢
            漢               漢  漢    漢
           漢    漢  漢漢       漢       漢
          漢    漢     漢漢     漢       漢
              漢        漢漢   漢漢漢     漢
          

このオプションで指定するのは, 書体名(フォントフェイス)ではなく, フォント 名なので, 以下のように指定する事も出来ます。

          [538] ~/WORK/jbanner/src: ./jbanner -F="Times New Roman Bold Italic" Hoge
          
          
          
          
             XXXX  XXXX
              XX    XX
              XX    XX
             XX    XX
             XX    XX    XXX    XXXXXX   XXXX
             XXXXXXXX   X  XX  XXX XX   X  XX
            XX    XX   XX  XX  XX  XX  X  XX
            XX    XX  XX   XX  XX XXX XXXXX
            XX    XX  XX  XX    XXXX  XX
           XX    XX   XX  XX   XX     XX  XX
          XXXX  XXXX   XXX     XXXX    XXX
                              X  XXX
                             XX   XX
                              XXXXX
          

-f=16
--fontsize=16
バナー作成に使用するフォントのフォントサイズを指定します。このサイズはフォ ントの高さを意味します。フォントの幅は, アスペクトル比から自動算出します。 このオプションを指定しなかった場合のフォントサイズは 16を指定した事にな ります。フォントサイズに 24を指定した場合の例を以下に示します(行書体は16 ドットだと辛いですね)。
          [546] ~/WORK/jbanner/src: ./jbanner -c '##' -F=HGS行書体 -f 24 あ
          
          
          
                                ##
                              ##  ##
                            ####    ####
                            ####  ########
                      ##    ############
                        ############
                          ####
                          ####        ##
                          ####  ############
                          ########    ##    ##
                        ######      ####      ##
                      ########    ####        ####
                    ####    ##########        ####
                  ##        ########          ####
                  ##      ######              ####
                    ########  ####          ######
                                          ######
                                    ########
          

--lsfont[=family]
familyで指定したフォントファミリのフォント情報を列挙し、コマンドを終了し ます。フォント名を指定する時に、システムに使用できるフォントを調べる場合 に使用する事を想定しています。familyを指定しなかった場合は、使用可能な全 てのフォントを列挙します。フォント情報は、左から

の順に列挙します。以下に例を示します。

          [551] ~/WORK/jbanner/src: ./jbanner --lsfont=times
          "Times New Roman"	"Regular"	"Times"
          "Times New Roman"	"Regular"	"Times"
          "Times New Roman"	"Regular"	"Times"
          ---中略---
          "Times New Roman Bold"	"Bold"	"Times"
          "Times New Roman Bold"	"Bold"	"Times"
          "Times New Roman Bold"	"Bold"	"Times"
          ---中略---
          "Times New Roman Bold Italic"	"Bold Italic"	"Times"
          "Times New Roman Bold Italic"	"Bold Italic"	"Times"
          ...以下省略...
          
          [552] ~/WORK/jbanner/src: ./jbanner --lsfont="MS ゴシック"
          "MS ゴシック"	"標準"	"MS ゴシック"
          

jbanner のオプションで指定するのは, フォント名です。フォント名から使用す る書体名を得ています。日本語のフォントの場合は, フォント名と書体名は殆ど 一致しているようです。


Node: 蛇足, Next: , Previous: 使用方法, Up: Top

蛇足


Node: コンパイル方法, Next: , Previous: 蛇足, Up: 蛇足

コンパイル方法

コンパイルは, VC6.0と Cygwin の gcc で確認しています。特殊な事は行ってい ないつもりですので, もっと古いものでも, 多分大丈夫だと思います。gcc でコ ンパイルを通す為に姑息な事(といっても, 昔 MS-DOS の MSC-3あたりを使用し ていた頃もこんな事をしていましたが)をしています。早い話が, 日本語を正し く処理できない分部の対応をしているだけです。もう少し詳しくいうと, エスケー プコード0x5Cが, SHIFT-JIS での漢字コードの 2バイト目と一致してし まい, 特定の漢字コード(2バイト目がエスケープコードと一致するコード)が正 しく処理されないのです。例えば, 「表」(0x955c)がそれにあたります。

     printf("表示\n")
     

だとエラーになりますので、

     printf("\x95\x5c示\n")
     

と記述しています。

一応, 私がコンパイルを確認したコンパイラを以下に列挙します。

コンパイルは, nmake または make 一発で行えるように考慮したつもりですが, 環境によっては, makefile を書き換える必要があるかもしれません(と, いうよ り, 私と全く同じ環境の筈がありませんので, 何らかの書き換えは必要になりま す)。修正方法は, makefile 内に記述していますので, そちらを参照して下さい。


Node: コマンドライン引数の解析, Next: , Previous: コンパイル方法, Up: 蛇足

コマンドライン引数の解析

恥ずかしながら, 今回デバッグをしていて始めて判ったのですが, gcc でコンパ イルしたものと, MSVC でコンパイルしたもので, コマンドライン引数の処理が異 なるようです。Windows のコマンドプロンプトから, 以下のコマンドを入力して, その引数の渡り方を調べてみました。

といった結果になりました。私は殆ど bash を使用していますので, シェルが処 理してくれるので, 気が付きませんでした。


Node: 蛇足の蛇足, Previous: コマンドライン引数の解析, Up: 蛇足

蛇足の蛇足

一部, デバッグ用に Syslog 出力しています。Syslogd を起動している方は, ご 注意(べつに悪さは与えないと思いますが)ください。


Node: 取り扱い, Previous: 蛇足, Up: Top

取り扱い


Node: 著作権、免責等, Next: , Previous: 取り扱い, Up: 取り扱い

著作権、免責等

本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな る結果に対しても作者は責任を負わないこととします。個人の責任に於いて使用 して下さい。入手したアーカイブのままの形式であれば, 再頒布, 転載は可能と します。常識的に扱ってください。


Node: バグ報告等, Previous: 著作権、免責等, Up: 取り扱い

バグ報告等

バグ報告, 改善案(あるいは, 自分で改善した), 質問等ありましたら, 是非作者 へ「励ましのお便り」(^^;を送って下さい。特にご自分で改善なさった 場合は, 私も恩恵に預かりたいので, 是非教えて下さい。改善案のご連絡を下さっ ても, 仕事に忙殺されている関係上, ご希望に添える事は出来ないかもしれませ んが, バグ修正はなるべく行うつもりです。自分の名誉の為にも...(^^;

メールアドレスは, 以下の通りです。

T.Furukawa <tfuruka1@nifty.com>