| FORTRAN 77 言語リファレンス |
付録 D
VMS 言語拡張
この付録では Fortran 77 がサポートする VMS 言語拡張について説明します。これらの拡張はすべて規格外です。 ©
背景
この Fortran コンパイラには、VMS から Solaris 環境への Fortran 77 プログラムの移植を簡単にするために VMS 拡張が含まれています。このコンパイラは VMS Fortran とほぼ完全な互換性を持っています。これらの拡張は
dbxとf77に含まれています。サンの Fortran の VMS 言語機能
以下のリストは、
f77に含まれる VMS 機能の要約です。詳細は本書の他の部分で説明します。
- 変数群入出力
- ラベルなし
DO...ENDDO- 確定していない
DOWHILE...ENDDOBYTEデータ型- 整数についての論理演算および論理についての算術演算
- FORMAT 文のための追加の欄と編集記述子
FORMAT文における w、d、e の各欄のデフォルト欄記述子- ホレリス編集記述子への読み取り
OPENのためのAPPENDオプション- 長い名前 (32 文字)
- 名前における "
_" と "$"-eオプションが設定されている長いソース行 (132 文字)- 記録、構造体、共用体、マップ
%LOC関数によるアドレスの獲得%VAL関数による引数渡し- 行末注釈
OPTIONS文- VMS タブフォーマットソース行は有効です。
- 共通の初期化
BLOCK DATA副プログラム外で共通ブロックの変数を初期化することができます。共通ブロックのいくつかの部分を初期化することができますが、複数の副プログラムにある 1 つの共通ブロックの部分を初期化することはできません。- 50 進数
IMPLICITNONEはIMPLICITUNDEFINED(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コンパイラに組み込まれています。コンパイラはソースファイルのサポートされていない文について標準エラーにメッセージを出力します。
DEFINEFILE文DELETE文UNLOCK文FIND文REWRITE文READ文のKEYIDとキー指定子- 規格外の
INQUIRE指定子- 規格外の
OPEN指定子
ASSOCIATEVARIABLEBLOCKSIZEBUFFERCOUNTCARRIAGECONTROLDEFAULTFILEDISP[OSE]EXTENDSIZEINITIALSIZEKEYMAXRECNOSPANBLOCKSORGANIZATIONRECORDTYPESHAREDUSEROPEN- 組み込み関数
%DESCROPTIONS文における次のパラメータINCLUDE文の一部
INCLUDE文は部分的に変換されます。INCLUDE文はオペレーティングシステムに依存しているので、完全な自動変換はできません。VMS バージョンでは UNIX ファイル名の延長と区別できないモジュール名およびLIST制御指令が許可されます。また、VMS は英文字の大文字小文字を区別しないので、プログラマが大文字化について一貫していなければ、意図に反して異なる結果になります。- 短整数を期待している場所での 長整数の利用
- VMS Fortran では、短整数を予想しているサブルーチンに 長整数の引数を渡すことができます。VAX は下位バイトに整数をアドレス指定するため、長整数が 16 ビットに納まる場合はこれでうまくいきます。しかし SPARC コンピュータでは無効です。
- オペレーティングシステムに直接関係する VMS システムコール
- 2 つ以上の副プログラムにおける共通ブロックの初期化
- ブロックをロードする順序に依存するように共通ブロックをアルファベット化します。
-Mmapfile オプションのついた古いブロックをldに指定することができます。- 次の両方に対してデフォルトを使用する場合、
書式付き数値入力では、埋め込み空白および後続空白が無視されます。対応する VMS デフォルトは、それらの空白をゼロとして扱います。
|
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |