前へ | 次へ | 目次 | 索引 |
キーワード CONDENSED と EXPANDED を同時に指定することはできません。この修飾子は,確認が要求された場合に,出力メッセージに表示されるファイル名の書式を指定します。
EXPANDED キーワードが指定されていない場合,ファイル・エラーは CONDENSED ファイル指定で表示されます。
詳細は『OpenVMS システム管理者マニュアル (上巻)』を参照してください。
オプション | 機能 |
---|---|
AUTOMATIC | EXCHANGE/NETWORKコマンドが,適切な転送モードを選択します。これが省略時の設定の転送モードです。 |
BLOCK | ブロック入出力用に入力ファイルと出力ファイルの両方をオープンし,ファイルをブロック単位で転送します。 |
CONVERT[=オプション[,...]] | 入力ファイルからレコードを読み込み,ブロックにパックして,ブロック・モードで出力ファイルに書き込みます。次の表にリストしたオプションによって,転送時にどのような付加情報が挿入されるかが決まります。 |
RECORD | レコード入出力用に入力ファイルと出力ファイルをオープンして,ファイルを逐次アクセスで転送します。ターゲット・システムは,レコード操作をサポートしていなければなりません。また,入力ファイルは,レコード入出力アクセスでオープンしなければなりません。 |
CONVERT 転送モードでは,次の 4 つのオプションを使用して,レコードへの特別な文字の挿入を制御できます。
オプション | 機能 |
---|---|
CARRIAGE_CONTROL | 入力ファイルのキャリッジ制御情報が解釈され,実際の文字に展開されて各レコードに書き込まれます。 |
COUNTED | 各レコードのバイト長がレコードの先頭に書き込まれます。この長さには,各レコードの FIXED_CONTROL,CARRIAGE_CONTROL,および RECORD_SEPARATOR の情報のすべてが含まれます。 |
FIXED_CONTROL | 固定長制御部レコード (VFC) 情報を持つすべての可変長が,データの一部として出力ファイルに書き込まれます。 COUNTED オプションが指定されている場合には,この情報の前にレコード長情報が書き込まれます。 |
RECORD_SEPARATOR= 区切り文字 | 各レコードに 1 バイトまたは 2 バイトのレコード区切り文字が挿入されます。レコード区切り文字は,レコード内の最後の文字です。区切り文字には,次の3つのいずれかを指定できます。
|
#1 |
---|
$ EXCHANGE/NETWORK VMS_FILE.DAT KUDOS::FOREIGN_SYS.DAT |
この例で EXCHANGE/NETWORK コマンドは,現在の省略時の設定の装置およびディレクトリにある VMS_FILE.DAT ファイルを, OpenVMS 以外のノード KUDOS 上の FOREIGN_SYS.DAT ファイルに転送します。 /TRANSFER_MODE 修飾子が明示的に指定されなかったため, EXCHANGE/NETWORK コマンドは自動的に,転送モードをブロック入出力またはレコード入出力のいずれかに決めます。
#2 |
---|
$EXCHANGE/NETWORK/TRANSFER_MODE=BLOCK- _$:KUDOS:FOREIGN_SYS.DAT VMS_FILE.DAT |
この例で EXCHANGE/NETWORK コマンドは, OpenVMS 以外のノード KUDOS にある FOREIGN_SYS.DAT ファイルを,現在の省略時の設定の装置およびディレクトリにある VMS_FILE.DAT ファイルに転送します。転送モードとして,ブロック入出力を指定します。
#3 |
---|
$ EXCHANGE/NETWORK/FDL=VMS_FILE_DEFINITION.FDL- _$:KUDOS:REMOTE_FILE.TXT VMS_FILE.DAT |
この例で EXCHANGE/NETWORK コマンドは,ノード KUDOS の REMOTE_FILE.TXT ファイルを VMS_FILE.DAT ファイルに転送します。出力ファイル VMS_FILE.DAT のファイル属性は,ファイル定義言語 (FDL) ソース・ファイルの VMS_FILE_DEFINITION.FDL から取得されます。 /FDL 修飾子が指定され /TRANSFER_MODE 修飾子が省略されているので,転送モードには,省略時の設定であるブロック入出力を使用します。
FDL ファイルの作成についての詳細は,『OpenVMS Record Management Utilities Reference Manual』を参照してください。
#4 |
---|
$ EXCHANGE/NETWORK - _$ /TRANSFER_MODE=CONVERT=(CARRIAGE_CONTROL,COUNTED, - _$ RECORD_SEPARATOR=CRLF,FIXED_CONTROL) - _$ PRINT_FILE.TXT KUDOS::* |
この例で EXCHANGE/NETWORK コマンドは,現在の省略時の設定の装置およびディレクトリにある PRINT_FILE.TXT ファイルを, OpenVMS 以外のノード KUDOS の PRINT_FILE.TXT ファイルに転送します。 /TRANSFER_MODE 修飾子に CONVERT オプションが指定されているため,入力ファイルは逐次アクセスで読み込まれ,その後の CONVERT オプションで指定されたように変更されて,ブロック単位で出力ファイルに書き込まれます。出力ブロックとして,収容できるだけの数のレコードがパックされます。
CONVERT オプション CARRIAGE_CONTROL が指定されているので,キャリッジ制御情報は ASCII 文字へ変換されます。また,接頭辞制御と接尾辞制御の使用状況に応じて,キャリッジ制御情報をレコードの前に挿入するか,レコードの後に追加するかを指定します。
CONVERT オプション FIXED_CONTROL は,任意の固定長制御部情報を, ASCII 文字に変換してレコードの先頭に挿入するように指定します。
CONVERT オプション RECORD_SEPARATOR=CRLF は,指定した 2 文字のキャリッジ・リターンおよび行送りをレコードの終端に追加します。
CONVERT オプション COUNTED は,レコードの全体の長さ ( 前の CONVERT オプションのすべての実行結果が追加された後の長さ ) をカウントしたり,結果をレコードの先頭の 2 バイトに挿入したりすることを指定します。
コマンド・プロシージャ,またはサブルーチンの処理を終了し,呼び出したコマンド・レベル ( コマンド・プロシージャまたは会話型 DCL ) に制御を戻します。また,ユーザが Ctrl/Y を入力した後,イメージを正常終了させます。
EXIT [状態コード]
状態コード
すでに用意されているグローバル・シンボル $STATUS に与える数値を定義します。状態コードには整数,または整数値が求められる式を指定できます。この値は,外側のコマンド・レベルからテストできます。ロングワード整数値の下位 3 ビットは,予約されているグローバル・シンボル $SEVERITY の値を変更します。状態コードを指定する場合,DCL はコンディション・コードとして解釈します。値が偶数の場合には,警告メッセージ,エラー・メッセージおよび重大なエラー・メッセージが作成されます。値が奇数の場合には,正常終了メッセージまたは情報メッセージが作成されます。
状態コードを指定しない場合には,$STATUS の現在の値が保存されます。制御が外側のコマンド・レベルに渡される場合には, $STATUS には最後に実行されたコマンドまたはプログラムの状態が設定されます。
EXIT および STOP コマンドは,ともにプロシージャの実行を終了させる方法を提供します。 EXIT コマンドは,現在のコマンド・プロシージャの実行を終了させ,呼び出し側のコマンド・レベルに制御を戻します。 EXIT コマンドをコマンド・レベル 0 で非会話型プロセス ( バッチ・ジョブなど ) から入力すると,プロセスは終了します。STOP コマンドは,現在のコマンド・レベルにかかわらず,制御をコマンド・レベル 0 に戻します。 STOP コマンドをコマンド・プロシージャまたは非会話型プロセス ( バッチ・ジョブなど ) から実行すると,プロセスは終了します。
DCL コマンド,ユーザ・プログラム,またはコマンド・プロシージャが終了する場合と,コマンド・インタプリタは条件コード値をグローバル・シンボル $STATUS に保存します。EXIT コマンドで明示的に $STATUS の値を設定しないと,コマンド・インタプリタは $STATUS の現在の値を使用してエラー状態を決定します。
$STATUS に含まれる状態値の下位3ビットが,条件の重大度を表します。予約されているグローバル・シンボル $SEVERITY には,条件コードのこの部分が入ります。重大度の値の範囲は,次のように 0 〜 4 です。
値 重大度 0 警告 1 正常終了 2 エラー 3 情報 4 重大な(致命的な)エラー
正常終了および情報のコードは奇数の値,警告およびエラーのコードは偶数の値であることに注意してください。
コマンド・プロシージャが終了し,制御が別のレベルに戻る場合には,コマンド・インタプリタが $STATUS の現在の値をテストします。 $STATUS の値が偶数で,その高位ビットが 0 の場合は,コマンド・インタプリタは, (存在する場合は) その状態コードに対応するシステム・メッセージを表示します。メッセージが存在しない場合は,NOMSG メッセージが表示されます。高位ビットが1の場合,メッセージは表示されません。
DCL コマンドですでに表示された警告またはエラー状態の後でコマンド・プロシージャが終了すると,コマンド・インタプリタは,$STATUS の高位ビットを1にセットします。残りのビットは変更されません。これによって,エラーの原因になったコマンドも,コマンド・プロシージャも,エラー・メッセージを表示しなくなります。
Ctrl/Y でイメージを中断してから EXIT コマンドを使用すると,現在実行中のイメージが正常終了します。イメージに終了処理ルーチンが宣言されていた場合,終了処理ルーチンに制御が移ります。これに対し,STOP コマンドは,終了処理ルーチンを実行しません。このため,通常は STOP コマンドではなく EXIT コマンドを使用してください。
#1 |
---|
$ EXIT 1 |
$STATUS と $SERVERITY に 1 を設定して, 1 つ外側のプロシージャ・レベルに抜けます。
#2 |
---|
$ ON WARNING THEN EXIT $ FORTRAN 'P1' $ LINK 'P1' $ RUN 'P1' |
EXIT コマンドは,ON コマンドの条件成立時のコマンドとして使用されています。このステートメントは,警告またはエラーがプロシージャ内のコマンドから出されたときに,コマンド・プロシージャが必ず終了するようにします。
プロシージャは終了する前に,終了する原因となったコマンドまたはプログラムの状態コードを設定します。
#3 |
---|
$ START: $ IF (P1 .EQS. "TAPE") .OR. (P1 .EQS. "DISK") THEN GOTO 'P1' $ INQUIRE P1 "Enter device (TAPE or DISK)" $ GOTO START $ TAPE: ! Process tape files . . . $ EXIT $ DISK: ! Process disk files . . . $ EXIT |
この例では,コマンド・プロシージャ内で,異なったコマンド・パスを終了させる方法を示しています。このコマンド・プロシージャの実行時には,パラメータに TAPE または DISK を指定します。 IF コマンドは論理 OR を使用して,これらの文字列が入力されたかテストします。結果が真であれば GO TO コマンドは対応するラベルに分岐します。 P1 がTAPE でも DISK でもない場合は,正しいパラメータを入力するよう INQUIRE コマンドが要求します。
ラベル TAPE および DISK に続くコマンドは,パスが異なっています。ラベル DISK の前の EXIT コマンドは,プロシージャが明示的に DISK に分岐した時のみ,ラベル DISK 以降のコマンドが実行されることを保証しています。
プロシージャの終わりでは,自動適に EXIT コマンドが実行されるので,最後の EXIT コマンドは必要ありません。しかし,このように明示的に使用することをおすすめします。
#4 |
---|
$ IF P1. EQS. "" THEN - INQUIRE P1 "Enter filespec (null to exit)" $ IF P1 .EQS. "" THEN EXIT $ PRINT 'P1'/AFTER=20:00/COPIES=50/FORMS=6 |
このコマンド・プロシージャは,パラメータがそのプロシージャに渡されたかどうかをテストします。パラメータが渡されていない場合には,プロシージャは必要なパラメータを要求するプロンプトを表示します。そのあと,パラメータ P1 を再びテストします。データを含まない行を指定するために,キャリッジ・リターンを入力し,パラメータとして空文字列が与えられた場合には,プロシージャは終了します。それ以外の場合には,入力パラメータとして P1 の現在の値を使用して, PRINT コマンドを実行します。
#5 |
---|
$ IF P1 .EQS. "" THEN INQUIRE P1 "Code" $ CODE = %X'P1' $ EXIT CODE |
この例は,システム・ステータス・コードからシステム・メッセージを得る 1 つの方法を示しています。パラメータが 1つ必要で,入力しないと入力するよう要求します。基数演算子 %X を付けてシンボル CODE に代入しています。そして,EXIT コマンドを実行します。たとえば次のように使用します。
$ @E 1C %SYSTEM-F-EXQUOTA, exceeded quota
プロシージャ終了時には,$STATUS には %X1C が代入され,この値は EXQUOTA メッセージに評価されます。または,レキシカル関数 F$MESSAGE を使用しても同様のことができます。
#6 |
---|
$ RUN MYPROG [Ctrl/Y] $ EXIT |
この RUN コマンドは,MYPROG.EXE というイメージの実行を開始します。そのあと,CTRL/Y を使用して実行に割り込みがかけられています。 EXIT コマンドは MYPROG.EXE を終了する前に,イメージによって宣言された終了ハンドラ・ルーチンを呼び出します。
Alpha システムの場合は,ASCII ビットマップ分散フォーマット (BDF) をバイナリ・ポータブル・コンパイル・フォーマット (PCF) に変換します。また VAX システムの場合は,ASCII ビットマップ分散フォーマット (BDF) をバイナリ・サーバ・ナチュラル・フォーマット (SNF) に変換します。 DECwindows サーバは,PCF または SNF ファイルを使用してフォントを表示します。 BDF ファイルをバイナリ・フォームに変換する際に,フォント・コンパイラは,フォントとコンパイル・プロセスに関する統計情報を提供します。フォント・コンパイラについての詳細は,OpenVMS DECwindows のプログラミングに関するマニュアルまたはオンライン・ヘルプを参照してください。
FONT ファイル指定
コマンド・プロシージャ・レベルを変更せずに,制御をコマンド・プロシージャ内のラベルが付けられたサブルーチンに渡します。
GOSUB ラベル
ラベル
コマンド行の最初の項目として, 1 文字から 255 文字までの英数字のラベルを指定します。ラベルの中にブランクを含むことはできません。 GOSUB コマンドの実行後,制御は指定されたラベルのあとのコマンドに渡されます。ラベルは,現在のコマンド・プロシージャの中で, GOSUB ステートメントの前でもあとでもかまいません。コマンド・プロシージャ内でラベルを使用する場合には,最後にコロンを指定しなければなりません。ラベルが重複している場合,最も最近読まれたラベルへ飛びます。
ラベルで指定されたサブルーチンへ制御を移すには,コマンド・プロシージャで GOSUB コマンドを使用します。コマンド・ストリームをランダム・アクセス装置 ( つまりディスク装置 ) から読み取っていないと,GOSUB コマンドは動作しません。RETURN コマンドは,GOSUB サブルーチン・プロシージャを終了させ, GOSUB 文の呼び出しの次のコマンドへ制御を移します。 RETURN コマンドは,省略可能な状態値を受け付けます。
GOSUB コマンドでは,新しいプロシージャ・レベルは生成されません。したがって,これを "ローカルの" サブルーチン呼び出しと呼びます。現在のコマンド・プロシージャ・レベルで定義されたラベルとローカル・シンボルは,GOSUB コマンドで呼び出されたサブルーチンで使用できます。GOSUB コマンドは,プロシージャ・レベル当り,最高 16 レベルまでネストできます。
コマンド・インタプリタは,ラベルを検出すると,ラベル・テーブルにラベルを入れます。このテーブルは,ローカル・シンボル・テーブルで使用できる領域から割り当てられます。コマンド・インタプリタがすでにテーブルに存在しているラベルを検出すると,既存の定義が新しい定義で置き換えられます。したがって,重複ラベルを使用すると,制御は常に DCL が最後に読み取ったラベルに移ります。次の規則が適用されます。
- GOSUB コマンドの前と後に重複ラベルがある場合,制御はコマンドの前にあるラベルに移ります。
- すべての重複ラベルが GOSUB コマンドより前にある場合,制御は,最新のラベル,つまり GOSUB コマンドに最も近いラベルに移ります。
- すべての重複ラベルが GOSUB コマンドより後にある場合,制御は, GOSUB コマンドに最も近いラベルに移ります。
現在のコマンド・プロシージャにラベルが存在しない場合,プロシージャは続行できないため,強制終了します。
ラベルに使用できる領域のサイズには,制限があることに注意してください。コマンド・プロシージャが多くのシンボルを使用し,多くのラベルがある場合,コマンド・インタプリタのテーブル領域が不足し,エラー・メッセージが出ることがあります。
#1 |
---|
$! $! GOSUB.COM $! $ SHOW TIME $ GOSUB TEST1 $ WRITE SYS$OUTPUT "success completion" $ EXIT $! $! TEST1 GOSUB definition $! $ TEST1: $ WRITE SYS$OUTPUT "This is GOSUB level 1." $ GOSUB TEST2 $ RETURN %X1 $! $! TEST2 GOSUB definition $! $ TEST2: $ WRITE SYS$OUTPUT "This is GOSUB level 2." $ GOSUB TEST3 $ RETURN $! $! TEST3 GOSUB definition $! $ TEST3: $ WRITE SYS$OUTPUT "This is GOSUB level 3." $ RETURN |
このコマンド・プロシージャは,ラベルを付けられたサブルーチンへ制御を移すための GOSUB コマンドの使い方を示します。 GOSUB コマンドは TEST1にラベルを付けたサブルーチンに制御を移動します。プロシージャは,サブルーチン TEST1 でコマンドを実行し,サブルーチン TEST2 へ分岐します。その後,プロシージャは,サブルーチン TEST2 でコマンドを実行し,サブルーチン TEST3 へ分岐します。それぞれのサブルーチンは RETURN コマンドによって終了します。 TEST3 が実行された後, RETURN コマンドはそれぞれの呼出し GOSUB ステートメントに後続するコマンドラインへ制御を返します。この時点で,プロシージャはうまく実行されています。
前へ | 次へ | 目次 | 索引 |