■ MikoScript 起動コマンド


 ここでは、「スクリプトの実行」ダイアログ ボックス「実行コマンド」に 入力する MikoScript の起動コマンドについて説明します。

 本コマンドでは、次のことが行なえます。


● 一般書式

 本起動コマンドの一般的な書式は、次のようになります。

   <オプション>  <ファイル名>  <引数>

この各要素は、空白で区切ります(つまり、各要素の間には空白を入れる必要があります)。 この空白というのは、1個以上の半角空白または TAB コードです。 以降で空白という場合も同様です。次に、各要素について説明します。

<オプション>
/ または - で始まり、その直後に、種別を示すアルファベット1字が続きます。 その次に、= と <パラメータ> を続ける場合もあります。この = は省略しても 構いません。また、<パラメータ> は二重引用符で囲うこともできます。ただし、 <パラメータ> の中に空白がある場合は、必ず二重引用符で囲う必要があります。 <オプション> は省略される場合もあります。また、複数になる場合もあります。 <オプション> が複数の場合、各 <オプション> の先頭は必ず、/ または - に して、各 <オプション> の間に空白を入れる必要があります。
<ファイル名>

これは、 操作の対象となるファイルの名称です。このファイルは、本スクリプト言語で書 かれたソースファイルか、または、本言語の翻訳によって生成された中間コード のモジュールファイルかになります。対象ファイルが、ソースかモジュールかは、 <ファイル名> の拡張子で判断します。拡張子が「.mcx 」の場合、モジュール ファイルとして扱います。拡張子が無い場合、<ファイル名> に「.mcx 」を付加 した名称のファイルをモジュールファイルとして扱います。それ以外の場合は、 ソースファイルとして扱います。

コマンドの機能は、デフォールトでは、ソースファイル、または、モジュール ファイルの実行になります。その場合、<ファイル名> の指定は1つだけに限り ます。実行以外の機能に変更するには、後述の特別な <オプション> を指定する 必要があります。

<ファイル名> の指定は、相対パスでも、絶対パスでも構いません。相対パスの場合、 基点は、カレントパスになります。 本コマンドの実行開始時点で、カレントパスは、基準パス になります。後述の /p オプションで、カレントパスを途中で変更することもできます。

<ファイル名> は、不要な場合もあれば、複数になる場合もあります。
<ファイル名> には、ワイルドカードは使えません。
<ファイル名> の中に空白文字がある場合、<ファイル名> を二重引用符で囲う 必要があります。
<ファイル名> の最初の文字が - の場合は、<ファイル名> には指定できません。
<ファイル名> がショートカットの場合、対象は、ショートカットの参照先では なく、ショートカット自身になってしまいます。

<引数>
<ファイル名> のファイルを実行する際に、主関数に渡たす引数の文字列です。 この場合、<ファイル名> 以降の全ての項が、<引数> になります。<引数> は、 0個以上の指定が可能です。<引数> が複数ある場合、各 <引数> は、空白で 区切ります。1つの <引数> の中に空白文字がある場合、 その <引数> は、二重引用符で囲う必要があります。 コマンドの機能が、<ファイル名> のファイルの実行でない場合、 <引数> の指定はありません。
起動コマンド例:
 s1.mc       ソースファイル s1.mc を実行(引数なし)
 s2.mc a b   ソースファイル s2.mc を実行(引数は a b )
 s3.mcx      中間コードファイル s3.mcx を実行(引数なし)
 s4 c        中間コードファイル s4.mcx を実行(引数は c )
 -d slib     モジュールファイル slib.mcx の内容を一覧表示
 -?          本コマンドの用法を表示
 /m=sx /n="sample" s1.mc s2.mc s3.mc
       ソースファイル s1.mc s2.mc s3.mc を中間コードに
       変換して、モジュールファイル sx.mcx に格納
       (モジュール説明文は、sample )
●コマンドオプション
 本コマンドの各 <オプション> の詳細を、次に説明します。
