CRが増えていくruinedの編集モードを作っていて不思議現象にぶつかった。気付くと改行が増えていくのだ。OSXやLinuxで編集したソースなら改行は\nだけ、Windowsでメモ帳で作ったソースなら改行は\r\n、でも他のエディタで作れば\nだけ、という状態を保持したいわけだが、途中でHTMLのtextareaに入れるから、そこをうまいこと復元させようと考えていたのであった。"abc\r\ndef\r\n"endとすると、書かれたファイルはabc\r\r\ndef\r\r\nとなって\rが増える。\r\nであれば、つまり\rに続けて\nがあれば余計な\nはつかないというような制御をしていると思っていたのでこれは驚いた。なく、\nを見ると自動的に\r\nを出力するのがテキストモードの仕様なのだった。思ってCで試してみる(msvcr100)。結論:テキストモードを使う場合は、明示的な\rを出力バッファへ含めてはならない。\rを意識するのであればバイナリモードを利用する。いえば、昨日はつい怒りにまかせて改行を1文字であるかのように書いたが、正しくは、復帰で行の先頭に戻り、改行で行送りをするのだから、\r\nの復帰改行2文字が正しく、\nだけだと80カラム端末ならたまたま80カラム出力した後であれば同一行でくるりとカラム0にカーソルが進み、そこで改行コードで直下に落ちるのでうまくいくだけなのだった。コンピュータはタイプライターではないのだから、そういうことはどうでも良いのだった。復帰の意味を思い出してやるのだった。そのへんについてはレイモンドチェンが書いている。