先日、ラインプリンタについて書いた。
まだMS-DOSのバージョンが3.1とか3.3で、4が出た頃。UNIX(SONYのNEWS)上のCOBOL(RM-COBOL)からページプリンタを制御した事がある。今のCOBOLは拡張されているかも知れないが、当時のCOBOLの出力は「行単位」である。
※なお、この後「通常のCOBOL」と書くものは、私が経験の長かったIBM/富士通/日立の大型汎用機(MSP系)上のCOBOLを指します。

ページのレイアウトを考え、COBOLプログラムから出力するデータと帳票のフォームであるオーバーレイのデータとに分ける。ここまでは通常のCOBOLでも行うことだ。
そのとき特別に配慮したことは、フォントサイズの調整やオーバーレイの切替、バーコード出力など、プリンタへの制御コード送信、であった。この制御、分かるまでは難物であった。
プリンタ制御にはPC-PR201に準じたプリンタ言語を使ったのだが、それ自体はそう難しいものではない。通常のCOBOLではファイル出力もプリンタ出力もレコードへの出力で、制御を意識するなら
既にメーカーごとのCOBOLの仕様による改行数や改ページ、漢字のフォントサイズくらいであり、制御コードそのものを意識する必要はなかった。(COBOLerなら当然、データをバイナリーコードで確認した経験があるでしょう。そういう意味ではメーカーごとの漢字の開始/終了コードや改ページコードなどは知識としては知っているでしょうけれどね)


まずは、制御コードをプリンタの出力にのせてみた。すると「ごみ」が表示される始末。つまり、COBOL言語の仕様内からプリンタを制御することは不可能、ということを意味する。
よって考えたのが
・制御コードを送信するCプログラムをコールする
・印刷データをCプログラムに渡し、そちらで埋め込む
・UNIXのシェルを呼び出してプリンタに制御コードを送付する
などであった。

結局、シェルコールがCOBOLから保証されていたのでそれを使うことで解決した。

当時はそのプログラムからしかそのプリンタへのアクセスはなかったが、今だとそういう乱暴なプログラムだと「別の印刷タスク」と認識されてしまうのだろう。
今、アプリケーションからそのような制御が必要になることはそうないのだろうけれど、もし必要な場合はどう作ればいいのだろう?ちょっと気になる。


以下、当時の記憶などを思い出しながら、インパクト式プリンタを運用で使う際の考慮点を独断と偏見でまとめました。



インパクト式プリンタの考慮点