マニュアルページ trewin.3f




名前

     topen, tclose, tread, twrite, trewin, tskipf, tstate -  FOR-
     TRAN テープ入出力 (OBSOLETE)


注意事項 : 廃止事項

     このマニュアルページは、履歴情報としてのみ提供されます。この
     機能は、Fortran 95 (f95) には実装されません。


概要

     これらの関数を用いて、 FORTRAN から磁気テープを操作 で き ま
     す。
     標準の FORTRAN 入出力に対して、これらの関数を使用しないで く
     ださい。
     まず topen() で、該当するデバイスのテープ論理ユニット tlu を
     呼 び出す必要があります。その後の操作は、 tlu 上で行なってく
     ださい。 tlu は、通常の FORTRAN 論理ユニットとは関係ありませ
     ん。
     これらの関数を使用する場合、その前の INTEGER 文の中に該当 す
     る関数名がなければなりません。


機能説明



     topen - デバイス名をテープ論理ユニットに対応付けます。 つ ま
     り、テープは動きません。

     構文 :  n = topen( tlu, devnam, islabeled )
          tlu はテープ論理ユニットです。これは、整数入力引数で、0
          から 7 までの範囲でなければなりません。
          islabeled は、テープがラベル付けされているかどうかを 示
          します。これは、論理入力引数です。
            テープにテープラベルが含まれていることが分かってい る
            場合は、 islabeled を「真」に設定してください。ラベル
            とは、テープ上の先頭のファイルです。
          n は戻り値で、n=0 のときは正常、n<0 のときはエラーを 示
          します。
          詳細については perror (3f) を参照してください。

     使用例 :  1/4 インチ・テープファイルをオープンします。

                  CHARACTER devnam*9 / '/dev/rst0' /
                  INTEGER n / 0 /, tlu / 1 /, topen
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  IF ( n .LT. 0 ) STOP "topen: cannot open"
                  WRITE(*,'("topen ok:", 2I3, 1X, A10)') n, tlu,  devnam
                  END

          表示される内容は次のとおりです。

          topen ok:  0  1   /dev/rst0



     tclose - EOF を書き込んでテープデバイス・チャネルをクロー ズ
     し、 tlu とデバイスとの対応を削除します。
     構文 :  n = tclose ( tlu )
          tlu はテープ論理ユニット。これは、整数入力引数で、0  か
          ら 7 までの範囲でなければなりません。
          n は整数の戻り値で、n=0 のときは正常、n<0 のと き は エ
          ラーを示します。
          tclose() は、ユニットポインタの現在の位置の直後 に  EOF
          マー ク を 置いた後、ユニットをクローズします。したがっ
          て、 tclose() でユニットをクローズする前にそのユニッ ト
          に 対して trewin() を実行すると、ユニットの内容が破棄さ
          れます。

     使用例 : オープンされている 1/4 インチテープファイルをクロー
     ズします。
                  CHARACTER devnam*9 / '/dev/rst0' /
                  INTEGER n / 0 /, tlu / 1 /, tclose, topen
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  n = tclose ( tlu )
                  IF ( n .LT. 0 ) STOP "tclose: cannot close"
                  WRITE(*, '("tclose ok:", 2I3, 1X, A10)')  n, tlu,  devnam
                  END
          表示される内容は次のとおりです。

          tclose ok:  0  1  /dev/rst0

     twrite - バッファ内の次の物理レコードをテープに書き 込 み ま
     す。
     構文 :  n = twrite ( tlu, buffer )

          tlu はテープ論理ユニット。これは、整数入力引数で、0  か
          ら 7 までの範囲でなければなりません。
          buffer は、文字型で、サイズは 512 の倍数でなければな り
          ません。
          n は戻り値です。
          n >0 のときは正常で、 n は書き込まれたバイト数を示し ま
          す。
          n =0 のときはテープの終端、
          n <0 のときはエラーを示します。
          物理レコードの長さは、 buffer のサイズに一致します。

     使用例 : 2 つのレコードで構成されるファイルを書き込みます。

                  CHARACTER devnam*9 / '/dev/rst0' /, rec1*512 / "abcd" /
               CHARACTR rec2*512 / "wxyz" /
                  INTEGER n / 0 /, tlu / 1 /, tclose, topen, twrite
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  IF ( n .LT. 0 ) STOP "topen: cannot open"
                  n = twrite ( tlu, rec1 )
                  IF ( n .LT. 0 ) STOP "twrite: cannot write 1"
                  n = twrite ( tlu, rec2 )
                  IF ( n .LT. 0 ) STOP "twrite: cannot write 2"
                  WRITE(*, '("twrite ok:", 2I4, 1X, A10)')  n, tlu,  devnam
                  END

          表示される内容は次のとおりです。

          twrite ok: 512 1 /dev/rst0



     tread - テープの次の物理レコードをバッファに書き込み ま す。
     EOF  または EOT で戻り、その場合にはテープの読み取りは行いま
     せん。

     構文 :  n = tread ( tlu, buffer )
          tlu はテープ論理ユニット。これは、整数入力引数で、0  か
          ら 7 までの範囲でなければなりません。
          buffer は文字型で、サイズは 512 の倍数でなければなり ま
          せん。
            buffer のサイズは、読み取る最大の物理ブロックを保持す
            るのに十分なサイズでなければなりません。
          n は戻り値で、 n <0 のときはエラー、 n =0 のときは ファ
          イルの終端を示します。
          n >0 のとき、 n は実際に読み取ったバイト数を示します。

     使用例 : 上の例で書き込んだファイルの先頭のレコードを読み 取
     ります。

                  CHARACTER devnam*9 / '/dev/rst0' /, onerec*512 / " " /
                  INTEGER n / 0 /, tlu / 1 /, topen, tread
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  IF ( n .LT. 0 ) STOP "topen: cannot open"
                  n = tread ( tlu, onerec )
                  IF ( n .LT. 0 ) STOP "tread: cannot read"
                  WRITE(*,'("tread ok:", 2I4, 1X, A10)')  n, tlu,  devnam
                  WRITE(*,'( A4)')  onerec
                  END

          表示される内容は次のとおりです。

          tread ok: 512   1  /dev/rst0
          abcd

     trewin - 先頭のデータファイルの先頭にテープを巻き戻します。

     構文 :  n = trewin ( tlu )
          tlu はテープ論理ユニットです。これは、整数入力引数で、0
          から 7 までの範囲でなければなりません。
          n は戻り値で、 n =0 のときは正常、 n <0 のときはエ ラー
          を示します。
          テープがラベル付けされている場合 (上記の topen を 参 照
          )、そのラベルは巻き戻し後に読み飛ばします。

     使用例 1 : 典型的なプログラム (部分)

                  CHARACTER devnam*9 / '/dev/rst0' /
                  INTEGER n /0/, tlu /1/, tclose, topen, tread, trewin
                  ...
                  n = trewin ( tlu )
                  IF ( n .LT. 0 ) STOP "trewin: cannot rewind"
                  WRITE(*, '("trewin ok:", 2I4, 1X, A10)')  n, tlu,  devnam
                  ...
                  END

     使用例 2 : 2 つのレコードで構成されるファイルで、3  つ の レ
     コー ドの読み取りを試みた後、巻き戻しを行なって 1 つのレコー
     ドを読み取ります。

                  CHARACTER devnam*9 / '/dev/rst0' /, onerec*512 / " " /
                  INTEGER n / 0 /, r, tlu / 1 /, topen, tread, trewin
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  IF ( n .LT. 0 ) STOP "topen: cannot open"
                  DO r = 1, 3
                     n = tread ( tlu, onerec )
                     WRITE(*,'(1X, I2, 1X, A4)')  r, onerec
                  END DO
                  n = trewin ( tlu )
                  IF ( n .LT. 0 ) STOP "trewin: cannot rewind"
                  WRITE(*, '("trewin ok:" 2I4, 1X, A10)')  n, tlu,  devnam
                  n = tread ( tlu, onerec )
                  IF ( n .LT. 0 ) STOP "tread: cannot read after rewind"
                  WRITE(*,'(A4)')  onerec
                  END

          表示される内容は次のとおりです。

            1 abcd
            2 wxyz
            3 wxyz
          trewin ok:   0   1  /dev/rst0
          abcd








     tskipf - ファイルおよびレコードの一方を前方に読み飛ばし、EOF
     ステータスフラグをリセットします。後方への読み飛ばしは行いま
     せん。

     構文 :  n = tskipf( tlu, nf, nr )
          tlu はテープ論理ユニットです。これは、整数入力引数で、0
          から 7 までの範囲でなければなりません。
          nf は、最初に読み飛ばす EOF マークの数を示す整数です。
          nr は、ファイルを読み飛ばした後に読み飛ばす物理レコード
          の数を示す整数です。
          n は整数の戻り値で、n=0 のときは正常、n<0 のと き は エ
          ラーを示します。
          この関数は、まず nf 個の EOF マークをスキップし た 後、
          nr  個 の物理レコードをスキップします。現在のファイルの
          EOF に位置しているとき、この EOF は読み飛ばすファイルの
          1  つとしてカウントします。このとき、EOF ステータスフラ
          グはリセットされます。下の tstate を参照してください。

     使用例 : 典型的なプログラム (m は 4 つのファイルを読み飛ばし
     た後、1 つのレコードを読み飛ばします)。 tstate の 2 番目の例
     も参照してください。

          INTEGER nfiles / 4 /, nrecords / 1 /, tskipf, tlu / 1 /
          ...
          n = tskipf( tlu, nfiles, nrecords )
          IF ( n .LT. 0 ) STOP "tskipf: cannot skip"

     tstate - テープ入出力チャネルの論理ステータスを取得します。

     構文 :  n = tstate ( tlu, fileno, recno, errf,  eoff,  eotf,
     tcsr )
          tlu はテープ論理ユニットです。これは、整数入力引数で、0
          から 7 までの範囲でなければなりません。
          fileno は、現在のファイル番号を示す整数出力引数です。
          recno は、現在のレコード番号を示す整数出力引数です。
          errf は、発生したエラーを示す論理出力引数です。
          eoff は、現在のファイルが EOF に位置していることを示 す
          論理出力引数です。
            eoff が真の間は、 tlu から読み取りを行うことはでき ま
            せん。 tskipf() を使用して 1 つのファイルとゼロ個のレ
            コードを読み飛ばせば、この EOF ステータスフラグを偽に
            設定することができます。 n=tskipf( tlu, 1, 0 ) 。これ
            で、その後の有効なレコードを読み取ることができます。
          eotf は、テープが論理的なテープの終端に到達したことを示
          す論理出力引数です。
            EOT は、空のファイル (二重 EOF マークと呼ばれることが
            多 い) によって示されます。EOT の後ろを読み取ることは
            できませんが、EOT の後ろに書き込みはできます。
          tcsr は、デバイス上のハードウェアエラーを示す整数出力引
          数 です。これは、テープドライブの制御ステータスレジスタ
          です。エラーがソフトウェアによるものである場合は、 tcsr
          にゼロが返されます。
          このステータスレジスタに返される値は、テープドライブ の
          ブ ランドやサイズによって大きく異なります。詳細について
          は、 st(4s) を参照してください。

















































     使用例 : それぞれが 2 つのレコードで構成される 3 つのレ コー
     ド を 書 き込みます。この後の例では、tstate() を使用すること
     で、EOF をトラップしてすべてのファイルに到達します。
                  CHARACTER devnam*10 / '/dev/nrst0' /,
          &                 f0rec1*512 / "eins" /, f0rec2*512 / "zwei" /,
          &                 f1rec1*512 / "ichi" /, f1rec2*512 / "ni__" /,
          &                 f2rec1*512 / "un__" /, f2rec2*512 / "deux" /
                  INTEGER n / 0 /, tlu / 1 /, tclose, topen, trewin, twrite
                  LOGICAL islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  n = trewin ( tlu )
                  n = twrite ( tlu, f0rec1 )
                  n = twrite ( tlu, f0rec2 )
                  n = tclose ( tlu )
                  n = topen ( tlu, devnam, islabeled )
                  n = twrite ( tlu, f1rec1 )
                  n = twrite ( tlu, f1rec2 )
                  n = tclose ( tlu )
                  n = topen ( tlu, devnam, islabeled )
                  n = twrite ( tlu, f2rec1 )
                  n = twrite ( tlu, f2rec2 )
                  n = tclose ( tlu )
                  END





























     使用例 : 上の例で書き込んだ 3 つのレコードを読み取るループ内
     で tstate() を使用します。

                  CHARACTER devnam*10 / '/dev/nrst0' /, onerec*512 / " " /
                  INTEGER f, n / 0 /, tlu / 1 /, tcsr, topen, tread, trewin
               INTEGER tskipf, tstate
                  LOGICAL errf, eoff, eotf, islabeled / .false. /
                  n = topen ( tlu, devnam, islabeled )
                  n = tstate ( tlu, fn, rn, errf, eoff, eotf, tcsr )
                  WRITE(*,1)  'open:', fn, rn, errf, eoff, eotf, tcsr
           1      FORMAT(1X, A10, 2I2, 1X, 1L, 1X, 1L,1X, 1L, 1X, I2 )
           2      FORMAT(1X, A10, 1X, A4, 1X, 2I2, 1X, 1L, 1X, 1L,1X, 1L, 1X, I2)
                  n = trewin ( tlu )
                  n = tstate ( tlu, fn, rn, errf, eoff, eotf, tcsr )
                  WRITE(*,1)  'rewind:', fn, rn, errf, eoff, eotf, tcsr
                  DO f = 1, 3
                     eoff = .false.
                     DO WHILE ( .NOT. eoff )
                        n = tread ( tlu, onerec )
                        n = tstate ( tlu, fn, rn, errf, eoff, eotf, tcsr )
                        IF (.NOT. eoff) WRITE(*,2) 'read:', onerec, fn, rn, errf, eoff,
             1                          eotf, tcsr
                     END DO
                     n = tskipf ( tlu, 1, 0 )
                     n = tstate ( tlu, fn, rn, errf, eoff, eotf, tcsr )
                     WRITE(*,1)  'tskip: ', fn, rn, errf, eoff, eotf, tcsr
                  END DO
                  END

          表示される内容は次のとおりです。

                open: 0 0  F  F  F  0
              rewind: 0 0  F  F  F  0
                read: eins  0 1  F  F  F  0
                read: zwei  0 2  F  F  F  0
              tskip:  1 0  F  F  F  0
                read: ichi  1 1  F  F  F  0
                read: ni__  1 2  F  F  F  0
              tskip:  2 0  F  F  F  0
                read: un__  2 1  F  F  F  0
                read: deux  2 2  F  F  F  0
              tskip:  3 0  F  F  F  0










     EOF  EOT 

       1. EOF または EOT のどちらかに位置する場合、
         a. tread() は戻るだけで、テープの読み取りは行わない。
         b. tskipf ( tlu, 1, 0 ) は EOF ステータスフラグを偽に 設
         定して戻る。テープポインタは進めない。
       2. twrite() が正常終了すると、 EOF と EOT の 2 つのス テー
       タスフラグは偽に設定される。
       3. tclose() が正常終了すると、 EOF と EOT の 2 つのス テー
       タスフラグは偽に設定される。

     tclose() は切り捨て : tclose() は、ユニットポインタの現在 の
     位 置の直後に EOF を置いた後、そのユニットをクローズします。
     したがって、 tclose() でユニットをクローズする前に  trewin()
     を使用してユニットの巻き戻しを行うと、ユニットの内容は破棄さ
     れます。 tclose() のこの動作は、Berkeley コードから受け継 が
     れたものです。


注意事項: 廃止事項

     このマニュアルページは、履歴情報としてのみ提供されます。この
     機能は、Fortran 95 (f95) には実装されません。