| version 1.25, 2007/01/12 16:41:25 | version 1.37, 2011/12/29 13:38:24 | 
| Line 27 | Line 27 | 
 |  |  | 
 | #include <sys/stat.h> | #include <sys/stat.h> | 
 | #include <getopt.h> | #include <getopt.h> | 
 |  | #include <locale.h> | 
 | #include <signal.h> | #include <signal.h> | 
 |  |  | 
 |  | #if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) | 
 |  | #include <SDL.h> | 
 |  | #endif | 
 |  |  | 
 | #include "np2.h" | #include "np2.h" | 
 | #include "diskdrv.h" | #include "diskdrv.h" | 
 | #include "dosio.h" | #include "dosio.h" | 
| Line 42 | Line 47 | 
 | #include "toolkit.h" | #include "toolkit.h" | 
 |  |  | 
 | #include "kdispwin.h" | #include "kdispwin.h" | 
 | #include "sysmenu.h" |  | 
 | #include "toolwin.h" | #include "toolwin.h" | 
 | #include "viewer.h" | #include "viewer.h" | 
 | #include "debugwin.h" | #include "debugwin.h" | 
| Line 50 | Line 54 | 
 |  |  | 
 | #include "commng.h" | #include "commng.h" | 
 | #include "fontmng.h" | #include "fontmng.h" | 
 | #include "inputmng.h" |  | 
 | #include "joymng.h" | #include "joymng.h" | 
 | #include "kbdmng.h" | #include "kbdmng.h" | 
 | #include "mousemng.h" | #include "mousemng.h" | 
| Line 61 | Line 64 | 
 |  |  | 
 |  |  | 
 | /* | /* | 
 | * resume |  | 
 | */ |  | 
 | static const char np2resumeext[] = "sav"; |  | 
 |  |  | 
 |  |  | 
 | /* |  | 
 | * failure signale handler | * failure signale handler | 
 | */ | */ | 
 | typedef void sigfunc(int); | typedef void sigfunc(int); | 
| Line 88  static void | Line 85  static void | 
 | sighandler(int signo) | sighandler(int signo) | 
 | { | { | 
 |  |  | 
 | UNUSED(signo); |  | 
 |  |  | 
 | toolkit_widget_quit(); | toolkit_widget_quit(); | 
 | } | } | 
 |  |  | 
| Line 100  sighandler(int signo) | Line 95  sighandler(int signo) | 
 | static struct option longopts[] = { | static struct option longopts[] = { | 
 | { "config",             required_argument,      0,      'c' }, | { "config",             required_argument,      0,      'c' }, | 
 | { "timidity-config",    required_argument,      0,      'C' }, | { "timidity-config",    required_argument,      0,      'C' }, | 
 | #if defined(USE_SDL) || defined(USE_SYSMENU) |  | 
 | { "ttfont",             required_argument,      0,      't' }, |  | 
 | #endif |  | 
 | { "help",               no_argument,            0,      'h' }, | { "help",               no_argument,            0,      'h' }, | 
 | { 0,                    0,                      0,      0   }, | { 0,                    0,                      0,      0   }, | 
 | }; | }; | 
| Line 113  static void | Line 105  static void | 
 | usage(void) | usage(void) | 
 | { | { | 
 |  |  | 
| printf("Usage: %s [options] [[FD1 image] [[FD2 image] [[FD3 image] [FD4 image]]]]\n\n", progname); | g_printerr("Usage: %s [options] [[FD1 image] [[FD2 image] [[FD3 image] [FD4 image]]]]\n\n", progname); | 
| printf("options:\n"); | g_printerr("options:\n"); | 
| printf("\t--help            [-h]        : print this message\n"); | g_printerr("\t--help            [-h]        : print this message\n"); | 
| printf("\t--config          [-c] <file> : specify config file\n"); | g_printerr("\t--config          [-c] <file> : specify config file\n"); | 
| printf("\t--timidity-config [-C] <file> : specify timidity config file\n"); | g_printerr("\t--timidity-config [-C] <file> : specify timidity config file\n"); | 
| #if defined(USE_SDL) || defined(USE_SYSMENU) |  | 
| printf("\t--ttfont          [-t] <file> : specify TrueType font\n"); |  | 
| #endif |  | 
 | exit(1); | exit(1); | 
 | } | } | 
 |  |  | 
| Line 139  main(int argc, char *argv[]) | Line 128  main(int argc, char *argv[]) | 
 |  |  | 
 | progname = argv[0]; | progname = argv[0]; | 
 |  |  | 
 |  | setlocale(LC_ALL, ""); | 
 |  | (void) bindtextdomain(np2appname, NP2LOCALEDIR); | 
 |  | (void) bind_textdomain_codeset(np2appname, "UTF-8"); | 
 |  | (void) textdomain(np2appname); | 
 |  |  | 
 | toolkit_initialize(); | toolkit_initialize(); | 
 | toolkit_arginit(&argc, &argv); | toolkit_arginit(&argc, &argv); | 
 |  |  | 
