<function>
<fname>ms_do</fname>
<prototype>

int
ms_do(int (*func)(), void * arg, char str[])


</prototype>
<explanation>

func、argをキューにつなぎ、この関数の実行が終わるのをまつ。終わったら、funcの戻り値を返す。

</explanation>
<return>

</return>
<details>

たとえば、
<pre>
V_DIKSPLAY*
v_func(int a int b)
{
V_DISPLAY * c;
	.....実行.....
	return c
}
</pre>
というようなX処理関数みたいなのがあって、これをmsequence 対応にするために
は、
<pre>
typedef struct arg {
	int a;
	int b;
	V_DISPLAY * c;
}:

/*　BODY */
int
_v_func(struct arg * ag)
{
	..... 実行 .....
	ag->c = c;
	return 0;
}

/* GRUE */
V_DISPLAY *
v_func(int a,int b)
{
struct arg ag;
	ag.a = a;
	ag.b = b;
	ms_do(_v_func,&ag,"v_func");
	return ag.c;
}
</pre>
というように書き直します。

これだと、v_loop の実行が問題となりますが、v_loop の中身のfor 文によるループ
をGRUE のなかで行い、イベントをとってくる部分のみをmsequence にまかせる。

</details>
</function>