--- np2/x11/np2.c 2003/12/08 06:24:03 1.6 +++ np2/x11/np2.c 2011/01/15 16:01:52 1.32 @@ -1,3 +1,5 @@ +/* $Id: np2.c,v 1.32 2011/01/15 16:01:52 monaka Exp $ */ + /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -10,8 +12,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES @@ -31,12 +31,14 @@ #include "pccore.h" #include "dosio.h" #include "scrndraw.h" -#include "statsave.h" #include "timing.h" #include "toolkit.h" #include "kdispwin.h" #include "toolwin.h" +#include "viewer.h" +#include "debugwin.h" +#include "skbdwin.h" #include "commng.h" #include "joymng.h" @@ -45,6 +47,7 @@ #include "scrnmng.h" #include "soundmng.h" #include "sysmng.h" +#include "taskmng.h" NP2OSCFG np2oscfg = { @@ -58,19 +61,34 @@ NP2OSCFG np2oscfg = { 0, /* paddingy */ 0, /* NOWAIT */ - 2, /* DRAW_SKIP */ + 0, /* DRAW_SKIP */ 0, /* DISPCLK */ KEY_KEY106, /* KEYBOARD */ - 0, /* F12COPY */ + 0, /* F12KEY */ 0, /* MOUSE_SW */ + 0, /* JOYPAD1 */ 0, /* JOYPAD2 */ - { 0, 0, 0, 0 }, /* JOY1BTN */ + { 1, 2, 5, 6 }, /* JOY1BTN */ + { + { 0, 1 }, /* JOYAXISMAP[0] */ + { 0, 1 }, /* JOYAXISMAP[1] */ + }, + { + { 0, 1, 0xff, 0xff }, /* JOYBTNMAP[0] */ + { 0, 1, 0xff, 0xff }, /* JOYBTNMAP[1] */ + }, + { "", "" }, /* JOYDEV */ { COMPORT_MIDI, 0, 0x3e, 19200, "", "", "", "" }, /* mpu */ + { + { COMPORT_NONE, 0, 0x3e, 19200, "", "", "", "" },/* com1 */ + { COMPORT_NONE, 0, 0x3e, 19200, "", "", "", "" },/* com2 */ + { COMPORT_NONE, 0, 0x3e, 19200, "", "", "", "" },/* com3 */ + }, 0, /* confirm */ @@ -79,28 +97,27 @@ NP2OSCFG np2oscfg = { 0, /* statsave */ 0, /* toolwin */ 0, /* keydisp */ + 0, /* softkbd */ 0, /* hostdrv_write */ + 0, /* jastsnd */ 0, /* I286SAVE */ - SNDDRV_NODRV, /* snddrv */ - "", /* audiodev */ + SNDDRV_SDL, /* snddrv */ { "", "" }, /* MIDIDEV */ 0, /* MIDIWAIT */ MOUSE_RATIO_100, /* mouse_move_ratio */ -#if defined(USE_GTK) /* toolkit */ - "gtk", -#else - "qt", -#endif - MMXFLAG_DISABLE, /* disablemmx */ - FALSE, /* shared_pixmap */ + INTERP_NEAREST, /* drawinterp */ + 0, /* F11KEY */ + + FALSE, /* cfgreadonly */ }; -BOOL np2running = FALSE; +volatile sig_atomic_t np2running = 0; BYTE scrnmode = 0; +int ignore_fullscreen_mode = 0; UINT framecnt = 0; UINT waitcnt = 0; @@ -115,9 +132,23 @@ char bmpfilefolder[MAX_PATH]; char modulefile[MAX_PATH]; char statpath[MAX_PATH]; +char np2appname[MAX_PATH] = "np2"; +const char np2flagext[] = "s%02d"; +const char np2resumeext[] = "sav"; + +#ifndef FONTFACE +#define FONTFACE "-misc-fixed-%s-r-normal--%d-*-*-*-*-*-*-*" +#endif +char fontname[1024] = FONTFACE; + +#ifndef FONTNAME_DEFAULT +#define FONTNAME_DEFAULT "./default.ttf" +#endif +char fontfilename[MAX_PATH] = FONTNAME_DEFAULT; + char timidity_cfgfile_path[MAX_PATH]; -BOOL use_shared_pixmap; +int verbose = 0; UINT32 @@ -135,15 +166,17 @@ getstatfilename(char* path, const char* /* * default: - * e.g. resume: "/home/user_name/.np2/sav/sav" - * statpath: "/home/user_name/.np2/sav/s00" + * e.g. resume: "/home/user_name/.np2/sav/np2.sav" + * statpath: "/home/user_name/.np2/sav/np2.s00" + * config: "/home/user_name/.np2/np2rc" * * --config option: - * e.g. resume: "/config_file_path/sav" - * statpath: "/config_file_path/s00" + * e.g. resume: "/config_file_path/sav/np2.sav" + * statpath: "/config_file_path/sav/np2.s00" * config: "/config_file_path/config_file_name" */ file_cpyname(path, statpath, size); + file_catname(path, ".", size); file_catname(path, ext, size); } @@ -181,16 +214,18 @@ flagload(const char* ext, const char* ti int ret; int rv = 0; - UNUSED(title); - getstatfilename(path, ext, sizeof(path)); ret = statsave_check(path, buf, sizeof(buf)); - if (ret & (~NP2FLAG_DISKCHG)) { - fprintf(stderr, "Couldn't restart\n"); - rv = 1; - } else if ((!force) && (ret & NP2FLAG_DISKCHG)) { - fprintf(stderr, "Conflict\n"); + if (ret & (~STATFLAG_DISKCHG)) { + toolkit_msgbox(title, "Couldn't restart", + TK_MB_OK|TK_MB_ICON_ERROR); rv = 1; + } else if ((!force) && (ret & STATFLAG_DISKCHG)) { + ret = toolkit_msgbox(title, "Conflict!\nContinue?", + TK_MB_YESNO|TK_MB_ICON_QUESTION); + if (ret != TK_MB_YES) { + rv = 1; + } } if (rv == 0) { statsave_load(path); @@ -257,7 +292,10 @@ framereset(UINT cnt) framecnt = 0; scrnmng_dispclock(); kdispwin_draw((BYTE)cnt); + skbdwin_process(); + debugwin_process(); toolwin_draw((BYTE)cnt); + viewer_allreload(FALSE); if (np2oscfg.DISPCLK & 3) { if (sysmng_workclockrenewal()) { sysmng_updatecaption(3); @@ -273,7 +311,7 @@ processwait(UINT cnt) timing_setcount(0); framereset(cnt); } else { - usleep(1); + taskmng_sleep(1); } } @@ -281,10 +319,8 @@ int mainloop(void *p) { - UNUSED(p); - if (np2oscfg.NOWAIT) { - joy_flash(); + joymng_sync(); mousemng_callback(); pccore_exec(framecnt == 0); if (np2oscfg.DRAW_SKIP) { @@ -303,7 +339,7 @@ mainloop(void *p) } else if (np2oscfg.DRAW_SKIP) { /* frame skip */ if (framecnt < np2oscfg.DRAW_SKIP) { - joy_flash(); + joymng_sync(); mousemng_callback(); pccore_exec(framecnt == 0); framecnt++; @@ -314,7 +350,7 @@ mainloop(void *p) /* auto skip */ if (waitcnt == 0) { UINT cnt; - joy_flash(); + joymng_sync(); mousemng_callback(); pccore_exec(framecnt == 0); framecnt++; @@ -344,14 +380,19 @@ mainloop(void *p) return TRUE; } -#if defined(__GNUC__) && (defined(i386) || defined(__i386__)) int mmxflag; int havemmx(void) { +#if !defined(GCC_CPU_ARCH_IA32) + return 0; +#else /* GCC_CPU_ARCH_IA32 */ int rv; +#if defined(GCC_CPU_ARCH_AMD64) + rv = 1; +#else /* !GCC_CPU_ARCH_AMD64 */ asm volatile ( "pushf;" "popl %%eax;" @@ -372,7 +413,7 @@ havemmx(void) "andl $0x00800000, %0;" ".nocpuid:" : "=a" (rv)); - +#endif /* GCC_CPU_ARCH_AMD64 */ return rv; +#endif /* GCC_CPU_ARCH_IA32 */ } -#endif