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