Skip to content

Latest commit

 

History

History
44 lines (28 loc) · 1.85 KB

005-asa.md

File metadata and controls

44 lines (28 loc) · 1.85 KB

asa

asaはキャリッジ制御文字を解釈する。

asaは引数に指定したファイルを標準出力に出力する。その時、キャリッジ制御文字を実装依存のラインプリンター制御シークエンスに変換する。

これだけなら、まだ改行文字を出力する環境に合わせて適切に変換するツールだと言える。しかし、asaはこれだけではなく、もっと奇妙な処理もする。続きを読んでいこう。

入力の各行の最初の文字が除去され、その文字に応じて以下の処理を行う。

  • 空白文字の場合、行の残りが変更なく出力される
  • 0の場合、改行が出力され、行の残りが出力される
  • 1、あるいはそれ以上の実装依存の文字の場合、次ページが出力され、行の残りが出力される
  • +の場合、前行の改行文字は印刷を1文字目に戻す実装依存の文字に置き換わり、行の残りが出力される。もし+が入力最初の文字であった場合は空白と同じ。

例えば以下のような入力ファイルがあった場合

 abc
0def
+---

出力される結果は以下のようになる。

abc

def

ただしdefはdefのようになっているだろう。キャリッジが1文字目に戻って上書きされるためだ。

なぜこのような奇妙な挙動をするのかというと、asaはFORTRAN 77で書かれたプログラムの出力を印刷するのに使われていたのだ。例えば以下のように、

$ a.out | asa | lp

a.outはFORTRAN77で書かれたソフトウェアで、その出力をasaで適切に加工して、プリンターに出力する。

FORTRAN77以外では使われることはなく、今のOSにはまず存在しない。

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/asa.html