文字列または整数値に対するシンボル名を定義します。
シンボル名=[=]式 シンボル名[ビット位置,サイズ] =[=]置換式
- 注意
- DCLコマンド名としてすでに使用されているシンボル名を割り当てないでください。 IF,THEN,ELSE,およびGOTのようなシンボル割り当ては, コマンド・プロシージャの実行を妨げる可能性がありますので,行わないでください。
式を評価した結果は,文字列値または符合付きの整数値になります。式を評価した 結果が文字列になる場合には,そのシンボルに文字列値を割り当てます。式を評価し た結果が整数値の場合には,シンボルに整数値を割り当てます。整数値が4バイトのバ ッファに収まり切れない場合でも,エラー・メッセージは出力されません。
式中の演算子の概略と,式の指定方法についての詳細, および式の評価方法についての詳細は,『OpenVMSユーザーズ・マニュアル』 を参照してください。
DCLは,1024バイトのバッファを使用して割り当て文を記憶し式を評価します。 シンボル名,式,および式の計算の長さは1024バイトを超えることはできません。
置き換えるシンボルが文字列の場合には, ビット位置は6152より小さい値でなければなりません。 各文字は8ビットを使って表現するため,768文字目までならどの文字列からでも, 置き換えを開始できます(768文字目は,6144というビット位置から始まります)。 ビット位置とサイズの合計は,6152以下でなければなりません。
サイズとは,置き換えるビット数です。 32より大きいサイズを指定すると,DCLはサイズを32に切り捨てます。
かぎ括弧は,必ず指定しなければなりません。シンボル名とかぎ括弧の間に, 空白を入れることはできません。ビット位置とサイズの値は,整数式として指定します。
変更するシンボルが整数の場合には,置換式は, シンボルに割り当てられた値と置き換えられるビット・パターンを定義します。 変更するシンボルが文字列の場合には,置換式の結果は, 文字列の指定されたビットを置き換えるビット・パターンを定義します。 変更しているシンボルが未定義の場合には,置換式の結果は空文字列を置き換えます。
定義できるシンボルの最大数は,以下により決まります。
領域のサイズは,各プロセスごとにシステム・パラメータCLISYMTBLで決まります。
コマンド・インタプリタは,シンボル名とその値に対して領域を割り当てます。 また,各シンボルには数バイト多めに割り当てられます。
$ LIST == "DIRECTORY"この割り当て文は, DCLコマンドDIRECTORYに対するグローバル・シンボル定義として, ユーザ定義同義語LISTを定義します。
$ COUNT = 0 $ LOOP: $ COUNT = COUNT + 1 $ IF P'COUNT' .EQS. "" THEN EXIT $ APPEND/NEW &P'COUNT' SAVE.ALL $ DELETE &P'COUNT';* $ IF COUNT .LT. 8 THEN GOTO LOOP $ EXITこのコマンド・プロシージャCOPYDEL.COMは, パラメータとして指定したファイルをSAVE.ALLというファイルに追加しています。 追加後に,追加したファイルを削除します。 8個までファイル名が使用でき,各々シンボルP1,P2,...に割り当てられます。
このコマンド・プロシージャはカウンタを使用して参照され,ループ内では, 空文字列かどうかをIF文で検査してから処理を行っています。 このIF文では,シンボルCOUNTの値が文字Pに結合され, ループの1回目ではP1を,2回名ではP2を,というように各々検査されます。 P`COUNT'の評価後に,P1やP2等に相当するファイル名の置換が IFコマンドのコンテキストの中で自動的に行われます。
APPENDやDELETEコマンドは,入力パラメータとしてファイル指定を必要とするので, 自動的な置換を行いません。 &P`COUNT'のアンパサンド(&)は,これらのコマンドでシンボル置換を強制的に行います。 これらのコマンドがループ内で最初に検索された時には, COUNTはその現在の値に置換されます。 コマンドの実行時には,アンパサンドで別の置換を行います。 つまり,最初のファイル指定がP1で置換され, 2番目のファイル指定はP2で置換されます。
このコマンド・プロシージャを起動するには,次のコマンドを使用します。
$ @COPYDEL ALAMO.TXT BEST.DOC
ファイルALAMO.TXTとBEST.DOCは,それぞれSAVE.ALLに追加された後に削除されます。
$ A = 25 $ CODE = 4 + F$INTEGER("6") - A $ SHOW SYMBOL CODE CODE = -15 HEX = FFFFFFF1 Octal = 1777761この例は,2つの割り当て文を含んでいます。 最初の割り当て文は,25という値をシンボルAに割り当てます。 2番目の割り当て文は,整数(4),レキシカル関数(F$INTEGER(6)), およびシンボルAを含む式を評価します。 式の結果である-15が,シンボルCODEに割り当てられます。
$ FILENAME = "JOBSEARCH" - "JOB" $ FILETYPE = ".OBJ" $ FILESPEC = FILENAME + FILETYPE $ TYPE 'FILESPEC'最初のコマンドでは,シンボルFILENAMEに"SEARCH"を割り当てます。 文字列"SEARCH"は,式で実行された文字列削除演算の結果です。 2番目のコマンドでシンボルFILETYPEに".OBJ"を割り当て, 3番目のコマンドでシンボルFILENAMEとFILETYPEを足して,FILESPECを作成しています。
シンボルFILENAMEとFILETYPEの値が連結されているので, FILESPECには文字列"SEARCH.OBJ"が割り当てられます。 そしてシンボルFILESPECは,TYPEコマンドのパラメータとして使用されます。 一重引用符(` ')で,シンボルFILESPECをその値である SEARCH.OBJに展開するように指定しています。 そのため,TYPEコマンドでファイルSEARCH.OBJをタイプします。
$ BELL[0,32] = %X07 $ SHOW SYMBOL BELL BELL = ""この例では,シンボルBELLを算術置換文で作成しています。 シンボルBELLは未定義であったため,空文字列に16進数の7が挿入されます。 この値はASCIIコードでは,ターミナルのベルを鳴らすコードです。 SHOW SYMBOL BELLコマンドを実行すると,ターミナルのベルが鳴ります。
シンボルBELLに整数値が定義済みであった場合には,BELLを表示すると, その新しい値が表示されます。
$ $=34 %DCL-W-NOCOMD, no command on line - reenter with alphabetic first character $ $$=34 $ SHOW SYMBOL $$ %DCL-W-UNDSYM, undefined symbol - check validity and spelling $ SHOW SYMBOL $ $ = 34 Hex = 00000022 Octal = 00000000042ドル記号($)で始まるシンボルを使う場合,DCLが最初のドル記号を捨ててしまうので, ドル記号を2つ続けて($$)使用してください。
文字列値に対してシンボル名を定義します。
シンボル名:=[=]文字列 シンボル名[オフセット,サイズ] :=[=]置換文字列
- 注意
- DCLコマンド名としてすでに使用されているシンボル名を割り当てないでください。 IF,THEN,ELSE,およびGOTOのようなシンボルの割り当ては, コマンド・プロシージャの実行を妨げる可能性がありますので, 行わないでください。
文字列割り当て文(:=)では,文字列リテラルを引用符(" ")で囲む必要はありません。 この場合には,文字列値は自動的に大文字に変換されます。 また,文字列の前後のスペースやタブは削除され, 文字の間の複数のスペースやタブは1つのスペースに変換されます。
一般に,文字列値を含むシンボルを作成するには, 割り当て文(=)を使用する方が簡単です。なぜなら,割り当て文の場合には, 文字は自動的に大文字に変換されず,また余分なスペースも削除されないからです。 また,割り当て文では,式の内部で文字列演算を実行することができます。
大文字への変換をしないようにしたり, または文字列に含まれる必要なスペースとタブをそのまま保存するには, 文字列を二重引用符で囲まなければなりません。 文字列の内部で二重引用符を使用する場合には,文字列全体を二重引用符で囲み, さらに文字列の中で二重引用符を指定する場所に二重引用符を2つ指定します。 次の例を参照してください。
$ TEST := "this is a ""test"" string" $ SHOW SYMBOL TEST TEST = "this is a "test" string"
この例では,スペース,小文字,および二重引用符は, シンボル定義の中にそのまま保存されます。
シンボル割り当てを複数行に継続するには,継続文字としてハイフン(-)を使用します。 次の例を参照してください。
$ LONG_STRING := THIS_SYMBOL_ASSIGNMENT_IS_A_VERY_LONG- _$ _SYMBOL_STRING
文字列割り当て文を使って,空文字列をシンボルに割り当てるためには, 割り当て文の右辺に文字列を指定しないようにします。次の例を参照してください。
$ NULL :=
文字列は,文字列リテラルとして指定するか, または文字列リテラルに評価されるシンボルかレキシカル関数として指定します。 シンボルやレキシカル関数を使用する場合には, シンボル置換を要求するために一重引用符(' ')で囲みます。 シンボル置換についての詳細は,『OpenVMSユーザーズ・マニュアル』 を参照してください。
また,フォーリン・コマンドを定義するために, 文字列割り当て文を使用することもできます。フォーリン・コマンドについての詳細は 『OpenVMSユーザーズ・マニュアル』を参照してください。
オフセットは,シンボル名の文字列値の先頭を基準にして, 置換される最初の文字の相対位置を指定します。オフセットの値は0から始まります。
コマンドに指定したオフセットが, 変更される文字列に含まれる最後の文字のオフセットより大きい場合には, 文字列の最後と追加される置換文字列のオフセットの間に,スペースが挿入されます。 指定できるオフセットの最大値は,768です。
サイズは,置換される文字数を指定します。サイズの値は1から始まります。
オフセットとサイズは,整数式として指定します。整数式についての詳細は 『OpenVMSユーザーズ・マニュアル』を参照してください。 サイズとオフセットを加算した値は,769より小さくなければなりません。
置換文字列は,文字列リテラルとして指定するか, または文字列リテラルに評価されるシンボルやレキシカル関数として指定することができます。 シンボルやレキシカル関数を使用する場合には,シンボル置換を要求するために, 一重引用符(' ')で囲まなければなりません。シンボル置換についての詳細は 『OpenVMSユーザーズ・マニュアル』を参照してください。
$ TIME := SHOW TIME $ TIME 14-DEC-1998 11:55:44この例では, TIMEというシンボルが, SHOW TIMEというコマンド文字列と等しいと定義されます。 この場合,シンボル名がコマンド文字列の最初の単語として指定されているため, コマンド・インタプリタは自動的にシンボル名を文字列値と置き換え, SHOW TIMEコマンドを実行します。
$ STAT := $DBA1:[CRAMER]STAT $ STATこの例では,STATをフォーリン・コマンドとして定義する方法が示されています。 STATというシンボルは, ドル記号で始まってその後にファイル指定が続く文字列に等しいものとして定義されています。 コマンド・インタプリタは,ファイル指定が実行可能なイメージのファイル指定であること, つまり,ファイル・タイプがEXEのファイルであると仮定します。 したがって,この例ではSTATというシンボルは次のコマンドの同意語になります。
$ RUN DBA1:[CRAMER]STAT.EXE
この後STATとタイプすると,コマンド・インタプリタはイメージを実行します。
$ A = "this is a big space." $ SHOW SYMBOL A A = "this is a big space." $ B := 'A' $ SHOW SYMBOL B B = "THIS IS A BIG SPACE."この例では,割り当て文と文字列割り当て文が比較されています。 シンボルAは割り当て文を使って定義されているため, 小文字や複数のスペースはそのまま保存されます。 シンボルBは文字列割り当て文を使って定義されています。 一重引用符(' ')が必要な点に注意してください。一重引用符を使用しないと, Bというシンボル名はリテラル文字列Aに等しいものとして定義されてしまいます。 文字列割り当て文を使用すると,シンボルAの値がシンボルBに割り当てられる際に, 文字は大文字に変換され,複数のスペースは1つのスペースに変換されてしまいます。
$ FILE_NAME := MYFILE $ FILE_NAME[0,2]:= OL $ SHOW SYMBOL FILE_NAME FILE_NAME = "OLFILE"この例では,シンボルFILE_NAMEに割り当てられた文字列の最初の2文字を, 文字列OLに変更する置換式が示されています。 オフセット0は文字列の最初の文字を指定し,サイズ指定の2は, 文字列の長さを指定しています。
$ FILE_NAME := MYFILE $ FILE_TYPE := .TST $ FILE_NAME[F$LENGTH(FILE_NAME),4] := 'FILE_TYPE' $ SHOW SYMBOL FILE_NAME FILE_NAME = "MYFILE.TST"この例では,シンボルFILE_NAMEに文字列MYFILEを, シンボルFILE_TYPEに文字列.TSTを各々代入しています。 3番目の割り当て文では,レキシカル関数F$LENGTHを用いて, 上書きを始めるオフセット値を特定しています。 シンボルFILE_TYPEは,置換文字列.TST)を参照するために用いられます。 シンボルの展開を要求するために,一重引用符(' ')を指定しています。
レキシカル関数F$LENGTHは,シンボルFILE_NAMEの文字列の長さを返します。 この値は,オフセットとして使用されます。シンボルFILE_TYPEの文字列の4文字を, FILE_NAMEの文字列の最後に追加しています。シンボルFILE_NAMEの結果は, 文字列 MYFILE.TSTになります。
コマンド・プロシージャを実行します。または,コマンド・インタプリタに対して, 特定のファイルまたは装置からのコマンド入力を読み込むよう要求します。
@ ファイル指定 [パラメータ[,...]]
$ WRITE SYS$OUTPUT P1
この時,DCLプロンプト($)に対して次のコマンドを入力します。
$ @TEST "Never say ""quit"""
TEST.COMというプロシージャを実行すると, パラメータP1には次の文字列が割り当てられます。
Never say "quit"
文字列に引用符が含まれており,空白が含まれていない場合には, 引用符は文字列の中でそのまま保存され, 引用符で囲まれた英字は小文字のまま保存されます。 たとえば,DCLプロンプトに対して次のコマンドを入力します。
$ @TEST abc"def"ghi
TEST.COMというプロシージャを実行すると, パラメータP1には次の文字列が割り当てられます。
ABC"def"GHI
シンボルをパラメータとして使用する場合には, シンボル置換を実行するためにシンボルを一重引用符(' ')で囲む必要があります。 次の例を参照してください。
$ NAME = "JOHNSON" $ @INFO 'NAME'
一重引用符を使用すると,"JOHNSON"という値がNAMEというシンボルと置き換えられます。 したがって,"JOHNSON"というパラメータが, P1としてINFO.COMに渡されます。
コマンド,またはデータ, あるいはその両方を含むコマンド・プロシージャを実行するには, コマンド行の最初に@コマンドを入力し, その次にコマンド・プロシージャ・ファイルの名前を指定します。 コマンド・プロシージャにはDCLコマンド, および現在実行中のコマンドまたはプログラムへの入力データを含めることができます。 コマンド・プロシージャ内のすべてのDCLコマンドは, ドル記号($)で始めなければなりません。 コマンド行がハイフン(-)により継続している場合は, その継続行はドル記号から始まらなくても構いません。
コマンド・プロシージャ中で,行の最初にドル記号がなく, 継続行でもないコマンド行は, 現在実行中のコマンドまたはプログラムへの入力データとして扱われます。 DECKコマンドを使用すると, データのレコード位置にドル記号があることを指定できます。
コマンド・プロシージャ内に, 他のコマンド・プロシージャを実行する@コマンドを含めることもできます。 トップ・レベルのコマンド・プロシージャも含め, 最大で16回までコマンド・プロシージャをネストさせることができます。 SUBMITコマンドを使用する, またはシステム・カード・リーダにコマンド・プロシージャを含むカード・デックを置くことにより, コマンド・プロシージャをバッチ・ジョブとしてキューに登録することもできます。
特定のコマンド行に対する修飾子,またはパラメータ, あるいはその両方を含むコマンド・プロシージャを実行するには,通常, コマンド行で修飾子またはパラメータを指定する位置に @コマンドを置きます。次に, 修飾子またはパラメータを含むコマンド・プロシージャ・ファイル名を指定します。
コマンド・プロシージャ・ファイルがコマンドに対するパラメータで始まる場合は, @コマンドの前に空白が必要です。次の例を参照してください。
$ CREATE TEST.COM TIME [Ctrl/Z] $ SHOW @TEST 14-DEC-1998 17:20:26
反対に,コマンド・プロシージャ・ファイルがコマンドに対する修飾子で始まる場合は, @コマンドの前に空白を入れてはいけません。
$ CREATE TEST_2.COM /SIZE [Ctrl/Z] $ DIR@TEST_2 Directory WORK$:[SCHEDULE] JANUARY.TXT;8 14-DEC-1998 15:47:45.57 FEBRUARY.TXT;7 14-DEC-1998 15:43:16.20 MARCH.TXT;6 14-DEC-1998 11:11:45.74 . . . Total of 11 files.
コマンド・プロシージャ・ファイルにパラメータ,修飾子, あるいはその両方が含まれている場合は, コマンド行をドル記号で始めてはいけません。 @ファイル指定に続くコマンド行のデータは, プロシージャに対するパラメータとして扱われます。
SYS$OUTPUTの定義を変更すれば, コマンド・プロシージャからの出力先を変更することができます。 コマンド・プロシージャの1行目として次のコマンドを指定すると, 出力は指定したファイルに送られます。
$ DEFINE SYS$OUTPUT ファイル指定
このプロシージャが終了すると,SYS$OUTPUTはもとの等価文字列に戻されます。 この方法では,コマンド・プロシージャを実行するときに /OUTPUT修飾子を使用した場合と同じ結果になります。
$ CREATE DOFOR.COM $ ON WARNING THEN EXIT $ IF P1.EQS."" THEN INQUIRE P1 FILE $ FORTRAN/LIST 'P1' $ LINK 'P1' $ RUN 'P1' $ PRINT 'P1' [Ctrl/Z] $ @DOFOR AVERAGEこの例では,DOFOR.COMというコマンド・プロシージャが示されています。 このコマンド・プロシージャは,プログラムをコンパイルし,リンクし, 実行するために,それぞれFORTRANコマンド,LINKコマンド, およびRUNコマンドを実行します。 ONコマンドはコマンドの実行結果が警告状態やエラー状態である場合には, プロシージャの実行を継続しないことを要求しています。
DOFOR.COMを実行するときに, FORTRANプログラムのファイル指定をパラメータP1として渡すことができます。 プロシージャを実行するときにP1の値を指定しなかった場合には, INQUIREコマンドがターミナルにプロンプト・メッセージを表示し, そのプロンプトに対して入力した値が,シンボルP1に割り当てられます。 この例では,ファイル名AVERAGEがP1に割り当てられています。 FORTRANコマンド,LINKコマンド,RUNコマンド,およびPRINTコマンドには, それぞれ省略時のファイル・タイプが設定されているため, ファイル・タイプは含まれていません。
$ @MASTER/OUTPUT=MASTER.LOGこのコマンドは,MASTER.COMという名前のプロシージャを実行します。 出力はすべてMASTER.LOGファイルに書き込まれます。
$ CREATE FILES.COM *.FOR, *.OBJ [Ctrl/Z] $ DIRECTORY @FILESこの例はFILES.COMコマンド・プロシージャを示しています。 このファイルには,DCLコマンド行へのパラメータが含まれています。 ファイル全体が DCLにより,コマンド入力として処理されます。 このプロシージャをDIRECTORYコマンドの後で実行して, 現在の省略時のディレクトリ内のFORTRANソース・ファイルとオブジェクト・ファイルの一覧を表示させています。
$ CREATE QUALIFIERS.COM /DEBUG/SYMBOL_TABLE/MAP/FULL/CROSS_REFERENCE [Ctrl/Z] $ LINK SYNAPSE@QUALIFIERSこの例では,LINKコマンドに対する修飾子を含んでいる QUALIFIERS.COMというコマンド・プロシージャが示されています。 LINKコマンドを入力する時に,リンクするファイルのファイル指定のすぐ後に, コマンド・プロシージャを指定します。 この時,ファイル指定と@コマンドの間には空白を入れてはいけません。
$ CREATE SUBPROCES.COM $ RUN 'P1' - /BUFFER_LIMIT=1024 - /FILE_LIMIT=4 - /PAGE_FILES=256 - /QUEUE_LIMIT=2 - /SUBPROCESS_LIMIT=2 - 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8' [Ctrl/Z] $ @SUBPROCES LIBRA /PROCESS_NAME=LIBRAこの例は,SUBPROCES.COMというコマンド・プロシージャを示しています。 このプロシージャは,イメージを実行するためのサブプロセスを生成する RUNコマンドを実行し,また, サブプロセス生成のためのクォータを定義する修飾子を含んでいます。 実行するイメージ名は,パラメータP1で渡されます。パラメータP2からP8は, 追加する修飾子を指定するために使用できます。
この例では,P1にLIBRAというファイル名が割り当てられます。 これがサブプロセスで実行するイメージの名前です。 P2には/PROCESS_NAME=LIBRAという修飾子が割り当てられます。 これがRUNコマンドに追加される修飾子です。
$ CREATE EDOC.COM $ ASSIGN SYS$COMMAND: SYS$INPUT $ NEXT: $ INQUIRE NAME "File name" $ IF NAME.EQS."" THEN EXIT $ EDIT/TPU 'NAME'.DOC $ GOTO NEXT [Ctrl/Z] $ @EDOCこのEDOC.COMというプロシージャは,EVEエディタを起動します。 編集セッション終了時に,ラベルNEXTでプロシージャはループします。 各ループにおいて,編集するファイル名を要求します。 省略時のファイル・タイプは.DOCです。 INQUIREコマンドへの応答に空行が入力されると, EXITコマンドでプロシージャが終了します。
ASSIGNコマンドで,プロシージャ実行中にSYS$INPUTの等価名を変更しています。 この変更により,EVEエディタがコマンド・プロシージャ・ファイルではなく, ターミナルから入力データを読むことができます。 SYS$INPUTが変更されない場合には, 省略時の入力データ・ストリームはコマンド・プロシージャ・ファイルになります。 コマンド・プロシージャ終了時に, SYS$INPUTは解除され元の設定に戻ります。
! PEOPLE.DAT ! A set of data with embedded key qualifiers for the SORT command. ! ! Usage: SORT@PEOPLE.DAT ! /KEY=(POS:10,SIZE:10) sys$input people.out Fred Flintstone 555-1234 Barney Rubble 555-2244 Wilma Flintstone 555-1234 Betty Rubble 555-2244 George Slate 555-8911 Dino Dinosaur 555-1234 $! $ purge people.out $ type people.out
ソートされた名簿をPEOPLE.OUTファイルに作成し,それを表示します。 この例では,DCLコマンドの中間で "@" を使用した場合に, DCLがそのファイル全体をコマンド入力として処理することを示します。