プロセルピナ
Top Internet
Mail
Private
Proxy
Capture
Device
Download Config
and
Words
Online
Help
Online
Home
[BACK]
Top > Proserpine Macro

 
      PROSERPINE MACRO

プロセルピナマクロの書式
 
    Macro Top | Variables | Commands | Ex-Commands      


 

プロセルピナマクロの構文


プロセルピナマクロは1行に1コマンドを記述していく、単純なマクロです。
マクロの処理は、マクロファイルの先頭から最後に向けて順番に行われますが、 この処理の流れは ラベルとjumpコマンド、 while文とbreak文、 if文、 gosubコマンドとreturnコマンド などで制御することができます。

変数はstr[ ]strl[ ]の文字列、 int[ ]intl[ ]の整数値(signed-64bit)、 bin[ ]binl[ ]のバイト列(バイナリデータ) を使用することができます。 マクロの入力はinput[ ]の文字列配列に設定されます。
→ プロセルピナマクロの変数

プロセルピナマクロでは、複雑な構文や式は書けません。 アセンブラのように 単純なコマンドを組み合わせて、処理を記述します。
複雑な式で記述したい場合は、JavaScriptで記述し、ダウンロードマクロの Ex:JScriptEvaluateコマンド」 で実行することができます。
→ 「プロセルピナマクロ」のコマンド (標準コマンド)
→ 「ダウンロードマクロ」のコマンド (拡張コマンド)

プロセルピナマクロは、目的に合わせてコマンドが拡張(追加)されて使用されることがあります。 例えば、 ダウンロードマクロ はプロセルピナマクロにインターネットにアクセスするコマンドを追加したものです。

 

コメント、コメント行


コメントは // (半角スラッシュの2連続) の後ろに記述します。
行の先頭文字が / (半角スラッシュ) または # (半角#) の場合、その行全体がコメントとして扱われます。

 

改行


コマンドは1行に1つだけ書けますが、  ; (半角セミコロン記号) を記述することで、改行の代わりにすることができます。
  例:   set: str[1]="ABC";     set: str[2]="DEF"

 

ブロック


プロセルピナマクロは、ブロックと呼ばれる単位で記述します。 ブロックは「 :Label_Name { 」のラベル行と、 「 } 」の終端行で囲まれた範囲です。
jumpコマンドでジャンプできる飛び先は、ブロックの先頭であるラベル行になります。



上記の例では、「LabelName」ブロックの最後で、「NextBlock」ブロックにジャンプしています。
ただしこの例の場合、 「LabelName」ブロックと「NextBlock」ブロックの間に他のブロックが無いので このjumpコマンドはあっても無くても 処理に変わりはありません。
「NextBlock」ブロックの最後は endコマンド になっているので、マクロの処理はそこで終了し、 更に後にブロックがあっても実行されません。

 

実行結果の設定


プロセルピナマクロの実行結果は、文字列配列になります。 結果の設定は putコマンド で行います。

putコマンドで設定された実行結果がどう扱かわれるかは、 プロセルピナマクロを起動した側の処理によって異なります。
例えば、テキストフォームから起動した場合は、結果は新たに別のテキストフォームが開かれて表示されます。 これはテキストフォームの実装です。
メール作成フォームから起動した場合は、結果の文字列は 入力に使用された文字列と置換されます。 これはメール作成フォームの実装です。

ダウンロードフォームから起動した場合、単純にポップアップで表示されるだけですが、 これはファイルのダウンロード結果を知らせる目的だけに結果を使用している為です。

 

if文


if文、if~else文によって、条件式による制御ができます。
条件式は ( ) の内側に書きますが、記述できるのは単純な式のみになります。 (~) の中に (~) を入れ子(ネスト)にすることはできません。
また( )内の 左項と判定式と右項の間は、 必ず半角スペースで区切られていなければいけません。

○ :  if  (intl[1]  >  0)  { 
正しいif文です。
(先頭の if から末尾の { まで、 改行を含めずに記述しなければなりません)

× :  if  (intl[1]>0)  { 
( )内の intl[1]>0の間は、 必ず半角スペースで区切られている必要があります。

× :  if  ((intl[1]+intl[2])  >  0)  { 
( ) はネストできません。単純に比較するだけなので、計算式は予め計算して変数に入れておく必要があります。




上記の例は、int[1]の値が10を超えるまで culcコマンドで1づつ加算しながらループし、 10を超えると「Next」のブロックにジャンプするものです。

if文の条件式では、文字列が一致するかどうかを  == (半角=記号の2連続) で表記します。
単一の文字を比較する場合であっても、"~" の文字列の形式になります。 プロセルピナマクロでは、'~' による文字表記はできません。



if文の {} は省略できません。 条件式内のコマンドは、一行だけであっても必ず {} で囲まれている必要があります。

○ :  if  (intl[1]  >  0)  { break; } 
正しいif文です。(最初の { は必ず先頭行に記述されなければなりません)

× :  if  (intl[1]  >  0)  break; 
if文判定で、単純にwhileループを抜ける場合でも、 break;{} で囲まれている必要があります。

 

if文の中でのメソッドの記述


基本的に、if文は単純判定のみを行います。文字列変数 str[32] の先頭3文字が OK: かどうかの判定は、 次のように記述します。
(StartsWithメソッドは true または false の文字列を返します)



( ) がネストする状態になる為、次のような記述はできません。

  ×     if (str[32].StartsWith("OK:") == "true") {  

ただし、表記の単純化のために特例的な扱いで、 最初の ( ) を { } と記述することができます。
上記の例は、次のように書くことができます。



このルールには汎用性はありません。 if文の中で、StartsWithのようなメソッドを使うときの特例です。

 

while文、break文


while文とbreak文によって、ループによる制御ができます。
while文の (~) の中に記述する条件式は if文 と同じです (記述できるのは単純な式のみになります)。


例1: while構文

上記の例は、int[1]の値が10を超えるまで culcコマンドで1づつ加算しながらループし、 10を超えると「Next」のブロックにジャンプするものです。
ジャンプ先の「Next」ブロックでは、 strl[2]に *文字 を1つ毎に繋げていくループが作成されています。 while文の条件では、このstrl[2]の長さが10文字になった時点でループを終了するように記述されていますが、 先にループ内のif文の判定で break文が実行されるので、 「Next2」ブロックにジャンプする時点でのstrl[2]は "***" になります。


単純に無限ループを記述したい場合(判定式の省略)は、(~)判定式の内側に true を記述します。
次の例ではwhile構文は無限ループで記述し、 while構文の内側でループを終了させる条件式をif文で記述しています。


例2: while判定式の省略(無限ループ)


 

gosubコマンド、returnコマンド


gosubコマンドでラベルにジャンプした場合は、returnコマンドでジャンプした位置に戻ることができます。
→ gosubコマンド、returnコマンド


[BACK]
プロセルピナ