FORTRAN 77 言語リファレンス | ![]() ![]() ![]() ![]() ![]() |
付録 D
VMS 言語拡張
この付録では Fortran 77 がサポートする VMS 言語拡張について説明します。これらの拡張はすべて規格外です。 ©
背景
この Fortran コンパイラには、VMS から Solaris 環境への Fortran 77 プログラムの移植を簡単にするために VMS 拡張が含まれています。このコンパイラは VMS Fortran とほぼ完全な互換性を持っています。これらの拡張は
dbx
とf77
に含まれています。サンの Fortran の VMS 言語機能
以下のリストは、
f77
に含まれる VMS 機能の要約です。詳細は本書の他の部分で説明します。
- 変数群入出力
- ラベルなし
DO
...END
DO
- 確定していない
DO
WHILE
...END
DO
BYTE
データ型- 整数についての論理演算および論理についての算術演算
- FORMAT 文のための追加の欄と編集記述子
FORMAT
文における w、d、e の各欄のデフォルト欄記述子- ホレリス編集記述子への読み取り
OPEN
のためのAPPEND
オプション- 長い名前 (32 文字)
- 名前における "
_
" と "$
"-e
オプションが設定されている長いソース行 (132 文字)- 記録、構造体、共用体、マップ
%LOC
関数によるアドレスの獲得%VAL
関数による引数渡し- 行末注釈
OPTIONS
文- VMS タブフォーマットソース行は有効です。
- 共通の初期化
BLOCK DATA
副プログラム外で共通ブロックの変数を初期化することができます。共通ブロックのいくつかの部分を初期化することができますが、複数の副プログラムにある 1 つの共通ブロックの部分を初期化することはできません。- 50 進数
IMPLICIT
NONE
はIMPLICIT
UNDEFINED
(A-Z)
として扱われます。VIRTUAL
はDIMENSION
として扱われます。- 宣言で初期化を行います。
- 文字型でない書式指定子
- 副プログラム呼び出しにおける省略された引数
- コンパイラはサブルーチン呼び出しにおける省略された実引数を受け付けます。つまり、2 つの連続するコンマは NULL ポインタにコンパイルされます。その仮引数を参照すると、セグメンテーション違反が生じます。
REAL*16
- 非文字変数
- Fortran 77 規格では、
OPEN
およびINQUIRE
のときのFILE=
指定子はCHARACTER
型の式でなければなりません。しかし、f77
は数値変数または配列要素の引用を受け付けます。- 連続演算子
- 不正な実数式
TYPE
文とACCEPT
文は許可されます。- 選択戻り
- 選択戻りの実引数のための規格外の
&
構文は Fortran 77 規格の*
構文として扱われます。次に例を示します。
CALL SUBX ( I, *100, Z) ! 標準CALL SUBX ( I, &100, Z ) ! 非標準の代替構文ENCODE
文とDECODE
文は受け付けられます。'N
記録指定子を持つ直接入出力
- 例 : 記録指定子のための規格外の形式
READ ( K ' N ) LIST- 上記の形式は次のように扱われます。
READ ( UNIT=K, REC=N ) LIST
- 論理装置番号は
K
であり、記録数はN
です。
NAME、RECORDSIZE、TYPE
の各オプション −OPEN
は次の代替オプションを持っています。DISPOSE=
p- 特殊組込み関数
%VAL
は受け付けられます。%LOC
はLOC
として扱われます。%REF
(expr) は expr として (expr がCHARACTER
型の場合は警告付きで) 扱われます。%DESCR
は翻訳不能の関数として報告されます。FORMAT
文における変数式-xl または -vax=spec を必要とする VMS 機能
特殊なオプションを使用しなくても、ほとんどの VMS 機能は自動的に得られますが、
f77
コマンド行に-xl
オプションを追加しなければならないものもあります。一般に、ソース文が VMS か
f77
のどちらの動作様式としても解釈可能で、ユーザーが VMS の動作様式を希望する場合、この-xl
オプションが必要です。この場合、-xl
オプションはコンパイラにそれを VMS Fortran として解釈するよう強制します。これら VMS 拡張機能を個々に指定することができる
-vax
=spec オプションもあります。詳細は、『Fortran ユーザーズガイド』を参照してください。-xl[d] オプションを必要とする機能の要約
以下の機能を使用するためには
-xl[d]
オプションが必要です。
- 書式なし記録の
サイズ指定の単位
がバイトでなくワード (-xl
)- VMS スタイルの論理ファイル名 (
-xl
)- 8 進定数を指定する引用符 (") 文字 (
-xl
)- 文字定数内の通常文字としてのバックスラッシュ (\) 文字 (
-xl
)PARAMETER
文の規格外の形式 (-xl
)- 注釈行、あるいは Fortran 77 文としてのデバッグ行 (
-xld
)- VMS Fortran の構造体にする (
-xl
)-xl[d] オプションを必要とする機能の詳細
-xl[d]
オプションを設定しなかった場合、OPEN
オプションRECL=
n の引数 n は、記録サイズのために使用するバイト数であると想定されます。-xl[d]
オプションを設定した場合、OPEN
オプションRECL=
n の引数 n は、ワード数であると想定されるので、コンパイラは n*4
を記録サイズのためのバイト数として使用します。-xl[d]
オプションを設定した場合、ファイルが書式付きか、書式付きでないかをコンパイラが判断できないと、記録サイズを調整する必要があるかもしれないという警告メッセージが出されます。これは、情報が可変文字列で渡される場合に起こる可能性があります。INQUIRE
文により返される記録サイズはコンパイラにより調整されません。つまり、INQUIRE
は常にバイト数を返します。- これらの記録サイズは、書式なし直接探査ファイルにだけ適用されるという点に注意してください。
- VMS スタイルの論理ファイル名
-xl[d]
オプションを設定した場合、コンパイラは、環境変数LOGICALNAMEMAPPING
を見つけ、論理名と UNIX パス名との間のマッピングを定義していることが分かれば、INCLUDE
文において VMS 論理ファイル名を解釈します。- 環境変数を次の形式の文字列に設定します。
"lname1=path1; lname2=path2; ..."- VMS スタイルの論理ファイル名の規則は、以下のとおりです。
- 各々の lname は論理名であり、各々の path1、path2 などはディレクトリのパス名です (後続
/
はなし)。- コンパイラはこのような文字列を構文解析するとき、すべての空白を無視します。
- コンパイラは
INCLUDE
文におけるファイル名から後続の/[no]list
を除去します。- ファイル名における論理名は VMS ファイル名の最初の : で区切られます。
- コンパイラは lname1:file から path1/file 形式へファイル名を変換します。
- 論理名については、大文字/小文字が区別されます。
INCLUDE
文でLOGICALNAMEMAPPING
に指定されていない論理名は、そのファイル名が変更せずにそのまま使用されます。
- 8 進定数を指定する引用符 (") 文字
-xl[d]
コンパイラオプションを設定した場合、VMS Fortran の 8 進整定数はその 10 進形式として扱われます。- 例 : VMS の 8 進整定数
JCOUNT = ICOUNT + "703- 上記の文は次のように扱われます。
JCOUNT = ICOUNT + 451-xl[d]
オプションが設定されていない場合、"703
はエラーになります。-xl[d]
が設定されている場合、VMS Fortran の "703
という表記法は、整数の 8 進定数からその整数の 10 進定数 (この場合は 451) に変換するようf77
にシグナルを送ります。VMS Fortran では "703
は文字定数の最初に使用することはできないという点に注意してください。VMS Fortran 文字定数は引用符ではなく、アポストロフィで区切られるからです。
- 文字定数内のバックスラッシュ (\) 文字
-xl[d]
オプションが設定されている場合、文字列におけるバックスラッシュは通常の文字として、設定されていない場合は、エスケープ文字として扱われます。
PARAMETER
文の規格外の形式
-xl[d]
オプションが設定されていれば、代替PARAMETER
文の構文は許可されます。
例 :PARAMETER
文の VMS 代替形式は括弧を省略します。
PARAMETER FLAG1 = .TRUE.
- 注釈行、あるいは Fortran 文としてのデバッグ行 (
-xld
)
-xld
オプションが設定されているかどうかによって、コンパイラは、注釈行あるいは Fortran 文としてデバッグ行を解釈します。-xld
オプションが設定されている場合は、コンパイルされます。設定されていなければ、それらは注釈になります。- 例 : デバッグ行
REAL A(5) / 5.0, 6.0, 7.0, 8.0, 9.0 /DO I = 1, 5X = A(I)**2D PRINT *, I, XEND DOPRINT *, '終了'END-xld
を付けると、上記の例ではI
とX
が出力されます。-xld
がなければ、それらは出力されません。
- VMS Fortran の構造体にする
- ユーザーのプログラムで VMS 構造体を使用する方法が詳しくわかっている場合は、この機能を使用してください。C と構造体を共有する必要がある場合は、デフォルトを使用します。
-xl
は使用しません。サポートされていない VMS Fortran
ほとんどの VMS Fortran 拡張は
f77
コンパイラに組み込まれています。コンパイラはソースファイルのサポートされていない文について標準エラーにメッセージを出力します。
DEFINE
FILE
文DELETE
文UNLOCK
文FIND
文REWRITE
文READ
文のKEYID
とキー指定子- 規格外の
INQUIRE
指定子- 規格外の
OPEN
指定子
ASSOCIATEVARIABLE
BLOCKSIZE
BUFFERCOUNT
CARRIAGECONTROL
DEFAULTFILE
DISP[OSE]
EXTENDSIZE
INITIALSIZE
KEY
MAXREC
NOSPANBLOCKS
ORGANIZATION
RECORDTYPE
SHARED
USEROPEN
- 組み込み関数
%DESCR
OPTIONS
文における次のパラメータINCLUDE
文の一部
INCLUDE
文は部分的に変換されます。INCLUDE
文はオペレーティングシステムに依存しているので、完全な自動変換はできません。VMS バージョンでは UNIX ファイル名の延長と区別できないモジュール名およびLIST
制御指令が許可されます。また、VMS は英文字の大文字小文字を区別しないので、プログラマが大文字化について一貫していなければ、意図に反して異なる結果になります。- 短整数を期待している場所での 長整数の利用
- VMS Fortran では、短整数を予想しているサブルーチンに 長整数の引数を渡すことができます。VAX は下位バイトに整数をアドレス指定するため、長整数が 16 ビットに納まる場合はこれでうまくいきます。しかし SPARC コンピュータでは無効です。
- オペレーティングシステムに直接関係する VMS システムコール
- 2 つ以上の副プログラムにおける共通ブロックの初期化
- ブロックをロードする順序に依存するように共通ブロックをアルファベット化します。
-M
mapfile オプションのついた古いブロックをld
に指定することができます。- 次の両方に対してデフォルトを使用する場合、
書式付き数値入力では、埋め込み空白および後続空白が無視されます。対応する VMS デフォルトは、それらの空白をゼロとして扱います。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |