ED.R Ver0.99XI Y2K対応パッチ 作・小林顕彦
━━ 概要 ED.R Ver0.99XIで2000年に作成したファイルの年度表示が':0'になってしま う不具合を修正するパッチです。 以下に示すタイムスタンプ用の差分です。 filename date time size ed.r 94/04/30 20:44:06 37720 ━━ ご使用の前に このプログラムはフリーウェアです。配布・改変等自由に行って構いません。 ただし、動作に関しては無保証ですので、このプログラムによって発生した 損害等について一切責任を持ちません。 ━━ 使い方 カレントディレクトリに元ファイル(ed.r)を用意し、 bup EDR.BFD として下さい。 ━━ 修正点について 元のプログラムでは数値から文字列に変換するのに下のようなサブルーチン を使っていました(d0.bに数値、a0に文字列の先頭アドレスを入れて呼び出し ています)。 元のプログラム 修正したプログラム L008b90: L008b90: movem.l d0-d1,-(a7) movem.l d0-d2,-(a7) moveq.l #'0'+10,d2 L008b96: move.b #'0',d1 moveq.l #'0',d1 L008b98: L008b98: sub.b #10,d0 sub.b #10,d0 bcs L008ba2 bcs L008ba6 addq.b #1,d1 addq.b #1,d1 cmp.b d2,d1 bra L008b98 bne L008b98 bra L008b96 L008ba2: L008ba6: move.b d1,(a0)+ move.b d1,(a0)+ add.b #'0'+10,d0 add.b d2,d0 move.b d0,(a0)+ move.b d0,(a0)+ movem.l (a7)+,d0-d1 movem.l (a7)+,d0-d2 rts rts 10の桁は、10を何回引くことができるかで求めていますが、このままでは100 以上の数値に対応できません(ちなみに 1900年=0、1901年=1、1910年=10、…、 2000年=100としてこのサブルーチンを呼び出しています)。 このパッチでは100になったら0に戻すという方法で対処しています。サブルー チンの先頭で99以下の数値に加工するというのがまっとうな方法かもしれま せんが、「プログラムサイズを変えない」というのを目標にしていましたの でこのような変更になりました(結局目標は達成できませんでしたが)。 プログラムサイズを変えたくないのには2つ理由がありました。 1つ目はエディタ本体側がファイルセレクタ部分のプログラムサイズをチェッ クしていることです。これは7c98バイト目のサイズを書き換えることで対処 しています。 2つ目は解析が十分でないため、間違ったアドレスにジャンプしたり、間違っ たアドレスを参照したりする可能性があるということです。これに関しては 途中で諦めてしまっていますので、もしかすると問題が発生するかもしれま せん。 ━━ 謝辞 このプログラムを作成するにあたり、以下のツールを使用させていただきま した。作者の方に感謝致します。 DIS v2.78 K.Abe氏、R.ShimiZu氏 HAS v3.09 Y.Nakamura氏 HLK v3.01 SALT氏 BDIF v1.2 K.Higashide氏 (EOF)