/d
 このオプション以降に指定された <ファイル名> のファイル内に格納され ているモジュールの一覧を表示します。 この場合、 <ファイル名> は複数指定可能です。
/f=<コマンド入力ファイル名>
 コマンド行の入力を、指定された <コマンド入力ファイル名> のファイルに 切り換えます。これは、ライブラリー作成時等で、コマンド行が長い場合や、 同じコマンド行を何回も使う場合に、便利です。
 なお、コマンド入力ファイル内の TAB と改行コードは、半角空白と同様に、 コマンドの各項目を区切る空白として扱われます。
 例: /f=files.txt
    /f=MakeLib.cmd
/h
 本コマンドの用法を表示します。( /? と同じ )
/i=<インクルードパス>
 本スクリプト言語のソースファイル内の #include で指定された ファイルの検索パスとして、<インクルードパス> のパスを設定します。 複数のパスを指定する場合は、; で区切ります。 相対パスを指定した場合、現カレントパスが基準になります。
 例: /i=D:\Script\Include
    /i"..\Inc;E:\Test\Inc"
/l=<ライブラリーパス>
 モジュールファイルの検索パスとして、<ライブラリーパス> のパスを設定します。 複数のパスを指定する場合は、; で区切ります。 相対パスを指定した場合、現カレントパスが基準になります。
 例: /l=D:\Script\Library
    /l"..\Lib;E:\Test\Lib"
/m=<モジュール格納ファイル名>

 モジュール格納モードに移行します。つまり、このオプション以降に指定 された <ファイル名> のファイルに対しては、ソースファイルなら、中間 コードに変換してロードし、モジュールファイルなら、そのままロードし て、最後に、全ロードモジュールを、この <モジュール格納ファイル名> のファイルに格納します。この /m オプション以降の <ファイル名> は、 複数指定できます。

 <モジュール格納ファイル名> に拡張子が無い場合、それに「.mcx 」を 付加した名称のファイルに格納します。

 <モジュール格納ファイル名> の指定が無い場合( /m だけの場合)は、 最初にロードされたモジュールの名称に拡張子「.mcx 」を付加した名称 のファイル名に格納します。
 例: -m=hello
    -m=GLib.mcx

/n=<モジュール内容の説明文>
 モジュールファイルに格納する説明文を指定します。このオプションを 省略した場合、モジュールの説明文は、空文になります。 このオプション以降は、それまでに /m オプションがなくても、 モジュール格納モードに移行します。
 例: -n="Test Modules"
    -n="基本ライブラリー"
/p=<ディレクトリー名>
 カレントパスを、<ディレクトリー名> のディレクトリーに変更します。 「ディレクトリー名」は、絶対パスでも、現時点のカレントパスからの相対パス でも構いません。「ディレクトリー名」の指定が無い場合( /p だけの 場合)は、現時点のカレントパスを表示します。
 例: -p=..\src
    -p="D:\MikoScript\Library"
/s
 内部の処理状態を逐次表示するようにします。
/v
 現 MikoScript のバージョンを表示します。 ちなみに、これは、Apsaly のバージョンではありません。
/?
 本コマンドの用法を表示します。( /h と同じ )
