In article <040129153628.M0129953@flame.hirata.nuee.nagoya-u.ac.jp> takao@hirata.nuee.nagoya-u.ac.jp writes:
>> > FORTRANだと固定レコード長(一行80文字)でフォーマットしなければ
>> > ならぬ、みたいな制限がついてないでしょうか?
>>   うーん、言語の問題というよりOSの問題に近いような。でもこの置換
>> の場合は文字数を変えないように空白文字を入れて調整できますよね。
>いや, いにしえの FORTRAN では 1行 72文字という制限がありました.
正確には「73文字目以降に何を書いても、
プログラムの一部とは看做さない」ということですね。
「過去のソースが使える」という意味の互換性を確保するには、
少なくともオプションとして、73文字目以降に書いてあることを
無視するという動作が選択できねばなりません。
従って、単純に文字挿入すると、
72文字目に書いてあった文字が73文字目に移動した結果、
「テキストエディタでは見えているのに、コンパイラには見えない」
という事態になりかねません。

ちなみにこれは、「1行80文字の固定レコード長」の起源である、
「パンチカード」に由来する規格ですね。
パンチカードというのは、
長形3号封筒に入る程度の大きさの厚紙の所定の位置に穴を開けて、
その1枚を1行分のテキストデータとするファイル媒体です。
何十枚何百枚ものカードを積み上げたのを横倒しにした「カードデック」を
「カードリーダー」と称する入力機器にセットすると、
高速で1枚ずつ読み取り部へ送られて行って、
光学的に穴の位置を読み取ってデータが入力されるという仕掛けです。

当然ながら頻発する事故のパターンとして、
カードデックを取り落として床に散乱させてしまい、
順序が判らなくなってしまうというのがあります。
このような状況を想定して、
80文字の最後の8文字は「順序番号」用のエリアになっていました。
事故の際には、順序番号でソートしてやれば元に戻るというわけです。
あるいは、この番号が昇順になっていないという事実をもって、
データ順序の錯綜を検出するということもできました。

「順序番号」は間隔を10とする昇順にするのが標準的なテクニックでした。
これは、行挿入の必要が生じた時に、
間の9つの番号から適宜選択して使うことにより、
他の行の番号を変更しなくて済む=他のカードを穿孔し直さなくて済む
ようにするためです。

そういうわけですから、この「順序番号」の部分は、
コンパイラに認識させてはならなかったのです。

                                戸田 孝@滋賀県立琵琶湖博物館
                                 toda@lbm.go.jp