■名前
名前は、数字で始まらない任意の文字列で構成されます。先頭12文字までを識別します。ただし、以下の特殊文字を含むことはできません。
空白 タブ
, : ;
| ^ & = ! ≠ < > ≦ ≧ 〈 〉
+ - * / % × ÷ ~ ~
( ) [ ]
” “ ゛ ″
. # \ '
利用者が名前づけできる名前には、“変数名”“セグメント名”“手続き名”の3つがあります。また、超漢字Vによって決められている名前には、“状態名”と“システム変数”“組み込み手続き名”があります。これらの間で、同じ名前をつけることはできません。
◆名前には、言語指定コードを含めることができます。
■変数
変数は、数値、文字/文字列定数、セグメント名、または手続き名を格納することができます。
変数に格納された値を使って、計算、制御、データの受け渡しを行います。
■変数の型
変数は、その変数に格納できる値によって、以下の型(タイプ)があります。
バイト型(Byte)
0~255の範囲の符号なし整数値のみ格納できます。
文字型(Character)
0~65535の範囲の符号なし整数値のみ格納できます。文字を格納するために使います。
整数型 (Integer)
整数値のみ格納できます。
浮動小数型 (Floating)
浮動小数値のみ格納できます。
シンボル型(Symbol)
セグメント名、手続き名、配列名の名前のみを格納できます。この変数への参照は格納した名前の参照と同じとなり、これを間接参照と呼びます。
†C言語でのポインタと同じです。
汎用型(Generic)
任意の値を格納できます。
◆変数の型は、LOCAL文,VARIABLE文で指定します。
◆プログラム実行時のエラーチェックのために、汎用型ではなく、個別の型を指定することお勧めします。
■配列変数
LOCAL文,VARIABLE文において、“[ ]”を使って、1次元の配列変数を宣言することもできます。N個の要素から成る配列を宣言したときには、インデックスとして0からN-1を指定して参照します。
例:VARIABLE A:I[10] # 10個の要素からなる整数型配列
配列の各要素の占めるサイズは以下の通りです。
バイト型:1バイト
文字型:2バイト
整数型:4バイト
浮動小数型:8バイト
シンボル型:2バイト
汎用型:8バイト
◆変数の配列の大きさ(要素数)は変数の型に関係なく、最大1048576個となります。ただし、局所変数の配列の大きさは、最大4096個です。
◆配列の使用において、インデックスが不正だったときには、不正値を戻します。エラーとはなりません。たとえば、インデックスが負の数だったり、N個の配列を宣言したのにインデックスがN以上だったりするときが、このケースにあたります。
◆文字型の配列は一意表現であるものとします。
∇部分配列
配列の一部分を部分配列と呼びます。部分配列の先頭の要素番号〈先頭要素〉と要素の数〈要素数〉により、以下の形式で表現します。
〈変数名〉[【〈先頭要素〉】:【〈要素数〉】]
〈先頭要素〉:省略時は0。
〈要素数〉 :省略時または0の時は配列の最後まで。
部分配列はSET文やいくつかの限定された文でのみ使えます。
例: VARIABLE A:C[100]
# 100個の要素からなる文字型配列
A[10:5]
→ A[10]…A[14]を意味する。
A[5:]
→ A[5]…A[99]を意味する。
A[:20]
→ A[0]…A[19]を意味する。
A[:]
→ A[0]…A[99]を意味する。
◆文字型の配列の部分配列を使う場合は、部分配列自体が一意表現になることを保証するようにプログラミングする必要があります。
∇配列の共有
配列の一部分または全体を別の名前の配列として定義できます。この場合、元の配列の型と異なる型の配列とすることもできます。VARIABLE文で宣言します。
†局所変数の配列は共用できません。
配列の共有は、以下の表現で宣言します。
〈配列変数名〉【:〈型〉】[〈要素数〉]=
〈元の配列変数名〉【[〈先頭要素〉]】
例: VARIABLE A:B[100]
# 100個の要素からなるバイト型配列A
VARIABLE X:C[50]=A
# 配列Aと全体を共有する文字型配列X
VARIABLE Y:I[10]=A[20]
# 配列Aの20番目要素から60番目の要素を共有する整数型配列Y
例:の定義の場合、A,X,Yの各配列は以下の図に示すようにデータ領域が重複します。
◆異なる型の配列の共有は、内部のデータ構造を十分に考慮して使用しないと思わぬ結果となることがあります。十分に注意してください。
◆配列を文字型の配列として共有する場合は、文字型の配列の部分が一意表現になることを保証するようにプログラミングする必要があります。
■変数の種類
変数は、それが有効な範囲やその保存時間により次の4つに分類できます。
種類 | 有効範囲 | 保存期間 | 内容 |
---|---|---|---|
局所変数 | その手続きの中だけ | その手続きが終了するまで | LOCAL文で宣言する |
大域変数 | そのウィンドウに属するすべての手続き | そのウィンドウを閉じるまで | VARIABLE文で宣言する |
共有変数 | 超漢字Vで動いているすべての手続き | 超漢字Vを終了するまで | $GV[0]~$GV[49]だけ |
保存変数 | そのウィンドウに属するすべての手続き | 超漢字Vを終了しても、そのウィンドウをもう一度開けば、値が残っている | $SV[0]~$SV[49]だけ |
局所変数
“局所変数”は、その手続きの中だけで使用できる変数です。LOCAL文で宣言します。初期値として0が設定されます。
例:LOCAL X:C,Y:B,A:C[100]
# 文字型変数X、バイト型変数Y、100個の要素からなる文字型配列A
大域変数
“大域変数”は、1つのウィンドウに属するすべての手続きから使用できる変数です。VARIABLE文で宣言します。初期値として0が設定されます。そのウィンドウを閉じるまで有効です。
例:VARIABLE X:C,Y:B,A:C[100]
# 文字型変数X、バイト型変数Y、100個の要素からなる文字型配列A
共有変数
“共有変数”は、超漢字Vで動作しているすべてのマイクロスクリプトのプログラムで共有している変数です。異なるウィンドウに属するスクリプト間で同期を取ったり、データを受け渡したりするときに使用します。
共有変数は、利用者が名前づけすることはできません。あらかじめ共有変数として超漢字Vで宣言されている$GV[0]~$GV[49]の50個の配列要素だけが使えます。超漢字Vの共有メモリの機能を使って実現されており、電源を切るまで有効です。浮動小数値やシンボル値を格納することはできません。
†超漢字Vで動作しているすべてのマイクロスクリプトで共有されるため、同じ共有変数を別の目的で使用されないように、十分注意する必要があります。
保存変数
“保存変数”は、セグメントなどと同様に実身の中に値が保存されます。ウィンドウを閉じて電源を切ってしまっても、もう一度そのウィンドウを開けば、スクリプトの中から前に設定した値を取り出すことができます。有効範囲は、大域変数と同様に1つのウィンドウに属するすべての手続きです。
保存変数は、利用者が名前づけすることはできません。1つのウィンドウごとに、あらかじめ保存変数として超漢字Vで宣言されている$SV[0]~$SV[49]の50個の配列要素が使えます。浮動小数値やシンボル値を格納することはできません。
■システム変数
以下の変数は、“システム変数”として超漢字Vで定義済みです。超漢字Vのさまざまな状態を参照したり、設定するために使用します。システム変数と同じ名前を使って、LOCAL文、VARIABLE文で大域変数を宣言することはできません。
以下の一覧で、“R”のついたシステム変数は、値の参照だけが可能です。値を設定することはできません。PDは、ポインティングデバイス(たとえばマウス)の意味です。
$ERR R:直前の文のエラー状態
0:正常
1:タイムアウトした
2:BREAKした
16:デバイス操作エラー
17:デバイス操作パラメータエラー
32:ファイル操作エラー
33:ファイル操作パラメータエラー
48:プロセス操作エラー
208:シリアルポート操作エラー(ポート番号不正)
209:シリアルポート操作エラー(初期化パラメータ不正)
210:シリアルポート操作エラー(他で使用中:ビジー)
211:シリアルポート操作エラー(初期化エラー)
212:シリアルポート操作エラー(送信エラー)
$PID R:自分のプロセスID
$PPID R:自分の親プロセスID
$WID R:自分のウィンドウID
$PWID RW:自分の親ウィンドウID
$TID R:自分の手続き番号
$MMASK メッセージマスク
MRECV文で受信するメッセージを指定するためのメッセージタイプ(0~7)に対応したビットマスク。初期値は0。
指定したタイプのメッセージは最新の16個までMRECV文で受信するまで保存される。
この変数を設定することにより、対象外となったタイプの受信済みのメッセージはクリアされる。
0x01:タイプ0に対応
0x02:タイプ1に対応
0x04:タイプ2に対応
0x08:タイプ3に対応
0x10:タイプ4に対応
0x20:タイプ5に対応
0x40:タイプ6に対応
0x80:タイプ7に対応
$CNT REPEAT文の繰り返し回数(最初は0)
REPEAT文のループ外で参照した場合は常に0となる。
設定することにより繰り返し回数を強制的に変更することが可能。
$PDX R:PDの現在のX座標値
$PDY R:PDの現在のY座標値
ウィンドウの作業エリアの左上隅を(0,0)としたときの値。
$KSTAT R:最後にキーを押したときのメタキー/PD状態
$KSTATはキーが押されてから最初に使用した時のみ正しい値が得られる。2回目からは0となる。また、起動しているマイクロスクリプトのウィンドウが最前面にない場合は常に0となる。
以下のビット対応で状態を示す。
0x01:PDのメインボタン(1:ON)
0x02:PDのサブ(メニュー)ボタン(1:ON)
0x04:英語入力モード(1:英語、0:かな)
0x08:英大文字(カタカナ)入力モード(1:大文字)
0x10:左シフトキー(1:ON)
0x20:右シフトキー(1:ON)
0x40:拡張キー(1:ON)
0x80:命令キー(1:ON)
$PDB R:PDの現在のボタン状態
0:オフ 1:オン
$PDX,$PDY,$PDBを“;”で区切って1段落の中で参照した場合は、それらの値が同時点のものであることが保証される。
逆に、PDが動いている場合、$PDXと$PDYを別の行で参照すると、正しい座標値が得られない可能性がある。
$PDS PDの形状(0~15)
0:選択指
1:修正選択指
2:移動手
3:移動手(縦方向)
4:移動手(横方向)
5:握り
6:握り(縦方向)
7:握り(横方向)
8:変形手
9:変形手(縦方向)
10:変形手(横方向)
11:つまみ
12:つまみ(縦方向)
13:つまみ(横方向)
14:湯のみ(待ち状態)
15:プリメニュー
-1を設定すると、PDの表示を行わないようになる。
スクリーンセーバとして実行中のときは-10となる。
$KEY R:最後に押したキーに対応する文字コード
$KEYは、キーが押されてから最初に使用した時のみ正しい値が得られる。2回目からは0となる。起動しているマイクロスクリプトのウィンドウが最前面にない場合は常に0となる(文字コードに関してはEVENT文参照)。
$METAKEY R:メタキー状態
以下のビット対応で状態を示す。
0x0001:PDのメインボタン状態
0x0002:PDのサブボタン状態
0x0004:英語ロックキー状態
0x0008:カタカナロックキー状態
0x0010:左シフトキー状態
0x0020:右シフトキー状態
0x0040:拡張シフトキー状態
0x0080:命令シフトキー状態
0x0100:左シフト簡易ロック
0x0200:右シフト簡易ロック
0x0400:拡張簡易ロック
0x0800:命令簡易ロック
0x1000:左シフト一時シフト
0x2000:右シフト一時シフト
0x4000:拡張一時シフト
0x8000:命令一時シフト
$KMODE かな漢字変換入力モード
かな漢字変換入力モードで、キー以外のイベントが発生した場合に、未確定文字列を確定するかどうかを示す。
初期値は0。通常はそのままとするが、PDボタンのプレスイベントにより起動される処理で、EVENT文でキーイベントを発生してかな漢字変換を行うような場合は、1に設定しておく必要がある。
0:確定する。1:確定しない。
$DATE R:現在の日付
年(85~152)×10000+月(1~12)×100+日(1~31)の値
年は西暦(1985~2052)-1900を表わす。
$TIME R:現在の時刻
時(0~23)×10000+分(0~59)×100+秒(0~59)の値
$MSEC R:現在のミリ秒単位のカウンタ値。
0~2147483647(0x7FFFFFFF)の範囲の値。絶対時刻ではないので、通常は差を取って使用する。
$SYSTM R:システム時刻
1985年1月1日00:00:00GMTからの現在までの秒数を示す。
$GV[n] 共有変数 n=0~49
マシン本体で動いているすべてのスクリプトから使用できる整数型の変数。
$SV[n] 保存変数 n=0~49
ウィンドウを閉じて電源を切ってしまっても保存される性質を持つ整数型の変数。
$RSCNT R:RSGETN文で入力したデータ(バイト)数
$RS[n] R:RSGETN文で入力したデータ(バイト)列
0~255の範囲の値。
n=0~$RSCNT-1(最大511)で参照する。$RSCNTが512以上の場合でも$RS[ ]には最新の512個のデータのみがセットされる。
$WDW R:現在開いているウィンドウの領域の幅を示す
$WDH R:現在開いているウィンドウの領域の高さを示す
$WDX R:画面全体の左上を原点(0,0)とした場合の、現在開いているウィンドウの左上の点のX座標値を示す
$WDY R:画面全体の左上を原点(0,0)とした場合の、現在開いているウィンドウの左上の点のY座標値を示す
$WACT R:自ウィンドウのアクティブ状態
0:ウィンドウはアクティブ状態でない
1:ウィンドウはアクティブ状態である
$SCRW R:画面全体の幅を示す
$SCRH R:画面全体の高さ示す
$RAND R:疑似乱数
0~65535の範囲の疑似乱数を戻す。
$VERS R:マイクロスクリプトのバージョンを示す。
$DSKINS ディスク挿入時の自動接続の可否
0:自動接続しない。
1:自動接続する(自ウィンドウがアクティブ状態のときのみ有効)。
-1:ディスク挿入イベントは保留される(スクリーンセーバ用)。
この後$DSKINSを参照すると:
0:ディスク挿入はなかった
1:ディスク挿入があった
マイクロスクリプト終了時にディスク挿入イベントは復帰される。
$CPULOAD R:自プロセスの負荷(0~100)
■セグメント名
セグメント名はセグメントを指定するために使用します。
セグメント名は、図形データとして定義するセグメント名と、プログラム中で新規に定義するセグメント名の2種類があります。図形データとして定義したセグメントを“固定セグメント”と呼び、SEGMENT文で定義したセグメントを“可変セグメント”と呼びます。
◆セグメント名には、言語指定コードを含めることができます。
∇固定セグメントの利用
SET文で変数にセグメントを代入し、その変数をほかの文で使うことにより、セグメントを参照することができます。
プログラム例
VERSION 3
VARIABLE X:S[2]
PROLOGUE
SET X[0]=セグメント1
SET X[1]=セグメント2
APPEAR X[0] # “APPEAR セグメント1”が実行される
CALL 下手から登場(X[1]) # “CALL下手から登場(セグメント2)”が実行される
END
セグメント名は、CALL文、EXECUTE文の引数として使用することもできます。
プログラム例
VERSION 3
PROLOGUE
CALL 表示(セグメント)
END
ACTION 表示(Seg:S)
APPEAR Seg
# “APPEAR セグメント”が実行される
END
∇可変セグメントの定義
SEGMENT文により可変セグメント、または可変セグメントの配列を定義します。
定義した可変セグメントの内容は空であり、SETSEG文やCOPYSEG文により既存のセグメントの内容を設定して使用します。
■手続き名
手続き名は、ACTION文、MACTION文、FUNC文を使って、手続きを定義するときに指定します。手続き名は手続きを指定するために使用します。
◆手続き名には、言語指定コードを含めることができます。
SET文で変数に手続きを代入し、その変数をCALL文やEXECUTE文の引数に使うことにより、その手続きへ制御を移すことができます。
†C言語における関数へのポインタのような使い方に相当します。
プログラム例
VERSION 3
VARIABLE X:S
PROLOGUE
SET X=手続き
CALL X
END
ACTION 手続き
MESG "手続き実行"
END
出力
手続き実行
■状態名
∇セグメントの状態名
“セグメント名”の直後に“.”と“セグメントの状態名”を付加することにより、セグメントの状態を知ることができます。
例:セグメント.X
セグメント状態名には、値を設定することはできません。参照するだけです。
変数にセグメント名、手続き名が代入されている場合、その変数に対しても状態名を適用することができます。変数にセグメント名や手続き名が設定されていない時は不正値となります。
例:
VARIABLE A:S,B:S[10]
SET A=セグメント1
SET B[5]=セグメント2
A.〈状態名〉 # セグメント1.〈状態名〉
B[5].〈状態名〉 # セグメント2.〈状態名〉
S 表示状態
0:未表示 1:表示中
PID 仮身セグメントから実行したプロセスのプロセスID
仮身セグメントでないときは不正値となる。
-1 :実行されていない
≧0 :プロセスID
X セグメントの左上隅の点のX座標値
Y セグメントの左上隅の点のY座標値
ウィンドウの作業エリアの左上隅を(0,0)としたときの値。
X0 セグメントの元の位置の左上隅の点のX座標値
現在のウィンドウ内の左上の点を(0,0)とした相対座標値。
Y0 セグメントの元の位置の左上隅の点のY座標値
現在のウィンドウ内の左上の点を(0,0)とした相対座標値。
W セグメントの幅
H セグメントの高さ
V 文字セグメント内の文字列を数値変換した値。
文字セグメントでない場合は不正値となる。文字列の先頭から順に、数値として解釈できなくなるまで見ていく。文字列の先頭が数値として解釈できない場合は、0になる。
例:
123ABC → 123
ABC → 0
TL 文字セグメント内に入っている現在の文字数
文字セグメントでない場合は不正値となる。
例: Test.TL
TX 文字セグメント内に入っている現在の文字列を示す文字型の配列
文字セグメントでない場合は不正値となる。
文字型の配列変数と同様に扱うことができるが、直接設定することはできない。
例: Test.TX[n]
nは、0~Test.TLの範囲となる。n=Test.TLの時の値は文字列の終端を示す0となる。
付せん/セグメントの代替表記として以下の内容が含まれることがあります(原則としてVERSION 3以降で取得可能)。
0xffff hhhh wwww
文字拡大/縮小指定付せんに当たる内容(この内容に限り、VERSION 1 から取得可能)。
hhhh は高さの倍率、wwww は幅の倍率(ただし、全角・半角の切り替え以外では保証されない)。
3 文字分固定。
0xfffe cccc nnnn nnnn ....
フォント指定付せんに当たる内容。
cccc は フォントクラス。
nnnn nnnn .... は 12 文字分存在し、フォントファミリ名を意味する。
14 文字分固定。
0xfffd aaaa
フォント属性指定付せんに当たる内容。
aaaa はフォント属性。
2 文字分固定。
0xfffc ssss
文字サイズ指定付せんに当たる内容。
ssss は文字サイズ。
2 文字分固定。
0xfffb cccc cccc
文字カラー指定付せんに当たる内容。
cccc cccc は文字色(CPUエンディアンに注意)。
3 文字分固定。
0xfffa aaaa
文字修飾指定付せんに当たる内容。ただし、現状では下線指定しか対応していない。
aaaa はかかる文字修飾の種別。
2 文字分固定。
∇文字セグメント特有な状態名
以下は文字セグメントの特有な状態名で、文字セグメントでない場合はすべて不正値となります。それぞれ、値を設定することができます。
†VERSION 3 が指定されたときのみ、文字セグメントに設定された書体が実行時に反映されます。VERSION 3 が指定されていないときは、基本図形編集で設定した書体の指定は無視されます。
†これらの設定は、文字セグメント全体に対して行われます。
TFCOL 文字セグメントの現在の文字色
TBCOL 文字セグメントの現在の背景色
色はRGBそれぞれの要素を0x00(0)~0xFF(255)の範囲で並べた以下の数値として表現する。
色の表現:0xRRGGBB
例:
0x000000 黒
0xFFFFFF 白
0xFF0000 赤
0x00FF00 緑
0x0000FF 青
TSTYL 文字セグメントの現在の文字修飾
0 修飾なし
1 下線
2 網掛け
0x800 比例ピッチ
†比例ピッチは、VERSION 3を指定した場合にのみ適用されます。
0x1000 文字階調表示をする
†文字セグメントの背景色が混色パターンの場合は、文字階調表示にはなりません。その他、基本図形編集における文字階調表示と同じ制限があります。
0x2000 書記方向を縦書きにする
†縦書きは、VERSION 3を指定した場合にのみ適用されます。
TSIZE 文字セグメントの現在の文字サイズ(ドット数)
TCGAP 文字セグメントの現在の文字間隔(ドット数)
TLGAP 文字セグメントの現在の行間隔(ドット数)
TFONT 文字セグメントの現在の書体名(12文字の文字型の配列)
文字型の配列変数と同様に扱うことができる。
例:
SET Text.TFONT[:]="設定する書体名"
VARIABLE 書体名:C[13]
SET 書体名[:]=Text.TFONT[:]
∇手続きの状態名
“手続き名”の直後に“.”と“手続きの状態名”を付加することにより、手続きの状態を知ることができます。
手続きは“手続き名”以外に“手続き番号”によっても参照できます。整数値を持つ変数に対して手続きの状態名を指定した場合は、その値の手続き番号を持つ手続きの状態が得られます。
手続き名で指定した場合、その手続きが複数実行されているときは、そのいずれかの手続きの状態が得られます。
手続き状態名には、値を設定することはできません。
S 実行状態
0:実行なし 1:実行中 2:待ち状態
例:
SET A=1
A.〈状態名〉 # 手続き番号=1の手続きの状態