ソフトな忘却力(66) FreeDOS、FORTRAN-77、文関数、DO、FORMAT

Joseph Halfmoon

さて前回は40年以上ぶりでFORTRANでHELLO WORLDするのにPRINTなどと書いてしまいました。遥かな太古、WRITE文に漏れなくFORMAT文がついてきた記憶。今回は出力WRITEに加え、文関数の定義、DO文、FORMAT文など使って計算してみますぞ。ちょっとはFORTRANの雰囲気出てきた?まだまだ。

※「 ソフトな忘却力」投稿順 Index はこちら

※実機動作確認には以下を使用しております。

    •  Windows 11 PC (i5-1235U)
    •  Ubuntu 24.04 LTS on WSL2
    •  QEMU 8.2.2
    •  FreeDOS 1.3
    •  OpenWatcom FORTRAN 77 Version 1.9
出力デバイス

そういえば最初に触った古代のFORTRANでは、入出力をするのにデバイス(素っ気なく番号で呼ばれていた)を指定せねばならず、朧気な記憶によると

    • 5番、カードリーダ(80カラムの紙カードだよ~)
    • 6番、ラインプリンタ(1行百何十文字だったっけ?)

だったような。さて、今回古式ゆかしくWRITE文で出力するためにWatom FORTRANのドキュメントを漁ったところ、6番にWRITEすると標準出力に出力されるみたいです。やったね、以下の形式でよいみたい。

    • WRITE(6, FORMAT文の番号) チョメチョメ

でも「6」とデバイス番号書いても、実は「*」と同じに解釈されているみたい。だったら * でよろしいか。なお、6以外、8とか書くとファイル出力になるようです。また今度ね。

今回練習用のソースプログラム

WRITE文、FORMAT文、文関数定義、DO文など盛り込んだソースが以下に。

C        1         2         3         4         5         6         7
C23456789012345678901234567890123456789012345678901234567890123456789012
CnnnnC..................................................................
      PROGRAM FUNC0
      INTEGER I
      REAL MYFUNC, A, X, Y, Z
      MYFUNC(A)=A*0.33
      WRITE(6, 300)
  300 FORMAT(5X,1HX,9X,1HY,9X,1HZ)
      DO 100 I=0, 10, 1
      X = 0.1 * I
      Y = SIN(X)
      Z = MYFUNC(X)
  100 WRITE(6, 200) X,Y,Z
  200 FORMAT(3F10.3)
      STOP
      END

何だか一気にFORTRAN風味がました感じがいたします。気のせいか?

なお、Watom FORTRANのドキュメントによると行頭のコメント文を示すCは、*でも良いし、小文字の c でも許されるみたい。まあ、伝統と格式を重んじるのでCで行くけど。

しかしな、FORMAT文、昔はこんなメンドイこと書いていたんだっけ。

コンパイルしてGO

さてビルドは以下で一撃です(DOS用の16ビット EXE 形式出力の場合。)

wfl /l=dos func0.for

ビルドしている様子が以下に。compileFunc0

実行したところが以下に。runFunc0

段々記憶が蘇ってきた? 最近のことは直ぐに忘れるけど、昔のことは覚えているからな。ホントか?全部忘れてるんじゃないか?

ソフトな忘却力(65) FreeDOS、OpenWatcom FORTRAN、77だぜ。 へ戻る

ソフトな忘却力(67) FreeDOS、FORTRAN-77、READしてWRITE へ進む