--- np2/x11/main.c 2003/11/16 16:43:45 1.1 +++ np2/x11/main.c 2008/03/18 15:33:14 1.29 @@ -1,3 +1,5 @@ +/* $Id: main.c,v 1.29 2008/03/18 15:33:14 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 @@ -27,6 +27,7 @@ #include "compiler.h" +#include #include #include @@ -42,22 +43,21 @@ #include "timing.h" #include "toolkit.h" -#include "keydisp.h" +#include "kdispwin.h" #include "toolwin.h" +#include "viewer.h" +#include "debugwin.h" +#include "skbdwin.h" #include "commng.h" +#include "fontmng.h" #include "joymng.h" #include "kbdmng.h" #include "mousemng.h" #include "scrnmng.h" #include "soundmng.h" #include "sysmng.h" - - -/* - * resume - */ -static const char np2resumeext[] = "sav"; +#include "taskmng.h" /* @@ -104,7 +104,11 @@ static void usage(void) { - printf("Usage: %s [options] [[FD0 image] [[FD1 image] [[FD2 image] [FD3 image]]]]\n", progname); + printf("Usage: %s [options] [[FD1 image] [[FD2 image] [[FD3 image] [FD4 image]]]]\n\n", progname); + printf("options:\n"); + printf("\t--help [-h] : print this message\n"); + printf("\t--config [-c] : specify config file\n"); + printf("\t--timidity-config [-C] : specify timidity config file\n"); exit(1); } @@ -126,7 +130,7 @@ main(int argc, char *argv[]) toolkit_initialize(); toolkit_arginit(&argc, &argv); - while ((ch = getopt_long(argc, argv, "c:C:h", longopts, NULL)) != -1) { + while ((ch = getopt_long(argc, argv, "c:C:t:vh", longopts, NULL)) != -1) { switch (ch) { case 'c': if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { @@ -134,10 +138,6 @@ main(int argc, char *argv[]) exit(1); } milstr_ncpy(modulefile, optarg, sizeof(modulefile)); - - /* resume/statsave dir */ - file_cpyname(statpath, modulefile, sizeof(statpath)); - file_cutname(statpath); break; case 'C': @@ -149,6 +149,10 @@ main(int argc, char *argv[]) sizeof(timidity_cfgfile_path)); break; + case 'v': + verbose = 1; + break; + case 'h': case '?': default: @@ -164,7 +168,7 @@ main(int argc, char *argv[]) if (env) { /* base dir */ snprintf(modulefile, sizeof(modulefile), - "%s/.np2", env); + "%s/.%s", env, np2appname); if (stat(modulefile, &sb) < 0) { if (mkdir(modulefile, 0700) < 0) { perror(modulefile); @@ -176,24 +180,6 @@ main(int argc, char *argv[]) exit(1); } - /* font file */ - snprintf(np2cfg.fontfile, sizeof(np2cfg.fontfile), - "%s/font.bmp", modulefile); - - /* resume/statsave dir */ - file_cpyname(statpath, modulefile, sizeof(statpath)); - file_catname(statpath, "/sav/", sizeof(statpath)); - if (stat(statpath, &sb) < 0) { - if (mkdir(statpath, 0700) < 0) { - perror(statpath); - exit(1); - } - } else if (!S_ISDIR(sb.st_mode)) { - fprintf(stderr, "%s isn't directory.\n", - statpath); - exit(1); - } - /* config file */ milstr_ncat(modulefile, "/np2rc", sizeof(modulefile)); if ((stat(modulefile, &sb) >= 0) @@ -203,34 +189,67 @@ main(int argc, char *argv[]) } } } + if (modulefile[0] != '\0') { + /* font file */ + snprintf(np2cfg.fontfile, sizeof(np2cfg.fontfile), + "%s/font.bmp", modulefile); + + /* resume/statsave dir */ + file_cpyname(statpath, modulefile, sizeof(statpath)); + file_cutname(statpath); + file_catname(statpath, "/sav/", sizeof(statpath)); + if (stat(statpath, &sb) < 0) { + if (mkdir(statpath, 0700) < 0) { + perror(statpath); + exit(1); + } + } else if (!S_ISDIR(sb.st_mode)) { + fprintf(stderr, "%s isn't directory.\n", + statpath); + exit(1); + } + file_catname(statpath, np2appname, sizeof(statpath)); + } + if (timidity_cfgfile_path[0] == '\0') { + file_cpyname(timidity_cfgfile_path, modulefile, + sizeof(timidity_cfgfile_path)); + file_cutname(timidity_cfgfile_path); + file_catname(timidity_cfgfile_path, "timidity.cfg", + sizeof(timidity_cfgfile_path)); + } dosio_init(); file_setcd(modulefile); initload(); toolwin_readini(); - keydisp_readini(); + kdispwin_readini(); + skbdwin_readini(); rand_setseed((SINT32)time(NULL)); -#if defined(__GNUC__) && (defined(i386) || defined(__i386__)) mmxflag = havemmx() ? 0 : MMXFLAG_NOTSUPPORT; mmxflag += np2oscfg.disablemmx ? MMXFLAG_DISABLE : 0; -#endif TRACEINIT(); - keystat_reset(); + if (fontmng_init() != SUCCESS) + goto fontmng_failure; + + kdispwin_initialize(); + viewer_init(); + skbdwin_initialize(); toolkit_widget_create(); scrnmng_initialize(); kbdmng_init(); + keystat_initialize(); scrnmode = 0; if (np2cfg.RASTER) { scrnmode |= SCRNMODE_HIGHCOLOR; } if (scrnmng_create(scrnmode) != SUCCESS) - goto resource_cleanup; + goto scrnmng_failure; if (soundmng_initialize() == SUCCESS) { result = soundmng_pcmload(SOUND_PCMSEEK, file_getcd("fddseek.wav")); @@ -243,13 +262,14 @@ main(int argc, char *argv[]) result = soundmng_pcmload(SOUND_PCMSEEK1, file_getcd("fddseek1.wav")); if (!result) { - soundmng_pcmload(SOUND_PCMSEEK1, SYSRESPATH "/fddseek1.wav"); + result = soundmng_pcmload(SOUND_PCMSEEK1, SYSRESPATH "/fddseek1.wav"); } if (result) { soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); } } + joymng_initialize(); mousemng_initialize(); if (np2oscfg.MOUSE_SW) { mouse_running(MOUSE_ON); @@ -257,8 +277,8 @@ main(int argc, char *argv[]) commng_initialize(); sysmng_initialize(); + taskmng_initialize(); - joy_init(); pccore_init(); S98_init(); @@ -272,57 +292,74 @@ main(int argc, char *argv[]) toolwin_create(); } if (np2oscfg.keydisp) { - keydisp_create(); + kdispwin_create(); + } + if (np2oscfg.softkbd) { + skbdwin_create(); } } +#if defined(SUPPORT_RESUME) if (np2oscfg.resume) { flagload(np2resumeext, "Resume", FALSE); } +#endif sysmng_workclockreset(); drvmax = (argc < 4) ? argc : 4; for (i = 0; i < drvmax; i++) { - milstr_ncpy(diskdrv_fname[i],argv[i],sizeof(diskdrv_fname[0])); - diskdrv_delay[i] = 1; + diskdrv_readyfdd(i, argv[i], 0); } setup_signal(SIGINT, sighandler); setup_signal(SIGTERM, sighandler); - np2running = TRUE; toolkit_widget_mainloop(); - np2running = FALSE; rv = 0; - keydisp_destroy(); + kdispwin_destroy(); toolwin_destroy(); + skbdwin_destroy(); pccore_cfgupdate(); mouse_running(MOUSE_OFF); + joymng_deinitialize(); S98_trash(); +#if !defined(CPUCORE_IA32) if (np2oscfg.resume) { flagsave(np2resumeext); } else { flagdelete(np2resumeext); } +#endif pccore_term(); + debugwin_destroy(); soundmng_deinitialize(); scrnmng_destroy(); -resource_cleanup: - if (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG)) { +scrnmng_failure: + fontmng_terminate(); + +fontmng_failure: + if (!np2oscfg.cfgreadonly + && (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG))) { initsave(); toolwin_writeini(); - keydisp_writeini(); + kdispwin_writeini(); + skbdwin_writeini(); } + skbdwin_deinitialize(); + TRACETERM(); dosio_term(); + viewer_term(); + toolkit_terminate(); + return rv; }