| Line 146  main(int argc, char *argv[]) | Line 140  main(int argc, char *argv[]) | 
 | switch (ch) { | switch (ch) { | 
 | case 'c': | case 'c': | 
 | if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { | if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { | 
| fprintf(stderr, "Can't access %s.\n", optarg); | g_printerr("Can't access %s.\n", optarg); | 
 | exit(1); | exit(1); | 
 | } | } | 
 | milstr_ncpy(modulefile, optarg, sizeof(modulefile)); | milstr_ncpy(modulefile, optarg, sizeof(modulefile)); | 
 |  |  | 
 | /* resume/statsave dir */ |  | 
 | file_cpyname(statpath, modulefile, sizeof(statpath)); |  | 
 | file_cutname(statpath); |  | 
 | break; | break; | 
 |  |  | 
 | case 'C': | case 'C': | 
 | if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { | if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { | 
| fprintf(stderr, "Can't access %s.\n", optarg); | g_printerr("Can't access %s.\n", optarg); | 
 | exit(1); | exit(1); | 
 | } | } | 
 | milstr_ncpy(timidity_cfgfile_path, optarg, | milstr_ncpy(timidity_cfgfile_path, optarg, | 
 | sizeof(timidity_cfgfile_path)); | sizeof(timidity_cfgfile_path)); | 
 | break; | break; | 
 |  |  | 
 | case 't': |  | 
 | if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { |  | 
 | fprintf(stderr, "Can't access %s.\n", optarg); |  | 
 | exit(1); |  | 
 | } |  | 
 | milstr_ncpy(fontfilename, optarg, sizeof(fontfilename)); |  | 
 | break; |  | 
 |  |  | 
 | case 'v': | case 'v': | 
 | verbose = 1; | verbose = 1; | 
 | break; | break; | 
| Line 191  main(int argc, char *argv[]) | Line 173  main(int argc, char *argv[]) | 
 | char *env = getenv("HOME"); | char *env = getenv("HOME"); | 
 | if (env) { | if (env) { | 
 | /* base dir */ | /* base dir */ | 
| snprintf(modulefile, sizeof(modulefile), | g_snprintf(modulefile, sizeof(modulefile), | 
| "%s/.np2", env); | "%s/.%s", env, np2appname); | 
 | if (stat(modulefile, &sb) < 0) { | if (stat(modulefile, &sb) < 0) { | 
 | if (mkdir(modulefile, 0700) < 0) { | if (mkdir(modulefile, 0700) < 0) { | 
 | perror(modulefile); | perror(modulefile); | 
 | exit(1); | exit(1); | 
 | } | } | 
 | } else if (!S_ISDIR(sb.st_mode)) { | } else if (!S_ISDIR(sb.st_mode)) { | 
| fprintf(stderr, "%s isn't directory.\n", | g_printerr("%s isn't directory.\n", | 
 | modulefile); | modulefile); | 
 | exit(1); | 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 */ | /* config file */ | 
 | milstr_ncat(modulefile, "/np2rc", sizeof(modulefile)); | milstr_ncat(modulefile, "/np2rc", sizeof(modulefile)); | 
 | if ((stat(modulefile, &sb) >= 0) | if ((stat(modulefile, &sb) >= 0) | 
 | && !S_ISREG(sb.st_mode)) { | && !S_ISREG(sb.st_mode)) { | 
| fprintf(stderr, "%s isn't regular file.\n", | g_printerr("%s isn't regular file.\n", | 
 | modulefile); | modulefile); | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  | if (modulefile[0] != '\0') { | 
 |  | /* font file */ | 
 |  | file_cpyname(np2cfg.fontfile, modulefile, | 
 |  | sizeof(np2cfg.fontfile)); | 
 |  | file_cutname(np2cfg.fontfile); | 
 |  | file_setseparator(np2cfg.fontfile, sizeof(np2cfg.fontfile)); | 
 |  | file_catname(np2cfg.fontfile, "font.bmp", | 
 |  | sizeof(np2cfg.fontfile)); | 
 |  |  | 
 |  | /* 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)) { | 
 |  | g_printerr("%s isn't directory.\n", | 
 |  | statpath); | 
 |  | exit(1); | 
 |  | } | 
 |  | file_catname(statpath, np2appname, sizeof(statpath)); | 
 |  | } | 
 | if (timidity_cfgfile_path[0] == '\0') { | if (timidity_cfgfile_path[0] == '\0') { | 
 | file_cpyname(timidity_cfgfile_path, modulefile, | file_cpyname(timidity_cfgfile_path, modulefile, | 
 | sizeof(timidity_cfgfile_path)); | sizeof(timidity_cfgfile_path)); | 
| Line 248  main(int argc, char *argv[]) | Line 237  main(int argc, char *argv[]) | 
 |  |  | 
 | rand_setseed((SINT32)time(NULL)); | rand_setseed((SINT32)time(NULL)); | 
 |  |  | 
 | #if defined(GCC_CPU_ARCH_IA32) |  | 
 | mmxflag = havemmx() ? 0 : MMXFLAG_NOTSUPPORT; | mmxflag = havemmx() ? 0 : MMXFLAG_NOTSUPPORT; | 
 | mmxflag += np2oscfg.disablemmx ? MMXFLAG_DISABLE : 0; | mmxflag += np2oscfg.disablemmx ? MMXFLAG_DISABLE : 0; | 
 | #endif |  | 
 |  |  | 
 | TRACEINIT(); | TRACEINIT(); | 
 |  |  | 
 |  | #if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) | 
 |  | SDL_Init(0); | 
 |  | #endif | 
 |  |  | 
 | if (fontmng_init() != SUCCESS) | if (fontmng_init() != SUCCESS) | 
 | goto fontmng_failure; | goto fontmng_failure; | 
 |  |  | 
| Line 265  main(int argc, char *argv[]) | Line 256  main(int argc, char *argv[]) | 
 | toolkit_widget_create(); | toolkit_widget_create(); | 
 | scrnmng_initialize(); | scrnmng_initialize(); | 
 | kbdmng_init(); | kbdmng_init(); | 
 | inputmng_init(); |  | 
 | keystat_initialize(); | keystat_initialize(); | 
 |  |  | 
 | scrnmode = 0; | scrnmode = 0; | 
 | if (np2cfg.RASTER) { | if (np2cfg.RASTER) { | 
 | scrnmode |= SCRNMODE_HIGHCOLOR; | scrnmode |= SCRNMODE_HIGHCOLOR; | 
 | } | } | 
 | if (sysmenu_create() != SUCCESS) |  | 
 | goto sysmenu_failure; |  | 
 | if (scrnmng_create(scrnmode) != SUCCESS) | if (scrnmng_create(scrnmode) != SUCCESS) | 
 | goto scrnmng_failure; | goto scrnmng_failure; | 
 |  |  | 
 | if (soundmng_initialize() == SUCCESS) { | if (soundmng_initialize() == SUCCESS) { | 
 | result = soundmng_pcmload(SOUND_PCMSEEK, file_getcd("fddseek.wav")); | result = soundmng_pcmload(SOUND_PCMSEEK, file_getcd("fddseek.wav")); | 
 | if (!result) { | if (!result) { | 
| result = soundmng_pcmload(SOUND_PCMSEEK, SYSRESPATH "/wav/fddseek.wav"); | result = soundmng_pcmload(SOUND_PCMSEEK, SYSRESPATH "/fddseek.wav"); | 
 | } | } | 
 | if (result) { | if (result) { | 
 | soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); | soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); | 
| Line 288  main(int argc, char *argv[]) | Line 276  main(int argc, char *argv[]) | 
 |  |  | 
 | result = soundmng_pcmload(SOUND_PCMSEEK1, file_getcd("fddseek1.wav")); | result = soundmng_pcmload(SOUND_PCMSEEK1, file_getcd("fddseek1.wav")); | 
 | if (!result) { | if (!result) { | 
| result = soundmng_pcmload(SOUND_PCMSEEK1, SYSRESPATH "/wav/fddseek1.wav"); | result = soundmng_pcmload(SOUND_PCMSEEK1, SYSRESPATH "/fddseek1.wav"); | 
 | } | } | 
 | if (result) { | if (result) { | 
 | soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); | soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); | 
| Line 325  main(int argc, char *argv[]) | Line 313  main(int argc, char *argv[]) | 
 | } | } | 
 | } | } | 
 |  |  | 
| #if !defined(CPUCORE_IA32) | #if defined(SUPPORT_RESUME) | 
 | if (np2oscfg.resume) { | if (np2oscfg.resume) { | 
 | flagload(np2resumeext, "Resume", FALSE); | flagload(np2resumeext, "Resume", FALSE); | 
 | } | } | 
| Line 368  main(int argc, char *argv[]) | Line 356  main(int argc, char *argv[]) | 
 | scrnmng_destroy(); | scrnmng_destroy(); | 
 |  |  | 
 | scrnmng_failure: | scrnmng_failure: | 
 | sysmenu_destroy(); |  | 
 |  |  | 
 | sysmenu_failure: |  | 
 | fontmng_terminate(); | fontmng_terminate(); | 
 |  |  | 
 | fontmng_failure: | fontmng_failure: | 
| if (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG)) { | if (!np2oscfg.cfgreadonly | 
|  | && (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG))) { | 
 | initsave(); | initsave(); | 
 | toolwin_writeini(); | toolwin_writeini(); | 
 | kdispwin_writeini(); | kdispwin_writeini(); | 
| Line 383  fontmng_failure: | Line 369  fontmng_failure: | 
 |  |  | 
 | skbdwin_deinitialize(); | skbdwin_deinitialize(); | 
 |  |  | 
 |  | #if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) | 
 |  | SDL_Quit(); | 
 |  | #endif | 
 |  |  | 
 | TRACETERM(); | TRACETERM(); | 
 | dosio_term(); | dosio_term(); | 
 |  |  |