int getsignalw()
{
int sig;
retry:
sig = getsignal();
if (sig == 0) {
lib_waitsignal(0x0001, 0, 0); /* シグナルがくるまでsleep */
goto retry;
}
return sig;
}/* "movec2.c" */
/* stack:4k malloc:2k */
#include <guigui00.h>
#define AUTO_MALLOC 0
/* シグナルボックス関係 */
#define REWIND_CODE 1
#define initsignalbox() lib_initsignalbox0_256(REWIND_CODE)
#define getsignalw() lib_getsig0w(lib_sigbox_256)
void OsaskMain()
{
struct LIB_WINDOW *window;
struct LIB_TEXTBOX *wintitle, *textbox;
int x, y, c;
/* ライブラリ初期化&シグナルボックス初期化 */
initsignalbox();
/* ウィンドウオープン */
window = lib_openwindow(AUTO_MALLOC, 0x0200, 20 * 8, 8 * 16);
wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 6, 1, 0, 0, window, 0x00c0, 0);
textbox = lib_opentextbox(0x0001, AUTO_MALLOC, 0, 20, 8, 0, 0, window, 0x00c0, 0);
lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "movec2");
/* シグナル定義 */
lib_definesignal1p0(3, 0x0100, 0x00ac, window, 4); /* カーソルキー(計4つ) */
lib_definesignal1p0(0, 0x0100, ' ', window, 8); /* スペースバー */
lib_definesignal0p0(0, 0, 0, 0);
/* まず表示 */
x = 9; y = 3; c = 11;
lib_putstring_ASCII(0x0000, x, y, textbox, c, 0, "O");
/* メインループ */
for (;;) {
int ox = x, oy = y, oc = c, sig;
sig = getsignalw();
if (sig == 4) { /* left */
if (x > 0)
x--;
}
if (sig == 5) { /* right */
if (x < 19)
x++;
}
if (sig == 6) { /* up */
if (y > 0)
y--;
}
if (sig == 7) { /* down */
if (y < 7)
y++;
}
if (sig == 8) { /* chagne */
c = (c + 1) & 0x0f;
}
/* 何らかの変化があれば表示し直す */
if (x != ox || y != oy || c != oc) {
lib_putstring_ASCII(0x0000, ox, oy, textbox, 0, 0, " ");
lib_putstring_ASCII(0x0000, x, y, textbox, c, 0, "O");
}
}
}/* シグナルボックス関係 */ #define REWIND_CODE 1 #define initsignalbox() lib_initsignalbox0_4k(REWIND_CODE) #define getsignalw() lib_getsig0w(lib_sigbox_4k) #define sig_ptr lib_sigptr_4k
int getparam()
{
int param = *sig_ptr++;
lib_waitsignal(0x0000, 1, 0);
return param;
} x = sig_ptr[0];
y = sig_ptr[1];
sig_ptr += 2;
lib_waitsignal(0x0000, 2, 0);void lib_initsignalbox0_256(int rewind)
{
static struct {
int rewind, dummy;
int *ptr;
int box[256 / 4]; /* ここが4kだったり64kだったりする */
} sigstr = {
0, 0, sigstr.box, { 0 }
};
static struct LIB_WORK lib_work256;
sigstr.rewind = rewind; /* lib_getsigが参照するので保存しておく */
lib_init_nm(&lib_work256);
lib_opensignalbox_nm(256, sigstr.box, 0, rewind);
}
/* sigstr.ptrがlib_sigptr_256, sigstr.boxがlib_sigbox_256 */(This host) = http://osask.net