このドキュメントの版数は $Revision: 1.1 $ です。
jbanner は, 日本語を含む文字列を拡大し, バナーとして画面に表示するコマン ドです。以下の出力例を見れば何をするコマンドなのかは一目瞭然でしょう。
[491] ~/WORK/jbanner/src: ./jbanner -c 漢 漢字 漢 漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢漢漢 漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢漢漢漢漢漢漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢 漢 漢 漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢 漢 漢漢漢漢漢漢漢漢漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢 漢漢 漢 漢 漢 漢 漢漢漢漢漢漢漢漢漢漢漢 漢漢漢漢漢漢漢漢漢漢漢漢漢漢漢 漢 漢 漢 漢 漢 漢 漢 漢 漢漢 漢漢 漢 漢 漢漢 漢漢 漢漢漢 [492] ~/WORK/jbanner/src: ./jbanner -c '_/' 漢字 _/ _/ _/ _/ _/ _/_/_/_/_/_/_/_/_/_/_/ _/ _/ _/ _/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/ _/ _/ _/_/_/_/_/_/_/_/_/ _/ _/ _/ _/ _/ _/ _/_/_/_/_/_/_/_/_/ _/ _/_/_/_/_/_/_/_/_/ _/ _/ _/ _/_/_/_/_/_/_/_/_/ _/_/ _/ _/ _/ _/ _/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/_/ _/ _/ _/_/ _/_/ _/_/_/
ふとした事から, banner を使用したくなったのですが, Cygwin の banner は日 本語を通してくれませんでした(当たり前ですけど)。多分, 数時間で作成できる だろうと思って作り始めたのですが, 色々と機能を追加しては削除したりして, 結構な日数を費やしてしましました。
jbanner は, 日本語を含む文字列を拡大し, バナーとして画面に表示するコマン ドです。
ある日, メールに日本語のバナーを入れたいと思って, Cygwin の banner を使 用したところ, 思った通り, 日本語は通してくれませんでした。多分, 日本語化 されたものが有ると思い, インターネット等で検索してみたのですが, 違うバナー が沢山ヒットしてしまい, 結局目的のものは探し出せませんでした。
「しょうがない。作るか〜。」「多分, 二〜三時間もあれば作れるだろう」
と思って, 作り始めました。ま〜, だいたいは二時間ぐらいで出来たのですが, どうせなら, オリジナルと同じ動作にしようと思い, オリジナルを操作しながら, 動作を真似て作りました。
面倒だったので, オリジナルのソースは見ないで作成したので, 細かい部分まで は真似しきれてないと思います。何れにしろ, オリジナルは多分プログラム内部 にフォント情報を持っているでしょう(違うかな?)。欧文のように数が少なけれ ば可能なのですが, 日本語は数が多いのでフォントを内部に持つのは得策ではな いと判断して, OS からフォント情報を得ています。そんな訳でオリジナルには 存在しない機能として, 以下の機能があります。
フォントの指定が可能になった事により,
[498] ~/WORK/jbanner/src: ./jbanner -c 漢 --fontname='@MS 明朝' 漢字 漢 漢 漢 漢 漢 漢 漢漢漢 漢 漢 漢 漢漢漢 漢漢 漢 漢 漢 漢 漢 漢 漢 漢 漢漢漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢漢 漢 漢漢 漢 漢 漢漢漢漢漢漢漢 漢 漢漢 漢 漢 漢 漢 漢 漢漢 漢 漢 漢 漢 漢 漢漢漢 漢 漢 漢 漢 漢 漢漢漢 漢 漢漢漢漢漢漢漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢漢 漢 漢漢漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢 漢漢漢 漢 漢 漢 漢漢 漢漢漢 漢 漢 漢 漢漢 漢漢漢漢漢 漢漢漢 漢 漢 漢 漢漢 漢
こんな事も出来るようになりました。
一応, Windows(32bit)汎用のつもりです。特殊な API は一切使用していません ので, 多分 Windows 95/98/98SE/ME/NT/2000/Xp の何れでも動作すると思います。 もしかすると, Win32s でも動作するかもしれません。但し私が動作確認を行っ た環境は
のみです。
インストールは, 特殊な事は何も行う必要はありません。jbanner.exe
を
任意のフォルダ(ディレクトリ)にコピーして下さい。jbanner はコマンドプロン
プトから使用するツールですので, 環境変数Path
に含まれているディレ
クトリにコピーする事をお勧め致します。エクスプローラから, クリックしても
何も起こりませんので悪しからず:-p
。
アンインストールは, jbanner.exe
を削除するだけです。レジストリは一
切触っていませんので, それ以外には何も行う必要はありません。
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
これが基本的な使用方法です。あとは, オプションで細かい指定がそれなりにで きます。
jbanner
のコマンド形式は以下の通りです。
jbanner [options] 表示文字列
表示文字列
で指定した文字列を拡大して, バナーとして, 画面に表示し
ます。オプションは, -
又は--
から始まる文字又は文字列で, 出
力形式に対する指示を行う事ができます。オプションの中には, 引数を必要とす
るものもあります。その場合の引数は, コマンドの次の引数として記述する事も
できますし, =
で連結して指定する事も可能です。例えば, 以下の二つは
どちらも同じ意味になります。
--option argument --option=argument
因みにjbannerには--option
というオプションは存在しません。上記はあ
くまで例です。
ヘルプオプションを指定した場合は, jbanner に関連する情報を表示し, 直ちに コマンドを終了します。表示文字列を指定した場合も, バナー処理を行いません。
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
[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
jbanner
は, Windows のフォントを使用してバナーを作成しています。そ
のために, フォントに関連するオプションを用意しています。
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
[546] ~/WORK/jbanner/src: ./jbanner -c '##' -F=HGS行書体 -f 24 あ ## ## ## #### #### #### ######## ## ############ ############ #### #### ## #### ############ ######## ## ## ###### #### ## ######## #### #### #### ########## #### ## ######## #### ## ###### #### ######## #### ###### ###### ########
の順に列挙します。以下に例を示します。
[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 のオプションで指定するのは, フォント名です。フォント名から使用す る書体名を得ています。日本語のフォントの場合は, フォント名と書体名は殆ど 一致しているようです。
コンパイルは, 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 内に記述していますので, そちらを参照して下さい。
恥ずかしながら, 今回デバッグをしていて始めて判ったのですが, gcc でコンパ イルしたものと, MSVC でコンパイルしたもので, コマンドライン引数の処理が異 なるようです。Windows のコマンドプロンプトから, 以下のコマンドを入力して, その引数の渡り方を調べてみました。
jbanner --fontname='Times New Roman' hoge
ARGV[0]=<jbanner> ARGV[1]=<--fontname='Times> ARGV[2]=<New> ARGV[3]=<Roman'> ARGV[4]=<hoge>
Times New Roman
を一つの引数として渡すつもりで'
で括ったので
すが, 見事に引数が三つに分割されてしまいました。
ARGV[0]=<jbanner> ARGV[1]=<--fontname=Times New Roman> ARGV[2]=<hoge>
こちらは, 意図した通りです。
jbanner --fontname="Times New Roman" hoge
今度は, '
ではなく, "
で括ってみました。
ARGV[0]=<jbanner> ARGV[1]=<--fontname=Times New Roman> ARGV[2]=<hoge>
意図した通りです。
ARGV[0]=<./jbanner> ARGV[1]=<--fontname=Times New Roman> ARGV[2]=<hoge>
意図した通りです。
といった結果になりました。私は殆ど bash を使用していますので, シェルが処 理してくれるので, 気が付きませんでした。
一部, デバッグ用に Syslog 出力しています。Syslogd を起動している方は, ご 注意(べつに悪さは与えないと思いますが)ください。
本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな る結果に対しても作者は責任を負わないこととします。個人の責任に於いて使用 して下さい。入手したアーカイブのままの形式であれば, 再頒布, 転載は可能と します。常識的に扱ってください。
バグ報告, 改善案(あるいは, 自分で改善した), 質問等ありましたら, 是非作者
へ「励ましのお便り」(^^;
を送って下さい。特にご自分で改善なさった
場合は, 私も恩恵に預かりたいので, 是非教えて下さい。改善案のご連絡を下さっ
ても, 仕事に忙殺されている関係上, ご希望に添える事は出来ないかもしれませ
んが, バグ修正はなるべく行うつもりです。自分の名誉の為にも...(^^;
メールアドレスは, 以下の通りです。