diff --git a/modules/NIGHTDLL/nt_msg.c b/modules/NIGHTDLL/nt_msg.c index 9e44fb0..5e626fb 100644 --- a/modules/NIGHTDLL/nt_msg.c +++ b/modules/NIGHTDLL/nt_msg.c @@ -7,7 +7,6 @@ #include "portab.h" #include "system.h" -#include "sdl_core.h" #include "utfsjis.h" #include "ags.h" #include "nact.h" @@ -236,7 +235,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB char mbuf[20]; int cw, delta, wcnt; - wcnt = sdl_getTicks(); + wcnt = sys_get_ticks(); mbuf[0] = '\0'; msg = get_char(msg, mbuf, sizeof(mbuf) -1); @@ -267,7 +266,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB needupdate = false; // keywait - delta = sdl_getTicks() - wcnt; + delta = sys_get_ticks() - wcnt; if (delta < wSpeed) { if (sys_keywait(wSpeed - delta, KEYWAIT_NONCANCELABLE)) { @@ -311,14 +310,14 @@ static int ntmsg_keywait() { night.waitkey = -1; while (night.waitkey == -1 && !nact->is_quit) { - int st = sdl_getTicks(); + int st = sys_get_ticks(); int interval = 25; if (!night.zhiding) { interval = night.sp[SPNO_MSG_KEYANIM]->u.anime.interval; hakanim(i++); } - sys_keywait(interval - (sdl_getTicks() - st), KEYWAIT_NONCANCELABLE); + sys_keywait(interval - (sys_get_ticks() - st), KEYWAIT_NONCANCELABLE); } night.waittype = KEYWAIT_NONE; diff --git a/modules/NIGHTDLL/sprite_eupdate.c b/modules/NIGHTDLL/sprite_eupdate.c index ea52cb5..a006c89 100644 --- a/modules/NIGHTDLL/sprite_eupdate.c +++ b/modules/NIGHTDLL/sprite_eupdate.c @@ -30,7 +30,6 @@ #include "sprite.h" #include "gfx.h" #include "effect.h" -#include "sdl_core.h" /* 効果つき画面更新 @@ -55,12 +54,12 @@ void nt_sp_eupdate(int no, int time, int cancel) { struct effect *eff = effect_init(&rect, NULL, 0, 0, gfx_getDIB(), 0, 0, type); int sttime, curtime; - sttime = curtime = sdl_getTicks(); + sttime = curtime = sys_get_ticks(); int edtime = curtime + time; - while ((curtime = sdl_getTicks()) < edtime) { + while ((curtime = sys_get_ticks()) < edtime) { effect_step(eff, (float)(curtime - sttime) / (edtime - sttime)); - int rest = 16 - (sdl_getTicks() - curtime); + int rest = 16 - (sys_get_ticks() - curtime); int key = sys_keywait(rest, cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE); if (cancel && key) break; diff --git a/modules/NightDemonDemo/NightDemonDemo.c b/modules/NightDemonDemo/NightDemonDemo.c index ed831c5..9a0e1c8 100644 --- a/modules/NightDemonDemo/NightDemonDemo.c +++ b/modules/NightDemonDemo/NightDemonDemo.c @@ -33,7 +33,6 @@ #include "alk.h" #include "music.h" #include "gfx.h" -#include "sdl_core.h" #include "input.h" #include "cg.h" #include "jpeg.h" @@ -53,9 +52,9 @@ static void ndd_run(int demonum) { if (mus) musbgm_play(mus, 0, 100, 0); - uint32_t start = sdl_getTicks(); + uint32_t start = sys_get_ticks(); while (!nact->is_quit) { - int i = (sdl_getTicks() - start) / (1000 / FPS); + int i = (sys_get_ticks() - start) / (1000 / FPS); if (i >= alk->datanum) break; @@ -70,7 +69,7 @@ static void ndd_run(int demonum) { WARNING("Cannot decode CG %d in %s", i, alk_path); } - int wait_ms = (i + 1) * (1000 / FPS) - (sdl_getTicks() - start); + int wait_ms = (i + 1) * (1000 / FPS) - (sys_get_ticks() - start); if (wait_ms > 0) { if (sys_keywait(wait_ms, KEYWAIT_CANCELABLE)) break; diff --git a/modules/SACT/screen_quake.c b/modules/SACT/screen_quake.c index abd3dec..e584fb5 100644 --- a/modules/SACT/screen_quake.c +++ b/modules/SACT/screen_quake.c @@ -34,7 +34,6 @@ #include "input.h" #include "sact.h" #include "sprite.h" -#include "sdl_core.h" #include "randMT.h" #define M_PIf ((float)M_PI) @@ -78,9 +77,9 @@ void sp_quake_screen(int type, int p1, int p2, int time, int cancel) { if (type > 1) return; - sttime = sdl_getTicks(); + sttime = sys_get_ticks(); edtime = time * 10 + sttime; - while ((curtime = sdl_getTicks()) < edtime) { + while ((curtime = sys_get_ticks()) < edtime) { int adjx, adjy; cb[type]((float)(curtime - sttime)/(edtime - sttime), p1, p2, &adjx, &adjy); diff --git a/modules/SACT/sprite_anime.c b/modules/SACT/sprite_anime.c index f9d3f2e..658de2a 100644 --- a/modules/SACT/sprite_anime.c +++ b/modules/SACT/sprite_anime.c @@ -28,7 +28,6 @@ #include "portab.h" #include "system.h" #include "ags.h" -#include "sdl_core.h" #include "sact.h" #include "sprite.h" @@ -44,7 +43,7 @@ static int eventCB_ANIM(sprite_t *sp, agsevent_t *e) { if (e->type != AGSEVENT_TIMER) return 0; // 現在時刻の取得 - now = sdl_getTicks(); + now = sys_get_ticks(); // 指定時間までスキップ if ((now - sp->u.anime.starttime) < sp->u.anime.interval) return 0; @@ -85,7 +84,7 @@ void sp_anime_setup(sprite_t *sp) { int n = 0; sp->u.anime.interval = 500; // デフォルトの間隔 0.5秒 - sp->u.anime.starttime = sdl_getTicks(); // 開始時刻 + sp->u.anime.starttime = sys_get_ticks(); // 開始時刻 sp->u.anime.tick = 0; // カウンタ初期化 // アニメパターンはいくつあるか diff --git a/modules/SACT/sprite_eupdate.c b/modules/SACT/sprite_eupdate.c index dcd65f3..7d5156e 100644 --- a/modules/SACT/sprite_eupdate.c +++ b/modules/SACT/sprite_eupdate.c @@ -31,7 +31,6 @@ #include "sprite.h" #include "gfx.h" #include "effect.h" -#include "sdl_core.h" /* 効果つき画面更新 @@ -56,12 +55,12 @@ void sp_eupdate(int type, int time, int cancel) { struct effect *eff = effect_init(&rect, NULL, 0, 0, gfx_getDIB(), 0, 0, effect); int sttime, curtime; - sttime = curtime = sdl_getTicks(); + sttime = curtime = sys_get_ticks(); int edtime = curtime + time * 10; - while ((curtime = sdl_getTicks()) < edtime) { + while ((curtime = sys_get_ticks()) < edtime) { effect_step(eff, (float)(curtime - sttime) / (edtime - sttime)); - int rest = 16 - (sdl_getTicks() - curtime); + int rest = 16 - (sys_get_ticks() - curtime); int key = sys_keywait(rest, cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE); if (cancel && key) break; diff --git a/modules/SACT/sprite_event.c b/modules/SACT/sprite_event.c index 16d1ae2..5003adf 100644 --- a/modules/SACT/sprite_event.c +++ b/modules/SACT/sprite_event.c @@ -30,7 +30,6 @@ #include "portab.h" #include "system.h" -#include "sdl_core.h" #include "menu.h" #include "input.h" #include "nact.h" @@ -213,7 +212,7 @@ static void cb_waitkey_simple(agsevent_t *e) { switch (e->type) { case AGSEVENT_KEY_PRESS: if (e->code == KEY_Z) { - cur = sdl_getTicks(); + cur = sys_get_ticks(); if (!sact.zhiding) { slist_foreach(sact.sp_zhide, cb_defocused_zkey, &update); sact.zhiding = true; @@ -243,7 +242,7 @@ static void cb_waitkey_simple(agsevent_t *e) { case AGSEVENT_KEY_RELEASE: switch(e->code) { case KEY_Z: - cur = sdl_getTicks(); + cur = sys_get_ticks(); if (500 < (cur - sact.zofftime) || !sact.zdooff) { slist_foreach(sact.sp_zhide, cb_focused_zkey, &update); sact.zhiding = false; diff --git a/modules/SACT/sprite_keywait.c b/modules/SACT/sprite_keywait.c index f008416..ff44e64 100644 --- a/modules/SACT/sprite_keywait.c +++ b/modules/SACT/sprite_keywait.c @@ -29,7 +29,6 @@ #include "portab.h" #include "system.h" #include "list.h" -#include "sdl_core.h" #include "ags.h" #include "nact.h" #include "input.h" @@ -67,7 +66,7 @@ static void hidesprite(sprite_t *sp) { スプライトがドロップされた時の各種処理を含む */ static bool waitcond(int endtime) { - int curtime = sdl_getTicks(); + int curtime = sys_get_ticks(); if (curtime >= endtime) return true; if (sact.dropped) { @@ -144,7 +143,7 @@ void sp_keywait(int *vOK, int *vRND, int *vD01, int *vD02, int *vD03, int timeou } // 終了時間の計算 - curtime = sdl_getTicks(); + curtime = sys_get_ticks(); endtime = timeout < 0 ? INT_MAX : (curtime + timeout * 10); // スプライトキー待ちメイン diff --git a/modules/SACT/sprite_move.c b/modules/SACT/sprite_move.c index 03360e0..e5c9d10 100644 --- a/modules/SACT/sprite_move.c +++ b/modules/SACT/sprite_move.c @@ -32,7 +32,6 @@ #include "nact.h" #include "sact.h" #include "sprite.h" -#include "sdl_core.h" /* @@ -161,14 +160,14 @@ void spev_move_waitend(sprite_t *sp, int dx, int dy, int time) { sp->move.time = 0; sact.movelist = slist_append(sact.movelist, sp); - sact.movestarttime = sdl_getTicks(); + sact.movestarttime = sys_get_ticks(); slist_foreach(sact.movelist, spev_move_setup, NULL); slist_free(sact.movelist); sact.movelist = NULL; while (sp->move.moving) { nact->callback(); - sdl_wait_vsync(); + sys_wait_vsync(); } } @@ -187,7 +186,7 @@ void spev_wait4moving_sp() { while (sp->move.moving) { nact->callback(); - sdl_wait_vsync(); + sys_wait_vsync(); } } } diff --git a/modules/SACT/sprite_msg.c b/modules/SACT/sprite_msg.c index 6973d5e..6dd89ed 100644 --- a/modules/SACT/sprite_msg.c +++ b/modules/SACT/sprite_msg.c @@ -29,7 +29,6 @@ #include "portab.h" #include "system.h" -#include "sdl_core.h" #include "ags.h" #include "nact.h" #include "input.h" @@ -268,7 +267,7 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF char mbuf[20], rbuf[20]; int cw, delta, wcnt; - wcnt = sdl_getTicks(); + wcnt = sys_get_ticks(); mbuf[0] = rbuf[0] = '\0'; msg = get_char(msg, mbuf, rbuf, sizeof(mbuf) -1); @@ -316,7 +315,7 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF needupdate = false; // keywait - delta = sdl_getTicks() - wcnt; + delta = sys_get_ticks() - wcnt; if (delta < wSpeed) { if (sys_keywait(wSpeed - delta, KEYWAIT_NONCANCELABLE)) { @@ -420,7 +419,7 @@ int smsg_keywait(int wNum1, int wNum2, int msglen) { sact.waitkey = -1; while (sact.waitkey == -1 && !nact->is_quit) { - int st = sdl_getTicks(); + int st = sys_get_ticks(); int interval = 25; // アニメパターンがある場合、その更新 @@ -434,7 +433,7 @@ int smsg_keywait(int wNum1, int wNum2, int msglen) { update_mark(minfo[j].sp, minfo[j].cg); i++; } - sys_keywait(interval - (sdl_getTicks() - st), KEYWAIT_NONCANCELABLE); + sys_keywait(interval - (sys_get_ticks() - st), KEYWAIT_NONCANCELABLE); } sact.waittype = KEYWAIT_NONE; diff --git a/modules/SACT/sprite_quake.c b/modules/SACT/sprite_quake.c index e304b4b..3aa86a9 100644 --- a/modules/SACT/sprite_quake.c +++ b/modules/SACT/sprite_quake.c @@ -31,7 +31,6 @@ #include "input.h" #include "sact.h" #include "sprite.h" -#include "sdl_core.h" #include "randMT.h" /* @@ -49,9 +48,9 @@ void sp_quake_sprite(int wType, int wAmplitudeX, int wAmplitudeY, int wCount, in int i = 0, key; SList *node; - edtime = wCount * 10 + sdl_getTicks(); + edtime = wCount * 10 + sys_get_ticks(); - while ((curtime = sdl_getTicks()) < edtime) { + while ((curtime = sys_get_ticks()) < edtime) { if (wType == 0) { // 全てのスプライトを同じように動かす int adjx = (int)(genrand() * wAmplitudeX/2); int adjy = (int)(genrand() * wAmplitudeY/2); diff --git a/modules/SACT/sprite_tevent.c b/modules/SACT/sprite_tevent.c index a803567..5b3b196 100644 --- a/modules/SACT/sprite_tevent.c +++ b/modules/SACT/sprite_tevent.c @@ -33,7 +33,6 @@ #include "nact.h" #include "sact.h" #include "sprite.h" -#include "sdl_core.h" /* @@ -63,7 +62,7 @@ static void tevent_callback(agsevent_t *e) { int update = 0; // SP_MOVE の同期移動のためのカウンタの読み込み - sact.movecurtime = sdl_getTicks(); + sact.movecurtime = sys_get_ticks(); for (node = sact.teventlisteners; node; node = node->next) { sprite_t *sp = (sprite_t *)node->data; diff --git a/modules/SACT/sprite_update.c b/modules/SACT/sprite_update.c index 96161b3..eef2e5b 100644 --- a/modules/SACT/sprite_update.c +++ b/modules/SACT/sprite_update.c @@ -28,7 +28,6 @@ #include "portab.h" #include "system.h" -#include "sdl_core.h" #include "ags.h" #include "sact.h" #include "sprite.h" @@ -92,7 +91,7 @@ void sp_update_all(bool syncscreen) { // スプライト移動がある場合は移動開始 if (sact.movelist) { // 移動開始時間を合わせる - sact.movestarttime = sdl_getTicks(); + sact.movestarttime = sys_get_ticks(); slist_foreach(sact.movelist, spev_move_setup, NULL); slist_free(sact.movelist); sact.movelist = NULL; diff --git a/modules/ShGraph/ShGraph.c b/modules/ShGraph/ShGraph.c index 90a6ca9..0a2ef5a 100644 --- a/modules/ShGraph/ShGraph.c +++ b/modules/ShGraph/ShGraph.c @@ -36,7 +36,6 @@ #include "nact.h" #include "ags.h" #include "music.h" -#include "sdl_core.h" #include "hacks.h" #define SLOT 40 @@ -451,7 +450,7 @@ static void PlayAnimeData() { dib = ags_getDIB(); for (loop = 0; loop < p1; loop++) { - int cnt = sdl_getTicks(); + int cnt = sys_get_ticks(); is_backcopied = false; for (i = 0; i < SLOT; i++) { @@ -528,9 +527,9 @@ static void PlayAnimeData() { if (is_backcopied && !SDL_RectEmpty(&maprect)) ags_updateArea(maprect.x, maprect.y, maprect.w, maprect.h); - int now = sdl_getTicks(); + int now = sys_get_ticks(); if (now - cnt < interval) { - sdl_sleep(interval - (now-cnt)); + sys_sleep(interval - (now-cnt)); } } } diff --git a/modules/ShPort/ShPort.c b/modules/ShPort/ShPort.c index 12c2902..6169ab2 100644 --- a/modules/ShPort/ShPort.c +++ b/modules/ShPort/ShPort.c @@ -35,7 +35,6 @@ #include "system.h" #include "xsystem35.h" #include "modules.h" -#include "sdl_core.h" #include "input.h" #include "menu.h" @@ -54,7 +53,7 @@ static void OutputMessageBox(void) { /* 0 */ char *title_utf8 = toUTF8(svar_get(title)); char *msg_utf8 = toUTF8(svar_get(msg)); - sdl_showMessageBox(MESSAGEBOX_INFO, title_utf8, msg_utf8); + sys_show_message_box(MESSAGEBOX_INFO, title_utf8, msg_utf8); free(title_utf8); free(msg_utf8); diff --git a/modules/tDemo/tDemo.c b/modules/tDemo/tDemo.c index c0024d9..3863699 100644 --- a/modules/tDemo/tDemo.c +++ b/modules/tDemo/tDemo.c @@ -31,7 +31,6 @@ #include "input.h" #include "bgm.h" #include "gfx.h" -#include "sdl_core.h" #include "cg.h" #include "jpeg.h" @@ -73,9 +72,9 @@ static void Run() { musbgm_play(TDEMO_MUSIC_NO, 0, 100, 0); - uint32_t start = sdl_getTicks(); + uint32_t start = sys_get_ticks(); while (!nact->is_quit) { - int i = (sdl_getTicks() - start) / (1000 / FPS); + int i = (sys_get_ticks() - start) / (1000 / FPS); if (i >= alk->datanum) break; @@ -90,7 +89,7 @@ static void Run() { WARNING("Cannot decode CG %d", i); } - int wait_ms = (i + 1) * (1000 / FPS) - (sdl_getTicks() - start); + int wait_ms = (i + 1) * (1000 / FPS) - (sys_get_ticks() - start); if (wait_ms > 0) { if (sys_keywait(wait_ms, KEYWAIT_CANCELABLE)) break; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06cdc1c..a21377b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,6 +89,7 @@ target_sources(xsystem35 PRIVATE sdl_cursor.c sdl_event.c selection.c + system.c texthook.c variable.c vsp.c diff --git a/src/ags.c b/src/ags.c index b02e78a..5f007e9 100644 --- a/src/ags.c +++ b/src/ags.c @@ -599,10 +599,10 @@ void ags_alpha_setPixel(int x, int y, int w, int h, uint8_t *b) { void ags_runEffect(int duration_ms, bool cancelable, ags_EffectStepFunc step, void *arg) { unsigned wflags = cancelable ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE; - int start = sdl_getTicks(); - for (int t = 0; t < duration_ms; t = sdl_getTicks() - start) { + int start = sys_get_ticks(); + for (int t = 0; t < duration_ms; t = sys_get_ticks() - start) { step(arg, (float)t / duration_ms); - int key = sys_keywait(start + t + 16 - sdl_getTicks(), wflags); + int key = sys_keywait(start + t + 16 - sys_get_ticks(), wflags); if (cancelable && key) { nact->waitcancel_key = key; break; @@ -724,7 +724,7 @@ void ags_setCursorLocation(int x, int y, bool is_dibgeo, bool for_selection) { // navigation. sdl_setCursorInternalLocation(x, y); EM_ASM({ xsystem35.shell.showMouseMoveEffect($0, $1); }, x, y); - sdl_sleep(cursor_move_time); + sys_sleep(cursor_move_time); } #else if (nact->ags.mouse_warp_enabled) { @@ -736,12 +736,12 @@ void ags_setCursorLocation(int x, int y, bool is_dibgeo, bool for_selection) { int xi = ((dx*i*i*i) >> 9) - ((3*dx*i*i)>> 6) + ((3*dx*i) >> 3) + p.x; int yi = ((dy*i*i*i) >> 9) - ((3*dy*i*i)>> 6) + ((3*dy*i) >> 3) + p.y; sdl_setCursorLocation(xi, yi); - sdl_sleep(cursor_move_time / 7); + sys_sleep(cursor_move_time / 7); } sdl_setCursorLocation(x, y); } else if (!for_selection) { sdl_setCursorInternalLocation(x, y); - sdl_sleep(cursor_move_time); + sys_sleep(cursor_move_time); } #endif } diff --git a/src/bgm.emscripten.c b/src/bgm.emscripten.c index c835062..486868f 100644 --- a/src/bgm.emscripten.c +++ b/src/bgm.emscripten.c @@ -24,7 +24,7 @@ #include "nact.h" #include "bgm.h" #include "bgi.h" -#include "sdl_core.h" +#include "system.h" bool musbgm_init(DRIFILETYPE type, int base_no) { if (type == DRIFILE_BGM) @@ -84,6 +84,6 @@ void musbgm_wait(int no, int timeout) { for (int i = 0; i * 16 < timeout * 10; i++) { if (!musbgm_isplaying(no)) break; - sdl_wait_vsync(); + sys_wait_vsync(); } } diff --git a/src/cdrom.emscripten.c b/src/cdrom.emscripten.c index 435e7fb..bdaba61 100644 --- a/src/cdrom.emscripten.c +++ b/src/cdrom.emscripten.c @@ -24,6 +24,7 @@ #include "portab.h" #include "cdrom.h" #include "scheduler.h" +#include "system.h" static bool cdrom_init(char *playlist) { return true; diff --git a/src/cmd2F.c b/src/cmd2F.c index 2fd7384..0825da7 100644 --- a/src/cmd2F.c +++ b/src/cmd2F.c @@ -39,7 +39,6 @@ #include "hankaku.h" #include "ags.h" #include "gfx.h" -#include "sdl_core.h" #include "ald_manager.h" #include "LittleEndian.h" #include "hacks.h" @@ -944,7 +943,7 @@ void commands2F5A() { char *t1; t1 = toUTF8(sText); - sdl_showMessageBox(MESSAGEBOX_INFO, nact->game_title_utf8, t1); + sys_show_message_box(MESSAGEBOX_INFO, nact->game_title_utf8, t1); free(t1); TRACE("strMessageBox %s:", sText); @@ -955,7 +954,7 @@ void commands2F5B() { char *t1; t1 = toUTF8(svar_get(eNum)); - sdl_showMessageBox(MESSAGEBOX_INFO, nact->game_title_utf8, t1); + sys_show_message_box(MESSAGEBOX_INFO, nact->game_title_utf8, t1); free(t1); TRACE("strMessageBoxStr %d:", eNum); diff --git a/src/cmdv.c b/src/cmdv.c index ffe235e..4805027 100644 --- a/src/cmdv.c +++ b/src/cmdv.c @@ -27,7 +27,6 @@ #include #include #include "portab.h" -#include "sdl_core.h" #include "scheduler.h" #include "xsystem35.h" #include "scenario.h" @@ -760,7 +759,7 @@ void commandVA() { /* from Panyo */ /* 開始 (p3=コマ数,0:無限(開始位置==終了位置のとき))*/ inAnimation = true; VAcmd[p1].elaspCut = 0; - VAcmd[p1].startTime = sdl_getTicks(); + VAcmd[p1].startTime = sys_get_ticks(); VAcmd[p1].totalCut = p3; if (p3 == 0) { @@ -784,7 +783,7 @@ void commandVA() { /* from Panyo */ /* キー抜け無し ,p3=0は指定不可 */ while(VAcmd[p1].state == VA_RUNNING) { va_animationAlone(p1); - sdl_sleep(10); + sys_sleep(10); } va_drawUnit(p1); va_updateUnit(p1); @@ -794,7 +793,7 @@ void commandVA() { /* from Panyo */ VAcmd[p1].rewrite = true; while(VAcmd[p1].state == VA_RUNNING) { va_animationAlone(p1); - sdl_sleep(10); + sys_sleep(10); key = sys_getInputInfo(); if (key != 0) { sysVar[0] = key; @@ -1003,7 +1002,7 @@ static void va_animationAlone(int i) { static void va_update() { bool proceeding = false; int i; - int curTime = sdl_getTicks(); + int curTime = sys_get_ticks(); for (i = 0; i < VACMD_MAX; i++) { if (VAcmd[i].state == VA_RUNNING) { diff --git a/src/cmdy.c b/src/cmdy.c index 7817a20..2b23ea5 100644 --- a/src/cmdy.c +++ b/src/cmdy.c @@ -31,7 +31,6 @@ #include "input.h" #include "scenario.h" #include "cmd_check.h" -#include "sdl_core.h" #include "scheduler.h" #include "music_cdrom.h" #include "hacks.h" @@ -75,7 +74,7 @@ static void rance4_Y3_IM_hack() { int button_pressed = sys_getInputInfo(); if (!button_pressed) { - sdl_wait_vsync(); + sys_wait_vsync(); count = 0; } commandIM(); diff --git a/src/cmdz.c b/src/cmdz.c index 9d225a6..67c66bd 100644 --- a/src/cmdz.c +++ b/src/cmdz.c @@ -28,7 +28,6 @@ #include "portab.h" #include "xsystem35.h" #include "gfx.h" -#include "sdl_core.h" #include "scheduler.h" #include "ags.h" #include "scenario.h" @@ -45,13 +44,13 @@ static struct { } counters[257]; // [0] for ZT 1-5, [1..256] for ZT 10-11 static void reset_counter(int num, int divisor, int offset) { - counters[num].base = sdl_getTicks() - offset; + counters[num].base = sys_get_ticks() - offset; counters[num].divisor = divisor; } static uint32_t get_counter(int num) { scheduler_on_event(SCHEDULER_EVENT_TIMER_CHECK); - return sdl_getTicks() - counters[num].base; + return sys_get_ticks() - counters[num].base; } void commandZC() { diff --git a/src/dri.c b/src/dri.c index 1cb668a..3114046 100644 --- a/src/dri.c +++ b/src/dri.c @@ -29,7 +29,6 @@ #include "system.h" #include "LittleEndian.h" #include "dri.h" -#include "sdl_core.h" static bool read_index(int volume, drifiles *d, FILE *fp) { fseek(fp, 0L, SEEK_END); @@ -142,7 +141,7 @@ static void warn_missing_ald(drifiles *d, int no) { } else { snprintf(msgbuf, sizeof(msgbuf), "Cannot read resource #%d.", no); } - sdl_showMessageBox(MESSAGEBOX_WARNING, "xsystem35", msgbuf); + sys_show_message_box(MESSAGEBOX_WARNING, "xsystem35", msgbuf); } dridata *dri_getdata(drifiles *d, int no) { diff --git a/src/ecopy.c b/src/ecopy.c index 44aa42b..48041c8 100644 --- a/src/ecopy.c +++ b/src/ecopy.c @@ -28,7 +28,6 @@ #include "portab.h" #include "gfx.h" -#include "sdl_core.h" #include "input.h" #include "ags.h" #include "system.h" @@ -40,7 +39,7 @@ static bool ecp_cancel; #define EC_WAIT \ if ((key |= sys_getInputInfo()) && ecp_cancel) break; \ do { \ - int wait_ms = cnt - sdl_getTicks(); \ + int wait_ms = cnt - sys_get_ticks(); \ if (wait_ms >= 16) \ key = sys_keywait(wait_ms, ecp_cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE); \ } while (0) @@ -61,7 +60,7 @@ static int eCopyArea5(int sx, int sy, int w, int h, int dx, int dy, int opt) { static int hx[16]={ 0,32,16,48, 0,32,16,48,16,48, 0,32,16,48, 0,32}; static int hy[16]={ 0, 0,16,16,32,32,48,48, 0, 0,16,16,32,32,48,48}; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 16; i++) { cnt += waitcnt; for (y = 0; y < (h -63); y += 64) { @@ -82,7 +81,7 @@ static int eCopyArea6(int dx, int dy, int w, int h, int opt) { int i, x, y, key = 0, cnt; int waitcnt = opt == 0 ? 30 : opt; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 7; i++) { cnt += waitcnt; for (x = 0; x < (w -63); x += 64) { @@ -106,7 +105,7 @@ static int eCopyArea9(int sx, int sy, int w, int h, int dx, int dy, int opt) { static int hintY[4] = {0,8,8,0}; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 4; i++) { cnt+=waitcnt; for (y = 0; y < h -15; y+=16) { @@ -126,7 +125,7 @@ static int eCopyArea16(int dx, int dy, int w, int h, int opt) { int i, x, key = 0, cnt; int waitcnt = opt == 0 ? 30 : opt; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 8; i++) { cnt += waitcnt; for (x = 0; x < (w -15); x += 16) { @@ -144,7 +143,7 @@ static int eCopyArea17(int dx, int dy, int w, int h, int opt) { int waitcnt = opt == 0 ? 30 : opt; #define E17X 18 - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < E17X; i++) { cnt += waitcnt; for (y = 0; y < (h - E17X + 1); y += E17X) { @@ -160,7 +159,7 @@ static int eCopyArea22(int sx, int sy, int w, int h, int dx, int dy, int opt) { int i, x, y, key = 0, cnt; int waitcnt = opt == 0 ? 80 : opt; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 2; i++) { cnt += waitcnt; for (y = 0; y < (h -3); y+=4) { @@ -185,7 +184,7 @@ static int eCopyArea23(int sx, int sy, int w, int h, int dx, int dy, int opt) { static int hintX[4] = {0,2,2,0}; static int hintY[4] = {0,2,0,2}; - cnt = sdl_getTicks(); + cnt = sys_get_ticks(); for (i = 0; i < 4; i++) { cnt += waitcnt; for (y = 0; y < (h -3); y+=4) { diff --git a/src/gfx_draw.c b/src/gfx_draw.c index 45b0428..243c0af 100644 --- a/src/gfx_draw.c +++ b/src/gfx_draw.c @@ -36,8 +36,6 @@ #include "system.h" #include "gfx.h" #include "gfx_private.h" -#include "sdl_core.h" -#include "scheduler.h" #include "font.h" #include "ags.h" #include "image.h" @@ -66,43 +64,6 @@ void gfx_updateScreen(void) { gfx_dirty = false; } -uint32_t sdl_getTicks(void) { - return SDL_GetTicks(); -} - -void sdl_sleep(int msec) { - gfx_updateScreen(); - dbg_onsleep(); -#ifdef __EMSCRIPTEN__ - emscripten_sleep(msec); -#else - SDL_Delay(msec); -#endif - scheduler_on_event(SCHEDULER_EVENT_SLEEP); -} - -#ifdef __EMSCRIPTEN__ -EM_JS(void, wait_vsync, (void), { - // We need a `return` here for JSPI support (ASYNCIFY=2). - return Asyncify.handleSleep(function(wakeUp) { - window.requestAnimationFrame(function() { - wakeUp(); - }); - }); -}); -#endif - -void sdl_wait_vsync() { - gfx_updateScreen(); - dbg_onsleep(); -#ifdef __EMSCRIPTEN__ - wait_vsync(); -#else - SDL_Delay(16); -#endif - scheduler_on_event(SCHEDULER_EVENT_SLEEP); -} - /* off-screen の指定領域を Main Window へ転送 */ void gfx_updateArea(SDL_Rect *rect, SDL_Point *dst) { SDL_Rect sw = {0, 0, main_surface->w, main_surface->h}; diff --git a/src/gfx_video.c b/src/gfx_video.c index b5a8263..9c0b026 100644 --- a/src/gfx_video.c +++ b/src/gfx_video.c @@ -247,16 +247,6 @@ void gfx_setWindowSize(int w, int h) { #endif } -void sdl_showMessageBox(enum messagebox_type type, const char* title_utf8, const char* message_utf8) { - uint32_t flags = 0; - switch (type) { - case MESSAGEBOX_ERROR: flags = SDL_MESSAGEBOX_ERROR; break; - case MESSAGEBOX_WARNING: flags = SDL_MESSAGEBOX_WARNING; break; - case MESSAGEBOX_INFO: flags = SDL_MESSAGEBOX_INFORMATION; break; - } - SDL_ShowSimpleMessageBox(flags, title_utf8, message_utf8, gfx_window); -} - void gfx_setIntegerScaling(bool enable) { SDL_RenderSetIntegerScale(gfx_renderer, enable); } diff --git a/src/input.c b/src/input.c index e50bad6..801878b 100644 --- a/src/input.c +++ b/src/input.c @@ -100,14 +100,14 @@ int sys_keywait(int msec, unsigned flags) { } int key=0, n; - int end = msec == INT_MAX ? INT_MAX : sdl_getTicks() + msec; + int end = msec == INT_MAX ? INT_MAX : sys_get_ticks() + msec; while (!nact->is_quit && !((flags & KEYWAIT_SKIPPABLE) && msgskip_isSkipping()) && - (n = end - sdl_getTicks()) > 0) { + (n = end - sys_get_ticks()) > 0) { if (n <= 16) - sdl_sleep(n); + sys_sleep(n); else - sdl_wait_vsync(); + sys_wait_vsync(); nact->callback(); key = sys_getInputInfo(); cancel_yield(); // We just yielded! @@ -122,7 +122,7 @@ void sys_hit_any_key() { if (msgskip_isSkipping()) { if (msgskip_getFlags() & MSGSKIP_STOP_ON_CLICK && sys_getInputInfo()) msgskip_activate(false); - sdl_sleep(30); + sys_sleep(30); return; } diff --git a/src/message.c b/src/message.c index b8dac1d..f4334d7 100644 --- a/src/message.c +++ b/src/message.c @@ -29,7 +29,6 @@ #include "portab.h" #include "windowframe.h" -#include "sdl_core.h" #include "xsystem35.h" #include "message.h" #include "variable.h" @@ -140,7 +139,7 @@ void msg_putMessage(const char *m) { ags_updateArea(drawn.x, drawn.y, drawn.w, drawn.h); break; } - sdl_sleep(nact->messagewait_time * 10); + sys_sleep(nact->messagewait_time * 10); nact->callback(); } } else { diff --git a/src/pcm.sdlmixer.c b/src/pcm.sdlmixer.c index 4aaf4ae..70a115a 100644 --- a/src/pcm.sdlmixer.c +++ b/src/pcm.sdlmixer.c @@ -34,7 +34,6 @@ #include "dri.h" #include "music_pcm.h" #include "music_private.h" -#include "sdl_core.h" #include "nact.h" #include "LittleEndian.h" #include "mmap.h" @@ -237,7 +236,7 @@ bool muspcm_start(int slot, int loop) { if (Mix_PlayChannel(slot, slots[slot].chunk, loop - 1) < 0) return false; - slots[slot].start_time = sdl_getTicks(); + slots[slot].start_time = sys_get_ticks(); return true; } @@ -277,7 +276,7 @@ int muspcm_getpos(int slot) { if (!Mix_Playing(slot)) return 0; - int pos = sdl_getTicks() - slots[slot].start_time; + int pos = sys_get_ticks() - slots[slot].start_time; if (pos == 0) pos = 1; // because 0 means "not playing" diff --git a/src/scheduler.c b/src/scheduler.c index 37992af..62fad03 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -18,7 +18,6 @@ */ #include "scheduler.h" #include "scenario.h" -#include "sdl_core.h" #include "nact.h" #include "hacks.h" @@ -87,13 +86,13 @@ void scheduler_on_event(enum scheduler_event event) { void scheduler_yield(void) { switch (game_id) { case GAME_AGAKE: - sdl_sleep(6); // The slot game runs in a 6ms-cycle loop. + sys_sleep(6); // The slot game runs in a 6ms-cycle loop. break; case GAME_PERSIOM: - sdl_sleep(10); // The slot game runs in a 10ms-cycle loop. + sys_sleep(10); // The slot game runs in a 10ms-cycle loop. break; default: - sdl_wait_vsync(); + sys_wait_vsync(); break; } } diff --git a/src/sdl_core.h b/src/sdl_core.h index 54e496b..09fd7d1 100644 --- a/src/sdl_core.h +++ b/src/sdl_core.h @@ -46,15 +46,6 @@ extern void sdl_setAutoRepeat(bool enable); extern SDL_Point sdl_translateMouseCoords(int x, int y); /* misc */ -enum messagebox_type { - MESSAGEBOX_ERROR, - MESSAGEBOX_WARNING, - MESSAGEBOX_INFO, -}; -extern uint32_t sdl_getTicks(void); -extern void sdl_sleep(int msec); -extern void sdl_wait_vsync(); -extern void sdl_showMessageBox(enum messagebox_type type, const char* title_utf8, const char* message_utf8); extern bool sdl_inputString(struct inputstring_param *); extern void sdl_post_debugger_command(void *data); extern void sdl_handle_event(SDL_Event *e); diff --git a/src/sdl_input.c b/src/sdl_input.c index ac9f469..6098609 100644 --- a/src/sdl_input.c +++ b/src/sdl_input.c @@ -26,6 +26,7 @@ #include "gfx_private.h" #include "menu.h" #include "nact.h" +#include "system.h" #define XMARGIN 3 #define YMARGIN 2 @@ -158,7 +159,7 @@ bool sdl_inputString(INPUTSTRING_PARAM *p) { while (!input->done) { sdl_getKeyInfo(); // message pump nact->callback(); - sdl_wait_vsync(); + sys_wait_vsync(); } SDL_StopTextInput(); sdl_custom_event_handler = NULL; diff --git a/src/system.c b/src/system.c new file mode 100644 index 0000000..1c447ce --- /dev/null +++ b/src/system.c @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2025 kichikuou + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * +*/ + +#include "system.h" +#include +#include "debugger.h" +#include "gfx.h" +#include "gfx_private.h" +#include "scheduler.h" +#include "sdl_core.h" + +#ifdef __ANDROID__ +#include +#endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#ifdef DEBUG +#define DEBUGLEVEL 2 +#else +#define DEBUGLEVEL 0 +#endif /* DEBUG */ + +static int debuglv = DEBUGLEVEL; + +void sys_set_debug_level(int level) { + debuglv = level; +} + +void sys_message(int lv, char *format, ...) { + if (debuglv < lv) + return; + + va_list args; + va_start(args, format); + +#ifdef __ANDROID__ + const int prio_table[] = { + ANDROID_LOG_FATAL, + ANDROID_LOG_ERROR, + ANDROID_LOG_WARN, + ANDROID_LOG_INFO, + ANDROID_LOG_INFO, + ANDROID_LOG_VERBOSE, + }; + int prio = prio_table[min(lv, 5)]; + __android_log_vprint(prio, "xsystem35", format, args); +#else + if (!dbg_console_vprintf(lv, format, args)) + vfprintf(stderr, format, args); +#endif + va_end(args); +} + +void sys_error(char *format, ...) { + char buf[512]; + va_list args; + + va_start(args, format); + vsnprintf(buf, sizeof buf, format, args); + va_end(args); + sys_show_message_box(MESSAGEBOX_ERROR, "xsystem35", buf); + + sys35_remove(); + exit(1); +} + +void sys_exit(int code) { + sys35_remove(); +#ifdef __EMSCRIPTEN__ + EM_ASM( xsystem35.shell.quit(); ); + sys_sleep(1000000000); +#else + exit(code); +#endif +} + +uint32_t sys_get_ticks(void) { + return SDL_GetTicks(); +} + +void sys_sleep(int msec) { + gfx_updateScreen(); + dbg_onsleep(); +#ifdef __EMSCRIPTEN__ + emscripten_sleep(msec); +#else + SDL_Delay(msec); +#endif + scheduler_on_event(SCHEDULER_EVENT_SLEEP); +} + +#ifdef __EMSCRIPTEN__ +EM_JS(void, wait_vsync, (void), { + // We need a `return` here for JSPI support (ASYNCIFY=2). + return Asyncify.handleSleep(function(wakeUp) { + window.requestAnimationFrame(function() { + wakeUp(); + }); + }); +}); +#endif + +void sys_wait_vsync(void) { + gfx_updateScreen(); + dbg_onsleep(); +#ifdef __EMSCRIPTEN__ + wait_vsync(); +#else + SDL_Delay(16); +#endif + scheduler_on_event(SCHEDULER_EVENT_SLEEP); +} + +void sys_show_message_box(enum messagebox_type type, const char* title_utf8, const char* message_utf8) { + uint32_t flags = 0; + switch (type) { + case MESSAGEBOX_ERROR: flags = SDL_MESSAGEBOX_ERROR; break; + case MESSAGEBOX_WARNING: flags = SDL_MESSAGEBOX_WARNING; break; + case MESSAGEBOX_INFO: flags = SDL_MESSAGEBOX_INFORMATION; break; + } + SDL_ShowSimpleMessageBox(flags, title_utf8, message_utf8, gfx_window); +} diff --git a/src/system.h b/src/system.h index b625453..3b7ad2e 100644 --- a/src/system.h +++ b/src/system.h @@ -24,12 +24,25 @@ #ifndef __SYSTEM__ #define __SYSTEM__ +#include #include "config.h" -/* should define in somewhere */ -extern void sys_error(char *format, ...); /* show nessafe and exit system */ -extern void sys_exit(int code); /* exit system with code */ -extern void sys_message(int lv, char *format, ...); /* show various message */ +void sys_error(char *format, ...); /* show message and exit system */ +void sys_exit(int code); /* exit system with code */ +void sys_message(int lv, char *format, ...); /* show various message */ + +uint32_t sys_get_ticks(void); +void sys_sleep(int msec); +void sys_wait_vsync(void); + +enum messagebox_type { + MESSAGEBOX_ERROR, + MESSAGEBOX_WARNING, + MESSAGEBOX_INFO, +}; +void sys_show_message_box(enum messagebox_type type, const char* title_utf8, const char* message_utf8); + +void sys35_remove(void); /* DEBUGLEVEL @@ -38,12 +51,7 @@ extern void sys_message(int lv, char *format, ...); /* show various message */ 1: warning only(output to terminal) 2+: more message [devel relase default] */ - -#ifdef DEBUG -#define DEBUGLEVEL 2 -#else -#define DEBUGLEVEL 0 -#endif /* DEBUG */ +void sys_set_debug_level(int level); #define NOMEMERR() sys_error("Out of memory at %s()\n", __func__) diff --git a/src/win/menubar.c b/src/win/menubar.c index 9fa8b5e..749784e 100644 --- a/src/win/menubar.c +++ b/src/win/menubar.c @@ -57,7 +57,7 @@ static void saveScreenshot(void) { if (!GetSaveFileName(&ofn)) return; if (!save_screenshot(pathbuf)) { - sdl_showMessageBox(MESSAGEBOX_ERROR, "xsystem35", SDL_GetError()); + sys_show_message_box(MESSAGEBOX_ERROR, "xsystem35", SDL_GetError()); SDL_ClearError(); } } diff --git a/src/xsystem35.c b/src/xsystem35.c index 4e895ad..a2a17b7 100644 --- a/src/xsystem35.c +++ b/src/xsystem35.c @@ -43,10 +43,6 @@ #include #endif -#ifdef __ANDROID__ -#include -#endif - #ifdef _WIN32 #include "win/dialog.h" #endif @@ -78,14 +74,11 @@ static char *gameResourceFile = "xsystem35.gr"; static void sys35_usage(bool verbose); static void sys35_init(); -static void sys35_remove(); static void sys35_ParseOption(int *argc, char **argv); static void check_profile(); static const char *render_driver = NULL; -/* for debugging */ -static int debuglv = DEBUGLEVEL; enum { DEBUGGER_DISABLED, DEBUGGER_CUI, @@ -156,54 +149,6 @@ static void sys35_usage(bool verbose) { exit(1); } -void sys_message(int lv, char *format, ...) { - if (debuglv < lv) - return; - - va_list args; - va_start(args, format); - -#ifdef __ANDROID__ - const int prio_table[] = { - ANDROID_LOG_FATAL, - ANDROID_LOG_ERROR, - ANDROID_LOG_WARN, - ANDROID_LOG_INFO, - ANDROID_LOG_INFO, - ANDROID_LOG_VERBOSE, - }; - int prio = prio_table[min(lv, 5)]; - __android_log_vprint(prio, "xsystem35", format, args); -#else - if (!dbg_console_vprintf(lv, format, args)) - vfprintf(stderr, format, args); -#endif - va_end(args); -} - -void sys_error(char *format, ...) { - char buf[512]; - va_list args; - - va_start(args, format); - vsnprintf(buf, sizeof buf, format, args); - va_end(args); - sdl_showMessageBox(MESSAGEBOX_ERROR, "xsystem35", buf); - - sys35_remove(); - exit(1); -} - -void sys_exit(int code) { - sys35_remove(); -#ifdef __EMSCRIPTEN__ - EM_ASM( xsystem35.shell.quit(); ); - sdl_sleep(1000000000); -#else - exit(code); -#endif -} - static void sys35_init() { int i; @@ -229,7 +174,7 @@ static void sys35_init() { msgskip_init(nact->files.msgskip); } -static void sys35_remove() { +void sys35_remove(void) { dbg_quit(); mus_exit(); ags_remove(); @@ -337,7 +282,7 @@ static void sys35_ParseOption(int *argc, char **argv) { nact->ags.noimagecursor = true; } else if (0 == strcmp(argv[i], "-debuglv")) { if (argv[i + 1] != NULL) { - debuglv = argv[i + 1][0] - '0'; + sys_set_debug_level(argv[i + 1][0] - '0'); } } else if (0 == strcmp(argv[i], "-version")) { puts(VERSION); @@ -523,7 +468,7 @@ int main(int argc, char **argv) { if (!initGameResource(&nact->files, gameResourceFile, savedir)) { #ifdef _WIN32 - sdl_showMessageBox(MESSAGEBOX_ERROR, "xsystem35", "Cannot find scenario file (*SA.ALD)"); + sys_show_message_box(MESSAGEBOX_ERROR, "xsystem35", "Cannot find scenario file (*SA.ALD)"); exit(1); #else sys35_usage(true);