# waitrecv

文字列を待つ。

    waitrecv <sub-string> <len> <pos>

## 解説

ある条件を満たす 1 つの文字列がホストから送られてくるか、タイムアウトが発生するまで、 MACRO を停止させる。

その条件とは、文字列の長さが <len> 文字で、文字列がその <pos> 文字目（1オリジン）から始まる副文字列 <sub-string> を含んでいるということ。
コマンドは <len> バイトの文字列を受信するたびに、条件を満たすかどうかを確認する。
例えば、<sub-string> が "def"、<len> が 9 、<pos> が 4 のとき、文字列 "abcdefghi" は条件を満たす。

もし条件を満たす文字列が送られてきたら、システム変数 inputstr に保存される。

システム変数 timeout か mtimeout が 0 より大きい場合、<timeout>.<mtimeout> 秒の時間がすぎるとタイムアウトが発生する。タイムアウトの値が 0 以下の場合は、タイムアウトは発生しない。

これらのコマンドの実行結果はシステム変数 result に格納される。変数 result の値の意味は以下の通り。

値 | 意味
--- | ---
-1 | <pos> 文字目から始まる <sub-string> を含む文字列が来て、inputstr に保存された。しかし文字列の長さは、タイムアウトのために <len> 文字より短い。
0 | タイムアウト。条件を満たす文字列は送られてこなかった。
1 | 条件をみたす文字列が来て、 inputstr に保存された。

## 例

    ; Every byte is shown in hexadecimal
    setdebug 2
    waitrecv '43 0D'  2 1
    setdebug 0

    ; In this mode non printable characters are shown as control keys e.g. ^A = 1, ^B = 2 etc.
    setdebug 1
    waitrecv 'C^M' 2 1
    setdebug 0

    ; Normal mode
    setdebug 0
    waitrecv 'C'#13 2 1

## 参照

- setdebug
- wait