オブジェクトのアクセス制御リスト(ACL)を作成または変更するために, アクセス制御リスト・エディタ(ACLエディタ)を起動します。 これには/ACL修飾子が必要です。
ACLエディタについの詳細は, 『OpenVMSシステム管理ユーティリティ・リファレンス・マニュアル』または 『OpenVMS Guide to System Security』またはオンライン・ヘルプを参照してください。
EDIT/ACL オブジェクト指定
EDT会話型テキスト・エディタを起動します。/EDT修飾子は必須です。
EDTコマンドの情報は,Ctrl/Zを押しながらEDTコマンド・プロンプトで HELPと入力することによって EDT内から使用できます。キーパッド・ヘルプは, コマンド・ヘルプの他に,<PF2>を押すことによっても使用できます。 EDTコマンドおよび修飾子の情報を含む,EDTコマンドの説明については, 『OpenVMSユーザーズ・マニュアル』を参照してください。
EDIT/EDT ファイル指定
EDTエディタがファイルを作成する場合,そのファイルに, 省略時のファイル・タイプは与えられません。 したがって,ファイル・タイプは,指定しない場合には空文字列になります。 ファイルは,Files-11構造のボリューム上のディスク・ファイルでなければなりません。
ファイル指定の中で,ワイルドカード文字は使用できません。
EDTの起動時の省略時の設定は,行モードです。 既存のファイルを編集する場合, EDTはファイルの第1行の行番号とテキストを表示します。 新しいファイルを作成する場合,EDTは次のメッセージを表示します。
Input file does not exist [EOB]
いずれの場合でも,次にEDTは行モードプロンプト (アスタリスク(*))を表示します。
EDTエディタについての詳細は,『OpenVMS EDT Reference Manual』を参照してください。
次のコマンド行は,MEMO.DATという名前のファイルを編集するためにEDTを起動し, EDTがXEDTINI.EDT という名前のスタート・アップ・コマンド・ファイルを使用することを指定しています。
$ EDIT/COMMAND=XEDTINI.EDT MEMO.DAT
"/COMMAND=コマンド・ファイル"修飾子を指定しない場合には, EDTはEDTSYSという論理名の定義を調べます。 EDTSYSが定義されていない場合には,システム全体で使用される SYS$LIBRARY:EDTSYS.EDTというスタート・アップ・コマンド・ファイルを使用します。 このファイルが存在しない場合には,EDTINIという論理名の定義を調べます。 EDTINIが定義されていない場合には,省略時のディレクトリから EDTINI.EDTという名前のファイルを探します。 これらのファイルがどれも存在しない場合には, 省略時の状態で編集セッションを開始します。
システム全体で使用されるスタート・アップ・コマンド・ファイルも, 省略時のディレクトリにあるEDTINI.EDTファイルも,EDTが実行しないようにするには, 次のように/NOCOMMAND修飾子を使用します。
$ EDIT/EDT/NOCOMMAND MEMO.DAT
一般に,指定したディレクトリから要求したファイル名を見つけることができない場合, EDTは入力ファイル指定と一致する名前の新しいファイルを作成します。 EDTコマンド行に/NOCREATE修飾子を指定し, 存在しないファイルのファイル指定を入力すると,EDTはエラー・メッセージを表示し, 以下のように,DCLコマンド・レベルに戻ります。
$ EDIT/EDT/NOCREATE NEWFILE.DAT Input file does not exist $
次のコマンド行は,MEMO.DATという名前のファイルを編集するためにEDTを起動し, ジャーナル・ファイルとしてSAVE.JOUという名前を指定しています。
$ EDIT/EDT/JOURNAL=SAVE MEMO.DAT
他のディレクトリのファイルを編集している時に, ジャーナル・ファイルをそのディレクトリに作成する場合には,/JOURNAL修飾子に, そのディレクトリ名を含むファイル指定をしなければなりません。 そうしない場合,EDTはジャーナル・ファイルを省略時のディレクトリに作成します。
ジャーナル・ファイルが作成されるディレクトリは, 書き込みアクセスを禁止されていてはなりません。
EDTが編集セッションの記録を保存しないようにしたい場合には,次に示すように, EDTコマンド行に/NOJOURNAL修飾子を指定します。
$ EDIT/EDT/NOJOURNAL MEMO.DAT
ジャーナル・ファイルを作成したあと, ジャーナル・ファイルに含まれているコマンドを処理するように, EDT/RECOVERコマンドを使用します。 ファイル指定の中で,ワイルドカード文字は使用できません。
次のコマンド行は,MEMO.DATという名前のファイルを編集するためにEDTを起動し, この編集セッションで作成される出力ファイルに,OUTMEM.DATという名前を与えます。
$ EDIT/EDT/OUTPUT=OUTMEM.DAT MEMO.DAT
次の例に示すように,他のディレクトリにファイルを作成する場合には, 出力ファイル指定の一部としてディレクトリ情報を含むことができます。
$ EDIT/EDT/OUTPUT=[BARRETT.MAIL]MEMO.DAT MEMO.DAT
/NOOUTPUT修飾子は,出力ファイルが作成されないようにします。 しかし,ジャーナル・ファイルの作成には影響を与えません。 出力ファイルを作成しない場合には,次のように/NOOUTPUTを使用します。
$ EDIT/EDT/NOOUTPUT MEMO.DAT
システムが割り込みをかけても,ジャーナル・ファイルはまだ保存されているため, 編集セッションをもう一度実行する必要はありません。 /NOOUTPUTが指定されている場合でも,出力ファイルを作成する場合には, WRITEというライン・モード・コマンドを使って, セッションを終了する前にテキストを外部ファイルに書き込めます。
ファイル指定の中で,ワイルドカード文字は使用できません。
次のコマンド行は, CALENDAR.DATという名前のファイルを編集するためにEDTを起動しますが, ジャーナル・ファイルも出力ファイルも作成しません。
$ EDIT/EDT/READ_ONLY CALENDAR.DAT
ファイル内を検索するだけで変更しない場合には,/READ_ONLY修飾子を使用します。 ファイルを変更する場合には, ライン・モード・コマンドであるWRITEコマンドを使って変更結果を保存します。 ただし,ジャーナル・ファイルは作成されません。
/RECOVER修飾子を指定すると,EDTはジャーナル・ファイルを読み取り, そのファイルに含まれるコマンドを処理します。この場合の構文は,次のとおりです。
$ EDIT/EDT/RECOVER MEMO.DAT
ジャーナル・ファイルのファイル・タイプがJOUでない場合や, ファイル名が入力ファイルの名前と同じでない場合には,次の例に示すように, /JOURNAL修飾子と/RECOVER修飾子の両方を指定しなければなりません。
$ EDIT/EDT/RECOVER/JOURNAL=SAVE.XXX MEMO.DAT
/NORECOVER修飾子はEDTの省略時の設定であるため, コマンド行にこの修飾子を指定する必要はありません。
$ EDIT/EDT/OUTPUT=NEWFILE.TXT OLDFILE.TXT 1 This is the first line of the file OLDFILE.TXT. *このEDITコマンドは,OLDFILE.TXTというファイルを編集するために, EDTエディタを起動します。この時EDTは,EDTSYSという論理名の割り当てを調べます。 EDTSYSが定義されていない場合には,EDTは, システムのスタート・アップ・コマンド・ファイルである SYS$LIBRARY:EDTSYS.EDTを使用します。 このファイルが存在しない場合には,EDTINIという論理名の割り当てを調べます。 EDTINIが定義されていない場合には,省略時のディレクトリから, EDTINI.EDTという名前のファイルを見つけます。 これらのファイルがどれも存在しない場合には, 省略時の状態で編集セッションを開始します。 セッションが終了したとき,編集されたファイルの名前は,NEWFILE.TXTになります。
$ EDIT/EDT/RECOVER OLDFILE.TXTこのEDITコマンドは, 異常終了した前回の編集セッション回復するためにEDTエディタを起動します。 EDTは,OLDFILE.TXTというファイルをオープンし, OLDFILE.JOUというジャーナル・ファイルを処理します。 ジャーナル・ファイルが処理された後で,会話型編集を再開できます。
File Definition Language (FDL)ファイルの作成と変更のために, Edit/FDLユーティリティ(EDIT/FDL)を起動します。/FDL修飾子は必須です。
EDIT/FDLコマンドとその修飾子に関する情報など, Edit/FDLユーティリティについての詳細は, 『OpenVMS Record Management Utilities Reference Manual』またはオンライン・ヘルプを参照してください。
EDIT/FDL ファイル指定
SUMSLPバッチ型エディタを起動して, 1つの入力ファイルを複数のファイルのエディタ・コマンドで更新します。
SUMSLPユーティリティについての詳細は, 『OpenVMS SUMSLP Utility Manual』またはオンライン・ヘルプを参照してください。
EDIT/SUM 入力ファイル
TECO会話型テキスト・エディタを起動します。
EDIT/TECO [ファイル指定] EDIT/TECO/EXECUTE=コマンド・ファイル [引数]
ファイル指定なしに/MEMORY修飾子を指定する(省略時の設定)と, TECOは論理名TEC$MEMORYで示されるファイルを編集します。 TEC$MEMORYが等価文字列を持たない場合, あるいは/NOMEMORY修飾子が指定されている場合には, TECOはコマンド・モードに入り,既存ファイルの編集を行いません。
/MEMORY修飾子とファイル指定の両方を指定すると,そのファイル指定は, 論理名TEC$MEMORYと等価になります。
スタートアップ・コマンド・ファイルXTECOINI.TECを使って, ファイルMEMO.DATを編集するには,次のコマンドを入力します。
$ EDIT/TECO/COMMAND=XTECOINI.TEC MEMO.DAT
/COMMAND修飾子を指定しなかった場合, あるいはコマンド・ファイルを指定せずに/COMMAND修飾子を指定した場合には, TECOはTEC$INIT論理名の定義を検索します。 TEC$INITが定義されていなければ,スタートアップ・コマンドは実行されません。
論理名TEC$INITには,TECOコマンド文字列か, あるいはドル記号($)に続くファイル指定を定義できます。 論理名TEC$INITがTECOコマンド文字列であればそのまま実行され, ファイル指定であれば,そのファイルの内容がTECOコマンドとして実行されます。 詳細は「PDP-11 TECO Editor Reference Manual」を参照してください。
スタートアップ・コマンド・ファイルを実行しないようにするには, 次の例に示すように,/NOCOMMAND修飾子を使用します。
$ EDIT/TECO/NOCOMMAND MEMO.DAT
スタートアップ・コマンド・ファイルのファイル指定には, ワイルドカード文字は使用できません。
/EXECUTE修飾子は,/CREATEおよび/MEMORY修飾子と同時に指定することはできません。
次のコマンド行は,TECOを起動してファイルMEMO.DATを編集し, OUTMEMO.DATに書き出します。
$ EDIT/TECO/OUTPUT=OUTMEM.DAT MEMO.DAT
出力ファイル指定には,ディレクトリ指定も含めることができ, 次の例に示すように出力を他のディレクトリに送ることができます。
$ EDIT/TECO/OUTPUT=[BARRRET.MAIL]MEMO.DAT MEMO.DAT
出力ファイルのファイル指定には,ワイルドカード文字は使用できません。
$ EDIT/TECO/OUTPUT=NEWFILE.TXT OLDFILE.TXTこのEDITコマンドは,TECOエディタを起動して,ファイルOLDFILE.TXTを編集します。 TECOはTEC$INIT論理名定義を検索します。TEC$INITが定義されていないと, TECOは,コマンド・ファイルを使用せずに編集セッションを開始します。 セッションの終了時に,編集されたファイルにNEWFILE.TXTという名前が付けられます。
$ EDIT/TECO/EXECUTE=FIND_DUPS "TEMP, ARGS, BLANK"この例では,/EXECUTE修飾子により, ファイルFIND_DUPS.TECに記述されているTECOマクロが実行され, 引数文字列"TEMP, ARGS, BLANK"が,テキスト・バッファに置かれます。
DECテキスト処理ユーティリティ(DEC Text Processing Utility [DECTPU]) を起動します。省略時の設定では, EVE(拡張可能多機能エディタ[Extensible Versatile Editor])エディタを起動します。 DECTPUは,テキスト・エディタおよびその外のアプリケーション作成のための, 構造化プログラミング言語およびその他の構成要素を提供します。
EVEを使用した編集についての詳細は,『OpenVMSユーザーズ・マニュアル』 またはオンライン・ヘルプを参照してください。
EDIT/TPU [入力ファイル]
指定したキュー・マネージャが管理するすべての自動起動キューの, 自動起動機能を1ノード上で許可します。 省略時の設定では,このコマンドは/QUEUES修飾子を使用します。
OPER (オペレータ)特権が必要です。
自動起動キューについての詳細は,『OpenVMSシステム管理者マニュアル』 のバッチ・キューおよびプリント・キューに関する章を参照してください。
ENABLE AUTOSTART[/QUEUES]
省略時の設定では,このコマンドは省略時のキュー・マネージャ SYS$QUEUE_MANAGER が管理する自動起動キューに対して有効です。 異なるキュー・マネージャが管理する自動起動キューの自動起動を許可するには, /NAME_OF_MANAGER修飾子を使用します。
INITIALIZE/QUEUEコマンドに/START修飾子を指定して, またはSTART/QUEUEコマンドで自動起動キューを起動し, STOP/QUEUE/NEXTまたはSTOP/QUEUE/RESETコマンドで停止していない場合, 自動起動キューは処理中です。
ノードをブートする時に, ENABLE AUTOSTARTコマンドを入力するまで自動起動は禁止されています。 たいていの場合は,利用者システム固有のスタートアップ・コマンド・プロシージャ, またはキューのスタートアップ・コマンド・プロシージャにこのコマンドを含めて, ノードをブートするたびに該当ノードの自動起動キューを起動させます。
/NAME_OF_MANAGER修飾子を省略すると, 省略時のキュー・マネージャ名 SYS$QUEUE_MANAGER が使用されます。
複数のキュー・マネージャについての詳細は,『OpenVMSシステム管理者マニュアル』 のキュー・マネージャに関する章を参照してください。
$ INITIALIZE/QUEUE/BATCH/START- _$ /AUTOSTART_ON=SATURN:: BATCH_1 $ ENABLE AUTOSTART/QUEUES . . . $ DISABLE AUTOSTART/QUEUESこの例ではINITIALIZE/QUEUEコマンドは, ノードSATURNで実行できる自動起動キューBATCH_1を作成します。 /START修飾子は,キューの自動起動を有効にします。 (ノードSATURN上で実行される) ENABLE/AUTOSTART/QUEUESコマンドは該当ノードの自動起動を許可します。 これによりキュー (および該当ノード上で有効な他の自動起動キュー)はジョブの実行を開始します。
(ノードSATURN上で実行される) DISABLE AUTOSTARTコマンドは該当ノード上の自動起動キューを停止し, 他のキューが該当ノードにフェールオーバするのを抑止します。
/NAME_OF_MANAGER修飾子が指定されていないので, これらのコマンドは省略時のキュー・マネージャSYS$QUEUE_MANAGER が管理するキューにのみ有効です。
BATCH_1は1つのノードでのみ実行するよう設定されているので, キューは他のノードにフェールオーバできず停止します。 ただしキューは自動起動が有効であり, ノードSATURNに対してENABLE AUTOSTARTコマンドが入力されると, このキューはスタートします。STOP/QUEUE/NEXTまたは STOP/QUEUE/RESETコマンドでキューの自動起動を無効にしない限り, BATCH_1をリスタートさせるためにSTART/QUEUEコマンドを実行する必要はありません。
$ INITIALIZE/QUEUE/BATCH/START- _$ /AUTOSTART_ON=(NEPTUN::,SATURN::) BATCH_1 $ ENABLE AUTOSTART/QUEUES/ON_NODE=NEPTUN $ ENABLE AUTOSTART/QUEUES/ON_NODE=SATURN . . . $ STOP/QUEUES/ON_NODE=NEPTUNこの例のINITIALIZE/QUEUEコマンドは,自動起動キューBATCH_1を作成します。 /START修飾子は,キューの自動起動を有効にします。
最初のENABLE AUTOSTART/QUEUESコマンドにより, ノードNEPTUN上でキューの実行が開始されます。 2番目のENABLE AUTOSTART/QUEUESコマンドはノードSATURNの自動起動を許可し, SATURN上で停止しているすべての有効な自動起動キュー, およびSATURNにフェールオーバしたすべての自動起動キューをスタートさせます。
この後,ノードNEPTUNをOpenVMS Clusterシステムから削除する場合を考えてみます。 STOP/QUEUES/ON_NODEコマンドはノードNEPTUN上のすべてのキューを停止し, 自動起動キューBATCH_1はノードSATURNにフェールオーバします。 このキューは自動起動機能が有効であり, ノードSATURNでは自動起動が許可されているので, BATCH_1はSATURN上で自動的にスタートします。
/NAME_OF_MANAGER修飾子が指定されていないので, このコマンドは省略時のキュー・マネージャSYS$QUEUE_MANAGER が管理するキューに対してのみ有効です。
コマンド・プロシージャ内のサブルーチンの終了を示します。
ENDSUBROUTINEコマンドについての詳細は, CALL コマンドの説明またはオンライン・ヘルプを参照してください。
ENDSUBROUTINE
コマンドまたはプログラムが, 会話型ターミナル以外の入力装置からデータを読み込む場合に, データ・ストリームの終わりを示します。
$ EOD
EODコマンドの前には必ず,ドル記号を付けてください。 ドル記号は,入力レコードの最初の文字位置(カラム1)になければなりません。
$ CREATE WEATHER.COM $ DECK $ FORTRAN WEATHER $ LINK WEATHER $ RUN WEATHER $ EOD $ @WEATHERこのコマンド・プロシージャは, WEATHER.COMというコマンド・プロシージャを作成します。 DECKコマンドとEODコマンドによって囲まれている行が, WEATHER.COMというファイルに書き込まれます。 そのあと,コマンド・プロシージャはWEATHER.COMを実行します。
プログラムMUPROGには2つの入力ファイルが必要です。 これらのファイルは論理装置SYS$INPUTから読み込まれます。 EDOコマンドは1つ目のデータ・ファイルの終了と, 2つ目のデータ・ファイルの開始を示します。 ドル記号で始まる次の行(この例ではPRINTコマンド)は, 2つ目のデータ・ファイルの終了を示します。
カード・リーダからキューに登録される,バッチ・ジョブの終わりを示します。
$ EOJ
EOJカードは,EOFカードと等価です。
JOBおよびPASSWORDコマンドは, カード・リーダ経由で登録されたバッチ・ジョブの開始を示します。 EOJコマンドは,そのジョブの終わりを示します。
仮想メモリの内容を表示します。
内容を確認する仮想メモリの記憶位置へのユーザ・モード読み取り(R)アクセス権が必要です。
EXAMINE 記憶位置[:記憶位置]
記憶位置には算術演算子,論理演算子, または事前に割り当てられたシンボルを含む任意の有効な計算式を指定できます。 基数修飾子を使用して,アドレスを解釈するための基数を決めます。 省略時の設定は16進数です。 シンボル名は常に,それらが定義されたときの基数で解釈されます。 記憶位置の前には,基数演算子%X,%D,または%Oを付けることができます。 16進数は,数字(または%X)で開始する必要があります。
DEPOSITおよびEXAMINEコマンドは,現在のメモリ記憶位置のポインタを保持します。 EXAMINEコマンドは, EXAMINEコマンドを指定したときに表示した最後の記憶位置にこのポインタを設定します。 EXAMINEまたはDEPOSITコマンドにピリオド(.)を付けて実行すれば, この記憶位置を参照できます。
address: contents
指定したアドレスにユーザ・モードでアクセスできない場合は, 内容のフィールドに4つのアスタリスク(*)が表示されます。
基数修飾子: DEPOSITまたはEXAMINEコマンドの基数の省略時の設定によって, コマンドによる数値リテラルの解釈方法が決まります。 省略時の設定の基数は16進数値なので,コマンド行のすべての数値リテラルは, 16進数値であると仮定されます。EXAMINEコマンドに基数修飾子を指定した場合は, 別の修飾子によって上書きされるまで, その基数が以降のEXAMINEコマンドおよびDEPOSITコマンドの省略時の設定になります。 次の例を参照してください。
$ EXAMINE/DECIMAL 900 00000384: 0554389621
EXAMINEコマンドは,記憶位置900を10進数として解釈し, その記憶位置の内容を10進数で表示します。 以降のすべてのDEPOSITコマンドおよびEXAMINEコマンドでは, アドレスやデータに入力される数を10進数であると仮定します。 EXAMINEコマンドは常に,アドレス記憶位置を16進数で表示する点に注意してください。
= (代入文)コマンドによって定義されたシンボルは常に, それらが定義されたときの基数で解釈されます。
表示する記憶位置または格納するデータとして入力する16進数値は, 数字(0〜9)で始まらなければなりません。 数字(0〜9)以外で始めるとコマンド・インタプリタは, シンボル名を入力したか,またはシンボルの置換を行うものと仮定します。
現在の省略時の設定を変更するには, EXAMINEコマンドを入力する時に基数演算子%X,%D,または%Oを使用します。 次の例を参照してください。
$ EXAMINE/DECIMAL %X900 00000900: 321446536
このコマンドは,16進数値の900として指定された記憶位置にあるデータを 10進数形式で表示することを要求しています。
長さ修飾子: EXAMINEコマンドの省略時の設定の長さの単位はロングワードです。 EXAMINEコマンドは,各ロングワードの間にブランクを入れて, 一度に1ロングワードずつデータを表示します。 EXAMINEコマンドで長さ修飾子を使用した場合は, 別の修飾子によって上書きされるまで, その長さが以降のEXAMINEコマンドおよびDEPOSITコマンドでの, メモリ記憶位置の省略時の設定の長さになります。
修飾子の配置に関する制約: EXAMINEコマンドは,算術的に式を解釈します。 そのため,コマンド名の直後に指定された場合のみ,修飾子は正しく解釈されます。
対応するASCIIコードがない2進値は,ピリオド(.)として表示されます。
/ASCII修飾子を指定した場合,またはASCIIモードが省略時の設定である場合は, コマンド行で指定される数値リテラルの省略時の設定の基数として, 16進数が使用されます。
$ RUN MYPROG [Ctrl/Y] $ EXAMINE 2678 0002678: 1F4C5026 $ CONTINUEこの例でRUNコマンドは,イメージMYPROG.EXEの実行を開始します。 MYPROGの実行中にCtrl/Yを押して実行を中断します。 EXAMINEコマンドによって,仮想メモリ記憶位置2678(16進値)の内容が表示されます。
$ BASE = %X1C00 $ READBUF = BASE + %X50 $ ENDBUF = BASE + %XA0 $ RUN TEST [Ctrl/Y] $ EXAMINE/ASCII READBUF:ENDBUF 00001C50: BEGINNING OF FILE MAPPED TO GLOBAL SECTION . . .この例では,プログラムTEST.EXEを実行する前に, プログラムの基底アドレスならびにラベルREADBUFと ENDBUFのシンボリック名が定義されます。 これらのシンボリック名は,すべて基数演算子%Xを使用して16進形式で表されます。 READBUFおよびENDBUFは,プログラムの基底アドレスからのオフセットを定義しています。
プログラムの実行中にCtrl/Yを押してプログラムを中断します。 EXAMINEコマンドによって, 指定されたメモリ記憶位置にあるすべてのデータが ASCII形式で表示されます。
Exchangeユーティリティ(EXCHANGE)を起動します。 このユーティリティは,オペレーティング・システムが通常認識できない形式で書き込まれた, 大容量記憶ボリュームを操作します。
EXCHANGEを使用すると,次の操作を行うことができます。
RT-11ディスクのようなブロック・アドレス指定可能な装置の場合, EXCHANGEは,ファイル名の変更やファイルの削除などの操作も実行できます。 EXCHANGEは,フォーリン・ボリュームのイメージであるFiles-11ファイルも操作できます。 これらのファイルは仮想装置と呼ばれます。
EXCHANGEについての詳細は,『OpenVMS Exchange Utility Manual』 またはオンライン・ヘルプを参照してください。
EXCHANGE [サブコマンド] [ファイル指定] [ファイル指定]
このコマンドを使用すると,OpenVMSオペレーティング・システムと, OpenVMSのファイル編成をサポートしないオペレーティング・システムとの間でファイルを転送できるようになります。 転送は,OpenVMSシステムとOpenVMS以外のオペレーティング・システムのノードを接続するDECnetネットワーク通信リンク上で行われます。
DECnetサービスを使用すると,EXCHANGE/NETWORKコマンドで次の操作を行うことができます。
EXCHANGE/NETWORK 入力ファイル指定[,...] 出力ファイル指定
出力ファイル指定には,フィールドを最低1つ指定しなければなりません。 装置またはディレクトリを省略すると,現在の省略時の設定の装置およびディレクトリが使用されます。 その他に不明なフィールド(ファイル名,ファイル・タイプ,およびバージョン番号)がある場合は, EXCHANGE/NETWORKコマンドによって, 入力ファイル指定の対応するフィールドに置き換えられます。
EXCHANGE/NETWORKコマンドは,指定した各入力ファイルにつき新しい出力ファイルを1つ作成します。
ファイル名,ファイル・タイプ,またはバージョン番号の代わりに, ワイルドカード文字のアスタリスク(*)を使用できます。 EXCHANGE/NETWORKコマンドは, 関連する入力ファイルの対応するフィールドを使用して, 出力ファイルをに名前を付けます。 また,出力ファイル指定でワイルドカード文字のアスタリスク(*)を使用すると, EXCHANGE/NETWORKで2つ以上の出力ファイルを作成するよう指定することができます。 次の例を参照してください。
$ EXCHANGE/NETWORK A.A,B.B MYPC::*.C
このEXCHANGE/NETWORKコマンドは,OpenVMS以外のターゲット・ノード MYPCにファイルA.CおよびB.Cを作成します。
ワイルドカード文字のアスタリスク(*)とパーセント記号(%), およびバージョン番号についての詳細は,次の「説明」を参照してください。
OpenVMSレコード管理サービス(RMS)を使用すると, オペレーティング・システムはOpenVMS RMSファイルのレコードにアクセスできます。 どちらもOpenVMSノードである2つのノード間でOpenVMS RMSファイルを転送するには, 他のDCLコマンド(COPY,APPEND,CONVERTなど)から適切なものを 1つ使用します。 これらのコマンドは,RMSファイル編成を認識して, ファイルの転送時にRMSレコード構造を保持するように設計されています。
OpenVMSノードとOpenVMS以外のノード間でファイルを転送するには, EXCHANGE/NETWORKコマンドを使用します。 このコマンドを使用すると,ファイル編成の違いが原因で転送ができなかったり, 予期しない結果になったりするのを防ぐことができます。 COPYコマンドを使用した場合でも, コピーされたファイルの内容や属性は確実に保持されますが, EXCHANGE/NETWORKコマンドにはそれ以上の利点があります。 EXCHANGE/NETWORKコマンドを使用すると,ファイル転送時にレコード属性を明示的に制御でき, 数種類のオペレーティング・システムでファイルを使用可能にすることができます。
EXCHANGE/NETWORKコマンドは,同じDECnetネットワークに接続された OpenVMSノードとOpenVMS以外のノード間でファイルを転送します。 OpenVMS以外のシステムがOpenVMSファイル編成をサポートしていない場合でも, EXCHANGE/NETWORKコマンドを使用すれば, 転送時にファイルおよびレコードの各属性を変更したり廃棄したりできます。 ただし,ターゲット・システムが OpenVMSノードである場合は,この節で後述するように, ファイル定義言語(FDL)ファイルを使用すれば,出力ファイルのファイル属性およびレコード属性を変更することができます。 EXCHANGE/NETWORKコマンドには,多様な転送を正しく処理できるように, いくつかの省略時の設定が用意されています。 ただし,転送の種類によっては, 両方のノードのファイル形式またはレコード形式の必要条件を知っている必要もあります。
OpenVMS環境のすべてのRMSファイルには,ファイル属性およびレコード属 性を示す,ファイル属性およびレコード属性と呼ばれる情報が含まれています。 ファイル属性には,ファイル編成,ファイルの保護,ファイル割り当て情報などの項目があります。 レコード属性には,レコード形式, レコード・サイズ,索引編成ファイルのキー定義,キャリッジ制御情報などの項目があります。 これらの属性が,OpenVMS RMSファシリティが用いるデータ形式やアクセス方法を定義します。
OpenVMSファイル編成をサポートしないOpenVMS以外のオペレーティング・システムには, ファイルのファイル属性およびレコード属性を保存する機能がありません。 ファイル属性およびレコード属性を保存または処理できないOpenVMS以外のシステムにOpenVMSファイルを転送すると, これらの情報の大部分が廃棄されてしまいます。 これらの属性をファイルから削除すると, OpenVMSシステムで再使用しなければならない場合に,そのファイルは元どおりの使い方はできません。
OpenVMS以外のシステムからOpenVMSシステムにファイルを転送すると,ファイルは通常, 省略時の設定のファイル属性およびレコード属性を持つと仮定されます。 ただし,ファイル定義言語(FDL)ファイルを使用して,ファイルの属性を指定することもできます。 また,CDAドキュメントを転送する場合には,EXCHANGE/NETWORKコマンドの後に次のコマンドを入力します。
$ SET FILE/SEMANTICS=[ddif,dtif] ドキュメント名.doc
/FDL修飾子でFDLファイルを指定する場合には,FDLファイルが出力ファイルの属性を決めます。 OpenVMS以外のシステムからOpenVMSシステムにファイルを転送し, 互換性のあるファイル属性およびレコード属性を設定する時,この機能は便利です。 ただし,FDLファイルを使用する場合,必要な属性を決めるのはユーザです。
FDLファイルについての詳細は, 『OpenVMS Record Management Utilities Reference Manual』を参照してください。
EXCHANGE/NETWORKコマンドは,OpenVMSファイル編成をサポートしない OpenVMS以外のシステムへの転送を行う場合に, OpenVMSファイルに対応するファイル属性およびレコード属性を廃棄します。 転送時のファイル属性およびレコード属性の消失によって, ほとんどのアプリケーションで使用できない出力ファイルが作成される可能性があります。
EXCHANGE/NETWORKコマンドには,AUTOMATIC,BLOCK,RECORD,およびCONVERTの, 4つの転送モード・オプションがあります。 ほとんどのファイル転送には,AUTOMATICが使用できます。 AUTOMATIC転送モード・オプションを使用すると, ブロック入出力またはレコード入出力のいずれかを使用して,ファイルを転送できます。 入出力の選択は,入力ファイルのファイル編成とオペレーティング・システムによります。
BLOCK転送モード・オプションを選択すると,EXCHANGE/NETWORKコマンドは, ブロック入出力アクセス用に入力ファイルと出力ファイルの両方をオープンします。 これによって,入力ファイルは,ブロック単位で出力ファイルに転送されます。 実行可能なイメージを転送する場合には,この転送モードを使用します。 また,このモードは,ファイル内容を正確に保持しなければならない場合に使用すると便利です。 これは,別のシステムで一時的にファイルを保存する場合や, 共同で動作するアプリケーションがシステムに存在する場合に必要となります。
RECORD転送モード・オプションを選択すると,EXCHANGE/NETWORKコマンドは, レコード入出力アクセス用に入力ファイルと出力ファイルの両方をオープンします。 これによって,入力ファイルは,逐次アクセスで出力ファイルに転送されます。 この転送モードは主に,テキスト・ファイルを転送する場合に使用します。
CONVERT転送モード・オプションを選択すると,EXCHANGE/NETWORKコマンドは, RECORDアクセス用に入力ファイルをオープンし,BLOCKアクセス用に出力ファイルをオープンします。 これによって,レコードは入力ファイルから読み込まれ, ブロックにパックされてから,出力ファイルに書き込まれます。 この転送モードは主に,暗黙のキャリッジ制御なしでファイルを転送する場合に使用します。 たとえば,DIGITAL Standard Runoff (DSR)で作成したファイルを DECnet DOSシステムに転送するには, CONVERT転送モード・オプションを使用しなければなりません。 結果の出力ファイルをOpenVMSノードに返送するには, AUTOMATIC転送モード・オプションを使用します。
ファイル指定には,ワイルドカード文字のアスタリスク(*)とパーセント記号(%)を使用できます。 また,その動作内容は,OpenVMSノードに対して他のOpenVMSシステム・コマンドを使用した場合と同じです。
2つ以上の入力ファイルが指定されて, 出力ファイル指定にワイルドカード文字のアスタリスク(*)やパーセント記号(%)が指定されていない場合には, 最初の入力ファイルが出力ファイルにコピーされます。 後続の各入力ファイルは転送された後, 同じファイル名でバージョン番号が大きい出力ファイル名になります。 複数の入力ファイルが,1つの出力ファイルに連結されるわけではありません。 また,バージョン番号をサポートしないフォーリン・システムにファイルを転送する場合には, 最後に指定した入力ファイルに対応する出力ファイルが 1つだけ作成されます。
複数の出力ファイルを作成するには,複数の入力ファイルを指定します。 次のいずれかの方法を使用してください。
複数の出力ファイルを作成する場合,EXCHANGE/NETWORKコマンドは, 対応する入力ファイルのフィールドを使用して,出力ファイルを指定します。
複数の入力ファイルと出力ファイルを指定する場合には,/LOG修飾子を使用すると, 意図したとおりにファイルがコピーされていることを確かめることができます。
ターゲット・ノードのファイル形式でバージョン番号が使用できる場合には, 次のガイドラインを参照してください。
入力ファイル,および出力ファイルのバージョン番号が指定されていない場合,EXCHANGE/NETWORKコマンドは, 出力ファイルに次のいずれかのバージョン番号を割り当てます(省略時の設定)。
出力ファイルのバージョン番号をワイルドカード文字のアスタリスク(*)で指定した場合, EXCHANGE/NETWORKコマンドは, 対応する入力ファイルのバージョン番号を,出力ファイルのバージョン番号として使用します。
出力ファイルのバージョン番号を明示的に指定した場合,EXCHANGE/NETWORKコマンドは通常, 出力ファイル指定にそのバージョン番号を使用します。 ただし,同じかまたはそれ以上のバージョンの出力ファイルが存在している場合には, 警告メッセージが発行されずにファイルがコピされて, バージョン番号は,現在ある最高のバージョン番号より1つ大きい値に設定されます。
出力ファイル名の一部が明示的に指定されている場合,EXCHANGE/NETWORKコマンドは, 出力ファイルを新しいファイルとして処理します。 出力ノードがOpenVMSシステムである場合, 新しいファイルの作成日は,現在の日時に設定されます。 ただし,出力ファイル指定が, ワイルドカード文字のアスタリスク(*)とパーセント記号(%) のみで構成されている場合, 出力ファイルは新しいファイルとして処理されないため, 出力ファイルの作成日は入力ファイルの作成日と同じになります。
出力ファイルの更新日は常に,現在の日時に設定されます。 バックアップの日付はゼロに設定されます。 出力ファイルには,新しい満了日が割り当てられます。 保持が許可されている場合は,満了日はファイル・システムによって設定されます。 保持が禁止されている場合,満了日はゼロに設定されます。
ターゲット・ノードがOpenVMSノードである場合には, 出力ファイルの保護およびアクセス制御リスト(ACL)は, 次のパラメータによって以下の順序で決まります。
ACLの概要については,『OpenVMS Guide to System Security』を参照してください。
OpenVMSシステムでは,出力ファイルの所有者は通常,出力ファイルの作成者と同じです。 ただし,拡張された特権を持つユーザが出力ファイルを作成する場合,その所有者は親ディレクトリの所有者か, または,出力ファイルの前バージョンが存在する場合にはその所有者になります。
拡張特権には,次のものがあります。
時刻の指定についての詳細は,『OpenVMSユーザーズ・マニュアル』 またはオンライン・ヘルプの DCL_Tips トピック (Date_Time サブトピック) を参照してください。
『OpenVMS Guide to System Security』の説明に従って,標準形式を使用してUICを指定します。
YES | NO | QUIT |
TRUE | FALSE | Ctrl/Z |
1 | 0 | ALL |
<Return> |
応答には,大文字と小文字の任意の組み合わせが使用できます。 一意に認識できれば単語での応答を1つまたは複数の文字に短縮しても構いません。 たとえば,TRUEの場合はT,TR,またはTRUに短縮できます。 肯定の応答は,YES,TRUE,または1です。 否定の応答は,NO,FALSE,0を押して,Returnキーを押します。 QUITを入力するか,またはCtrl/Zを押すと, その時点でコマンドの処理を終了することを意味します。 ALLと応答すると,コマンドは処理を続けますが,プロンプトは再表示されません。 上記のリストにない応答を入力すると, DCLはエラー・メッセージを発行してプロンプトを再表示します。
/FDL修飾子を使用すると,転送モードを暗黙のうちにブロック単位にします。 ただし,/TRANSFER_MODE修飾子で指定した転送モードが優先します。
/LOG修飾子を使用すると, EXCHANGE/NETWORKコマンドは各コピー操作について次の項目を表示します。
時刻の指定についての詳細は,『OpenVMSユーザーズ・マニュアル』 またはオンライン・ヘルプの DCL_Tips トピック (Date_Time サブトピック) を参照してください。
この修飾子のキーワードはCONDENSEDおよびEXPANDEDです。 意味は次の表のとおりです。
キーワード | 説明 |
---|---|
CONDENSED (省略時の設定) |
ファイル名を255文字長の文字列に適合するように表示します。 このファイル名の場合,ファイル指定にDIDあるいはFID短縮形を含むことが可能です。 |
EXPANDED | ファイル名をディスクに格納されているとおりに表示します。 このファイル名の場合,ファイル指定にDIDあるいはFID短縮形は含みません。 |
キーワードCONDENSEDとEXPANDEDを同時に指定することはできません。 このコマンドは,確認が要求された場合に,出力メッセージに表示されるファイル名の書式を指定します。
EXPANDEDキーワードが指定されていない場合,ファイル・エラーはCONDENSEDファイル指定で表示されます。
詳細は『OpenVMS Extended File Specificationsの手引き』を参照してください。
オプション | 機能 |
---|---|
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つのいずれかを指定できます。
|
$ EXCHANGE/NETWORK VMS_FILE.DAT KUDOS::FOREIGN_SYS.DATこの例でEXCHANGE/NETWORKコマンドは, 現在の省略時の設定の装置およびディレクトリにあるVMS_FILE.DATファイルを, OpenVMS以外のノードKUDOS上のFOREIGN_SYS.DATファイルに転送します。 /TRANSFER_MODE修飾子が明示的に指定されなかったため,EXCHANGE/NETWORKコマンドは自動的に, 転送モードをブロック入出力またはレコード入出力のいずれかに決めます。
$EXCHANGE/NETWORK/TRANSFER_MODE=BLOCK- _$:KUDOS:FOREIGN_SYS.DAT VMS_FILE.DATこの例でEXCHANGE/NETWORKコマンドは,OpenVMS以外のノードKUDOSにある FOREIGN_SYS.DATファイルを,現在の省略時の設定の装置およびディレク トリにある VMS_FILE.DATファイルに転送します。転送モードとして,ブ ロック入出力を指定します。
$ 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 ファイルの作成についての詳細は, 『OpenVMS Record Management Utilities Reference Manual』を参照してください。 /FDL修飾子が指定され/TRANSFER_MODE修飾子が省略されているので, 転送モードには,省略時の設定であるブロック入出力を使用します。
$ 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 [状態コード]
状態コードを指定する場合,DCLはコンディション・コードとして解釈します。 値が偶数の場合には, 警告メッセージ,エラー・メッセージおよび重大なエラー・メッセージが作成されます。 値が奇数の場合には,正常終了メッセージまたは情報メッセージが作成されます。
状態コードを指定しない場合には,$STATUSの現在の値が保存されます。 制御が外側のコマンド・レベルに渡される場合には, $STATUSには最後に実行されたコマンドまたはプログラムの状態が設定されます。
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コマンドを使用してください。
$ EXIT 1$STATUSと$SERVERITYに1を設定して,1つ外側のプロシージャ・レベルに抜けます。
$ ON WARNING THEN EXIT $ FORTRAN 'P1' $ LINK 'P1' $ RUN 'P1'EXITコマンドは,ONコマンドの条件成立時のコマンドとして使用されています。 このステートメントは, 警告またはエラーがプロシージャ内のコマンドから出されたときに, コマンド・プロシージャが必ず終了するようにします。
プロシージャは終了する前に, 終了する原因となったコマンドまたはプログラムの状態コードを設定します。
$ 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コマンドは必要ありません。 しかし,このように明示的に使用することをおすすめします。
$ 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コマンドを実行します。
$ 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を使用しても同様のことができます。
$ RUN MYPROG [Ctrl/Y] $ EXITこのRUNコマンドは,MYPROG.EXEというイメージの実行を開始します。 そのあと,CTRL/Yを使用して実行に割り込みがかけられています。 EXITコマンドはMYPROG.EXEを終了する前に, イメージによって宣言された終了ハンドラ・ルーチンを呼び出します。