banner (UNIX)
UNIXにおけるbannerとはコマンドラインの引数に与えられた文字列を巨大なアスキーアートに変換して出力するプログラムである。本コマンドの1つの利用方法としては、印刷ジョブ用に、極めて見やすい区切りページを作成する事が挙げられる[1]。
操作
[編集]各引数はそれぞれ10文字で切り詰められ、それらが(巨大化され)「1行」ずつ出力される。複数の語を単一の行に出力させるには、それ故単一の引数として渡してやらねばならない。その方法とは、エスケープするか、語を引用符で囲むことでシェルが適切に処理できる形にすることである[1]。
関連するプログラムとして、より柔軟なFIGletというプログラムがある。これは、テキストを異なるフォントと方向から表示させることが可能である[2]。
実装
[編集]このプログラム内部に実装している方法はエラーを起こしやすく、時代遅れである。使用される文字フォントが、静的に初期化されるデータ構造として、プログラム・コード自体にハードコーディングされている。2つのデータ構造があり、1つは(banner
プログラムに特定のエンコーディング方法で、)各文字のビットマップを符号化する、一連の出力命令を網羅するデータ・テーブルである。2番目は、各文字コードに対し、その文字の開始と終了を指示する印字を出力するテーブルにあるインデックスである[3]。
両データ構造は手動作成されている。スピネリスは、「これ以上にエラーを起こしやすく、かつデータ・フォーマットをメンテナンス不可能なまでにするには、かえって難しい」と推察している。彼は、banner
プログラムのソースコードと、(比較のためにNetBSD・mac68k移植版のソースコードにおける、6から10個のフォント・データを使用し、)コンピュータフォントをプログラム・フォント・データに組み込んで符号化するためのソースコードを自動的に生成した場合と比較して、著しいまでの違いを観察している。自動的に生成されたデータについては、ビットパターンをはじき出し、アスキーアートを表現している、とコメントしている。自動的に生成されたデータは、GUIをもつ作成・編集プログラムで生成したビットマップファイルから生成される。そして自動的に生成されたデータは、簡単で理解しやすい手法、— 各グリフ用に符号化されていない一連の固定長バイト列で構成されている[3]。
スピネリスは、さらに続けて、現代的なコンピュータ・システムにおいて、これらデータをプログラムの実行イメージ自身に埋め込むことは、滅多な事がない限り、賢明ではなく、たとえそうしたとしてもパフォーマンスの向上にはさほど寄与しない、と述べている。そのようなことをすると、異なるロケールにプログラムを対応させることや、プログラム自身をメンテナンスすることが困難になる。現代的なシステムにおいてより好まれるアプローチは、そのようなデータを別のファイルに分けて保存し、プログラムの実行イメージファイルと分離すること、またはプログラムのリソースフォークに置き、実行時にプログラムが読み込むこと、である[3]。
バージョン
[編集]各派生版の一部を以下に列記する。
- AT&Tによる、UNIX System Vに含まれるもの[4][5][6]。
- Cedar Solutionsによるもの[7]。2008年時点では、現代的なLinuxシステムで動作する。固定サイズで横行にのみ出力される。
- カリフォルニア大学バークレー校のマーク・ホートン(Mark Horton、女性)によるもの。bsdmainutils[8]パッケージにprinterbannerという名前のコマンドとして含まれ、配布されている。2008年時点で、現代的なLinux、 GNU HurdそしてMac OS Xシステムで動作する。こちらは可変サイズフォントで縦行出力可能。
出力例
[編集]ターミナル指向のbannerプログラムでは以下のような出力となる:
$ banner Hello! # # ### # # ###### # # #### ### # # # # # # # ### ####### ##### # # # # # # # # # # # # # # # # # # # ### # # ###### ###### ###### #### ###
Mac OS XなどBSDとその派生オペレーティングシステム (OS) に通常組み込まれている、プリンター指向なbannerプログラムでは1文字を次のように表示する:
$ banner -w80 "a" ##### ######### ############### ### ################ ###### ################## ######## ##### ##### ######### #### #### ## ### ### #### ## ### ### ## ### ### ### #### ### #### ############################# ############################## ############################## ############################ ########################### ### # #
脚注
[編集]- ^ a b Steve Moritsugu, Sanjiv Guha, James Edwards, David Pitts (2000). Practical UNIX. Que Publishing. pp. 220–221. ISBN 078972250X
- ^ Arnold Robbins (2006). UNIX in a Nutshell. O'Reilly. pp. 24. ISBN 0596100299
- ^ a b c Diomidis Spinellis (2006). Code Quality. Adobe Press. pp. 70–71. ISBN 0321166078
- ^ http://www.zen77087.zen.co.uk/nug/alleg/sysv-aix-dynix.shtml
- ^ http://www.zen77087.zen.co.uk/nug/doc/IBM-157-28-E.pdf
- ^ http://packages.debian.org/stable/sysvbanner
- ^ http://cedar-solutions.com/software/utilities.html
- ^ http://packages.debian.org/stable/bsdmainutils
参考文献
[編集]- Amir Afzal (2008). “The banner command”. UNIX Unbounded. Prentice Hall. pp. 462–463. ISBN 0131194496