mopac6 を MinGW でビルドしようとしてまたハマってしまった(なんでそんな古いバージョンを使うのか、せめて mopac7 を使え、という話はともかく)。Mac OS X 上の gfortran だと普通に動くのに、MinGW 上だと動かない。「またスタックサイズか?」とか「入力ファイルの改行コードの問題か?」とか丸2日さんざん悩んだあげく、ついに不正現場を取り押さえた。
--- gettxt.f.orig Sat Apr 2 07:07:04 2005 +++ gettxt.f Mon Dec 21 00:05:39 2009 @@ -89,7 +89,7 @@ READ(5,'(A)',END=100,ERR=90)TITLE ENDIF ELSE - READ(5,'(A)',END=100,ERR=90)KOMENT,TITLE + READ(5,'(A80)',END=100,ERR=90)KOMENT,TITLE ENDIF GOTO 50 40 WRITE(6,'(A)')' SETUP FILE MISSING OR CORRUPT'
KOMENT,TITLE
という2つの文字列を読み込んでいる場面で、最初の1行をKOMENT
、次の行をTITLE
に読むのが期待される動作。ところが、フォーマットが '(A)'
だとKOMENT
に最初の行が入って、TITLE
には同じ行の2文字目以降が入る。これは明らかにおかしい。フォーマットを '(A80)'
にすると、一応期待した通りの結果になる。もっとも、どう書く「べき」かはよくわかっておらず、「実験してみたらたまたま動作した」という、非常によろしくない状況である。しかしまあ、古くてしかも人様のコードだし、この手の修正をやり始めたらきりがないような気もするし、どうしたもんかなあ。