/! <実行文>
 指定された <実行文> を直接実行します。 このオプションを使用する場合、実行対象の <ファイル名> の指定は、不用です。
 /! 以降は、本言語の実行文と同等に扱われます が、「実行コマンド」内では、 $ がメタ文字なので、その展開後に、実行文として扱われます。
 例: /! print "hello";
    /! ::Apsaly.SetSelText( ::Apsaly.GetSelText()'subst( $$"(^\s*\n)+", "\r\n" ));

●スクリプトファイルを実行する場合のコマンド形式

 スクリプトファイルを実行する場合の書式は、一般的には、次の通りですが、 <オプション> は、無し、または、/d /m /n 以外を使います。

  <オプション> <ファイル名> <引数>

 実行対象の <ファイル名> は、必ず1つ指定する必要があります。

 <ファイル名> 以降の項は全て、主関数に渡す <引数> になります。

 <オプション> がない場合、実行対象のソースファイルの拡張子は、「.mc 」または「 .s 」を 使います。もし、これ以外の拡張子を使うと、「.mcx 」でなければ、 ActiveX スクリプトのソースファイルとして扱われます。

 <オプション> がある場合、<ファイル名> が、ActiveX スクリプトのファイルとして 扱われることはないので、実行対象のソースファイルの拡張子は、特に制約はありません。 しかし、慣習上「.mc 」または「 .s 」を使います。 また、「.mcx 」は、モジュールファイルとして扱われるので、使えまません。

 実行対象のモジュールファイルの拡張子は、「.mcx 」に限定されます。

 <ファイル名> に拡張子が無い場合、<ファイル名> に「.mcx 」を付加した名称の ファイルが、モジュールファイルとして実行対象になります。

 実行対象がソースファイルの場合、まず、コンパイルされて、中間コードに変換 されますが、この時、コンパイルエラーになると実行は行なわれません。

例1:

  hello.mc

これは、基準パスにある hello.mc という ソースファイルを引数なしで実行します。

例2:

  d:\tools\dump file.dat

これは、d:\tools というディレクトリーにある dump.mcx というモジュールファイルを、 引数 file.dat で実行します。

例3:

  ..\test.s abc xyz

これは、基準パスよりも1つ上のディレクトリ にある test.s というソースファイルを、引数 xyz と abc で実行します。



●モジュールファイルを生成する場合のコマンド形式

 モジュールファイルを生成する場合の書式は、次のように、 必ず /m と /n のオプションの両方またはどちらかを、最初に指定する必要があります。

  /m=<モジュール格納ファイル名>  /n=<説明文>  <ファイル名> ...

 モジュールファイルの生成では、本スクリプト言語で書かれた1つ以上のソース ファイルを、それぞれ中間コードに変換して、1つのファイルにまとめて格納 することができます。また、既に中間コードで格納されている複数のモジュール を1つのファイルにまとめて格納することもできます。あるいは、その両方を まとめて行なうこともできます。

 モジュールファイルの生成では、スクリプトの実行は行なわれません。

例1:

  /m hello.mc

これは、(スクリプト実行時の)カレントパス (つまり、基準パス)にある hello.mc と いうソースファイルをコンパイルして、 その中間コードのモジュールファイルを、カレントパスの hello.mcx と いうファイルに格納します。

例2:

  /m=..\lib\slib /n="string library" s1.mc s2.mc s3.mc

これは、カレントパス(例1参照)にある s1.mc と s2.mc と s3.mc の3つのソース ファイルをコンパイルして、その各中間コードのモジュールを、カレントパス を基点に ..\lib のディレクトリー内の slib.mcx というモジュールファイルに まとめて格納します。この時、モジュールの説明文は、"string library" になります。



●二重引用符で囲う場合の補足説明

 <オプション> の <パラメータ>、<ファイル名>、あるいは、<引数> の中に 空白がある場合、二重引用符で囲う必要があるということは、既に述べましたが、 その二重引用符の囲いの中で、二重引用符自身を使う場合は、 その中の各(1個の)二重引用符を2個の二重引用符に置き換える必要があります。

 例えば、サンプルスクリプト集にある ArgPrint.mc は、<引数> の数と、 その内容をそのままプリントするプログラムですが、これを、

 ArgPrint.mc "printf( ""hello, world\n"" );"

のように実行すると、次の通りプリントされます。

 1
 printf( "hello, world\n" );

なお、二重引用符内の \ は、特別な意味はなく、通常の文字として扱われます。 例えば、

 ArgPrint.mc "--""ABC""-- \p \" XYZ

のように実行すると、次の通りプリントされます。

 2
 --"ABC"-- \p \
 XYZ