--- np2/x11/ini.c 2003/12/04 06:41:24 1.5 +++ np2/x11/ini.c 2012/01/23 04:20:24 1.26 @@ -7,20 +7,43 @@ #include "profile.h" #include "strres.h" +#include "commng.h" +#include "joymng.h" #include "kbdmng.h" #include "soundmng.h" typedef struct { const char *title; - const INITBL *tbl; - const INITBL *tblterm; + INITBL *tbl; + INITBL *tblterm; UINT count; } _INIARG, *INIARG; +static BOOL +inigetbmp(const BYTE *ptr, UINT pos) +{ + + return ((ptr[pos >> 3] >> (pos & 7)) & 1); +} + static void -inirdargs16(const char *src, const INITBL *ini) +inisetbmp(BYTE *ptr, UINT pos, BOOL set) +{ + UINT8 bit; + + ptr += (pos >> 3); + bit = 1 << (pos & 7); + if (set) { + *ptr |= bit; + } else { + *ptr &= ~bit; + } +} + +static void +inirdargs16(const char *src, INITBL *ini) { SINT16 *dst; int dsize; @@ -48,7 +71,7 @@ inirdargs16(const char *src, const INITB } static void -inirdargh8(const char *src, const INITBL *ini) +inirdargh8(const char *src, INITBL *ini) { BYTE *dst; int dsize; @@ -94,7 +117,7 @@ inirdargh8(const char *src, const INITBL } static void -iniwrsetargh8(char *work, int size, const INITBL *ini) +iniwrsetargh8(char *work, int size, INITBL *ini) { char tmp[8]; const BYTE *ptr; @@ -104,11 +127,11 @@ iniwrsetargh8(char *work, int size, cons ptr = (BYTE *)(ini->value); arg = ini->arg; if (arg > 0) { - SPRINTF(tmp, "%.2x ", ptr[0]); + g_snprintf(tmp, sizeof(tmp), "%.2x ", ptr[0]); milstr_ncpy(work, tmp, size); } for (i = 1; i < arg; i++) { - SPRINTF(tmp, "%.2x ", ptr[i]); + g_snprintf(tmp, sizeof(tmp), "%.2x ", ptr[i]); milstr_ncat(work, tmp, size); } } @@ -116,7 +139,7 @@ iniwrsetargh8(char *work, int size, cons /* ----- user */ static void -inirdbyte3(const char *src, const INITBL *ini) +inirdbyte3(const char *src, INITBL *ini) { UINT i; @@ -132,7 +155,7 @@ inirdbyte3(const char *src, const INITBL } static void -inirdkb(const char *src, const INITBL *ini) +inirdkb(const char *src, INITBL *ini) { if ((!milstr_extendcmp(src, "DOS")) @@ -152,19 +175,34 @@ inirdkb(const char *src, const INITBL *i } static void -inirdsnddrv(const char *src, const INITBL *ini) +inirdsnddrv(const char *src, INITBL *ini) { *(UINT8 *)ini->value = snddrv_drv2num(src); } +static void +inirdinterp(const char *src, INITBL *ini) +{ + + if (!milstr_cmp(src, "NEAREST")) { + *(UINT8 *)ini->value = INTERP_NEAREST; + } else if (!milstr_cmp(src, "TILES")) { + *(UINT8 *)ini->value = INTERP_TILES; + } else if (!milstr_cmp(src, "HYPER")) { + *(UINT8 *)ini->value = INTERP_HYPER; + } else { + *(UINT8 *)ini->value = INTERP_BILINEAR; + } +} + static void update_iniread_flag(const INITBL *p); static BOOL inireadcb(void *arg, const char *para, const char *key, const char *data) { char work[512]; - const INITBL *p; + INITBL *p; BOOL rv; if (arg == NULL) { @@ -186,6 +224,10 @@ inireadcb(void *arg, const char *para, c *((BYTE *)p->value) = (!milstr_cmp(data, str_true))?1:0; break; + case INITYPE_BITMAP: + inisetbmp((BYTE *)p->value, p->arg, milstr_cmp(data, str_true) == 0); + break; + case INITYPE_ARGS16: milstr_ncpy(work, data, 512); inirdargs16(work, p); @@ -238,6 +280,11 @@ inireadcb(void *arg, const char *para, c inirdsnddrv(work, p); break; + case INITYPE_INTERP: + milstr_ncpy(work, data, 512); + inirdinterp(work, p); + break; + default: rv = FALSE; break; @@ -252,7 +299,7 @@ inireadcb(void *arg, const char *para, c } void -ini_read(const char *path, const char *title, const INITBL *tbl, UINT count) +ini_read(const char *path, const char *title, INITBL *tbl, UINT count) { _INIARG iniarg; @@ -312,16 +359,30 @@ iwss_extend: } } +static const char * +iniwrinterp(UINT8 interp) +{ + + if (interp == INTERP_NEAREST) + return "NEAREST"; + else if (interp == INTERP_TILES) + return "TILES"; + else if (interp == INTERP_HYPER) + return "HYPER"; + else + return "BILINEAR"; +} + static BOOL read_iniread_flag(const INITBL *p); void -ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BOOL create) +ini_write(const char *path, const char *title, INITBL *tbl, UINT count, BOOL create) { - char work[512]; - const INITBL *p; - const INITBL *pterm; - FILEH fh; - BOOL set; + char work[512]; + INITBL *p; + INITBL *pterm; + FILEH fh; + BOOL set; fh = FILEH_INVALID; if (!create) { @@ -355,44 +416,48 @@ ini_write(const char *path, const char * milstr_ncpy(work, (*((BYTE *)p->value)) ? str_true : str_false, sizeof(work)); break; + case INITYPE_BITMAP: + milstr_ncpy(work, inigetbmp((BYTE *)p->value, p->arg) ? str_true : str_false, sizeof(work)); + break; + case INITYPE_ARGH8: iniwrsetargh8(work, sizeof(work), p); break; case INITYPE_SINT8: - SPRINTF(work, "%d", *((char *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((char *)p->value)); break; case INITYPE_SINT16: - SPRINTF(work, "%d", *((SINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((SINT16 *)p->value)); break; case INITYPE_SINT32: - SPRINTF(work, "%d", *((SINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((SINT32 *)p->value)); break; case INITYPE_UINT8: - SPRINTF(work, "%u", *((BYTE *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((BYTE *)p->value)); break; case INITYPE_UINT16: - SPRINTF(work, "%u", *((UINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((UINT16 *)p->value)); break; case INITYPE_UINT32: - SPRINTF(work, "%u", *((UINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((UINT32 *)p->value)); break; case INITYPE_HEX8: - SPRINTF(work, "%x", *((BYTE *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((BYTE *)p->value)); break; case INITYPE_HEX16: - SPRINTF(work, "%x", *((UINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((UINT16 *)p->value)); break; case INITYPE_HEX32: - SPRINTF(work, "%x", *((UINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((UINT32 *)p->value)); break; case INITYPE_KB: @@ -403,7 +468,11 @@ ini_write(const char *path, const char * break; case INITYPE_SNDDRV: - SPRINTF(work, "%s", snddrv_num2drv(*(UINT8 *)p->value)); + g_snprintf(work, sizeof(work), "%s", snddrv_num2drv(*(UINT8 *)p->value)); + break; + + case INITYPE_INTERP: + g_snprintf(work, sizeof(work), "%s", iniwrinterp(*(UINT8 *)p->value)); break; default: @@ -422,13 +491,18 @@ ini_write(const char *path, const char * file_close(fh); } -extern char modulefile[]; - -static const char ini_title[] = "NekoProjectII"; +static const char ini_title[] = +#if !defined(CPUCORE_IA32) + "NekoProjectII"; +#else + "NekoProjectII_IA32"; +#endif enum { INIRO_STR = INIFLAG_RO | INITYPE_STR, INIRO_BOOL = INIFLAG_RO | INITYPE_BOOL, + INIRO_BITMAP = INIFLAG_RO | INITYPE_BITMAP, + INIRO_UINT8 = INIFLAG_RO | INITYPE_UINT8, INIMAX_UINT8 = INIFLAG_MAX | INITYPE_UINT8, INIAND_UINT8 = INIFLAG_AND | INITYPE_UINT8, INIROMAX_SINT32 = INIFLAG_RO | INIFLAG_MAX | INITYPE_SINT32, @@ -438,7 +512,7 @@ enum { INIRO_KB = INIFLAG_RO | INITYPE_KB }; -static const INITBL iniitem[] = { +static INITBL iniitem[] = { {"np2title", INIRO_STR, np2oscfg.titles, sizeof(np2oscfg.titles)}, {"paddingx", INIROMAX_SINT32, &np2oscfg.paddingx, 32}, {"paddingy", INIROMAX_SINT32, &np2oscfg.paddingy, 32}, @@ -447,9 +521,11 @@ static const INITBL iniitem[] = { {"HDfolder", INITYPE_STR, hddfolder, MAX_PATH}, {"bmap_Dir", INITYPE_STR, bmpfilefolder, MAX_PATH}, {"fontfile", INITYPE_STR, np2cfg.fontfile, MAX_PATH}, - {"biospath", INITYPE_STR, np2cfg.biospath, MAX_PATH}, + {"biospath", INIRO_STR, np2cfg.biospath, MAX_PATH}, + {"hdrvroot", INIRO_STR, np2cfg.hdrvroot, MAX_PATH}, + {"hdrv_acc", INIRO_UINT8, &np2cfg.hdrvacc, 0}, - {"pc_model", INITYPE_STR, &np2cfg.model, sizeof(np2cfg.model)}, + {"pc_model", INITYPE_STR, np2cfg.model, sizeof(np2cfg.model)}, {"clk_base", INITYPE_UINT32, &np2cfg.baseclock, 0}, {"clk_mult", INITYPE_UINT32, &np2cfg.multiple, 0}, @@ -459,8 +535,8 @@ static const INITBL iniitem[] = { {"ExMemory", INIMAX_UINT8, &np2cfg.EXTMEM, 13}, {"ITF_WORK", INIRO_BOOL, &np2cfg.ITF_WORK, 0}, - {"HDD1FILE", INITYPE_STR, np2cfg.hddfile[0], MAX_PATH}, - {"HDD2FILE", INITYPE_STR, np2cfg.hddfile[1], MAX_PATH}, + {"HDD1FILE", INITYPE_STR, np2cfg.sasihdd[0], MAX_PATH}, + {"HDD2FILE", INITYPE_STR, np2cfg.sasihdd[1], MAX_PATH}, {"SampleHz", INITYPE_UINT16, &np2cfg.samplingrate, 0}, {"Latencys", INITYPE_UINT16, &np2cfg.delayms, 0}, @@ -514,11 +590,18 @@ static const INITBL iniitem[] = { {"calendar", INITYPE_BOOL, &np2cfg.calendar, 0}, {"USE144FD", INITYPE_BOOL, &np2cfg.usefd144, 0}, + {"FDDRIVE1", INIRO_BITMAP, &np2cfg.fddequip, 0}, + {"FDDRIVE2", INIRO_BITMAP, &np2cfg.fddequip, 1}, + {"FDDRIVE3", INIRO_BITMAP, &np2cfg.fddequip, 2}, + {"FDDRIVE4", INIRO_BITMAP, &np2cfg.fddequip, 3}, {"keyboard", INIRO_KB, &np2oscfg.KEYBOARD, 0}, - {"F12_COPY", INITYPE_UINT8, &np2oscfg.F12COPY, 0}, + {"F12_COPY", INITYPE_UINT8, &np2oscfg.F12KEY, 0}, {"Joystick", INITYPE_BOOL, &np2oscfg.JOYPAD1, 0}, - {"Joy1_btn", INITYPE_ARGH8, np2oscfg.JOY1BTN, 4}, + {"Joy1_btn", INITYPE_ARGH8, np2oscfg.JOY1BTN, JOY_NBUTTON}, + {"Joy1_dev", INITYPE_STR, &np2oscfg.JOYDEV[0], MAX_PATH}, + {"Joy1amap", INITYPE_ARGH8, np2oscfg.JOYAXISMAP[0], JOY_NAXIS}, + {"Joy1bmap", INITYPE_ARGH8, np2oscfg.JOYBTNMAP[0], JOY_NBUTTON}, {"confirm_", INITYPE_BOOL, &np2oscfg.confirm, 0}, @@ -527,25 +610,52 @@ static const INITBL iniitem[] = { {"mpu98mdl", INITYPE_STR, np2oscfg.mpu.mdl, 64}, {"mpu98def", INITYPE_STR, np2oscfg.mpu.def, MAX_PATH}, + {"com1port", INIMAX_UINT8, &np2oscfg.com[0].port, COMPORT_MIDI}, + {"com1para", INITYPE_UINT8, &np2oscfg.com[0].param, 0}, + {"com1_bps", INITYPE_UINT32, &np2oscfg.com[0].speed, 0}, + {"com1mmap", INITYPE_STR, np2oscfg.com[0].mout, MAX_PATH}, + {"com1mmdl", INITYPE_STR, np2oscfg.com[0].mdl, 64}, + {"com1mdef", INITYPE_STR, np2oscfg.com[0].def, MAX_PATH}, + + {"com2port", INIMAX_UINT8, &np2oscfg.com[1].port, COMPORT_MIDI}, + {"com2para", INITYPE_UINT8, &np2oscfg.com[1].param, 0}, + {"com2_bps", INITYPE_UINT32, &np2oscfg.com[1].speed, 0}, + {"com2mmap", INITYPE_STR, np2oscfg.com[1].mout, MAX_PATH}, + {"com2mmdl", INITYPE_STR, np2oscfg.com[1].mdl, 64}, + {"com2mdef", INITYPE_STR, np2oscfg.com[1].def, MAX_PATH}, + + {"com3port", INIMAX_UINT8, &np2oscfg.com[2].port, COMPORT_MIDI}, + {"com3para", INITYPE_UINT8, &np2oscfg.com[2].param, 0}, + {"com3_bps", INITYPE_UINT32, &np2oscfg.com[2].speed, 0}, + {"com3mmap", INITYPE_STR, np2oscfg.com[2].mout, MAX_PATH}, + {"com3mmdl", INITYPE_STR, np2oscfg.com[2].mdl, 64}, + {"com3mdef", INITYPE_STR, np2oscfg.com[2].def, MAX_PATH}, + +#if defined(SUPPORT_RESUME) {"e_resume", INITYPE_BOOL, &np2oscfg.resume, 0}, +#endif +#if defined(SUPPORT_STATSAVE) {"STATSAVE", INIRO_BOOL, &np2oscfg.statsave, 0}, -#if defined(__GNUC__) && (defined(i386) || defined(__i386__)) +#endif +#if defined(GCC_CPU_ARCH_IA32) {"nousemmx", INITYPE_BOOL, &np2oscfg.disablemmx, 0}, #endif {"toolwind", INITYPE_BOOL, &np2oscfg.toolwin, 0}, {"keydispl", INITYPE_BOOL, &np2oscfg.keydisp, 0}, + {"soft_kbd", INITYPE_BOOL, &np2oscfg.softkbd, 0}, + {"jast_snd", INITYPE_BOOL, &np2oscfg.jastsnd, 0}, {"sounddrv", INITYPE_SNDDRV, &np2oscfg.snddrv, 0}, - {"audiodev", INITYPE_STR, &np2oscfg.audiodev, MAX_PATH}, {"MIDIOUTd", INITYPE_STR, &np2oscfg.MIDIDEV[0], MAX_PATH}, {"MIDIIN_d", INITYPE_STR, &np2oscfg.MIDIDEV[1], MAX_PATH}, {"MIDIWAIT", INITYPE_UINT32, &np2oscfg.MIDIWAIT, 0}, - {"sharepix", INIRO_BOOL, &np2oscfg.shared_pixmap,0}, - - {"toolkit_", INIRO_STR, &np2oscfg.toolkit, sizeof(np2oscfg.toolkit)}, + {"dinterp_", INITYPE_INTERP, &np2oscfg.drawinterp, 0}, + {"fullscrn", INITYPE_UINT32, &ignore_fullscreen_mode,0}, + {"F11_KEY_", INITYPE_UINT8, &np2oscfg.F11KEY, 0}, + {"READONLY", INIRO_BOOL, &np2oscfg.cfgreadonly, 0}, - {"I286SAVE", INIRO_BOOL, &np2oscfg.I286SAVE, 0} + {"I286SAVE", INIRO_BOOL, &np2oscfg.I286SAVE, 0}, }; #define INIITEMS (sizeof(iniitem) / sizeof(iniitem[0])) @@ -559,7 +669,7 @@ calc_index(const INITBL *p) UINT idx; if (p) { - offset = (char *)p - (char *)iniitem; + offset = (const char *)p - (const char *)iniitem; if ((offset % sizeof(iniitem[0])) == 0) { idx = offset / sizeof(iniitem[0]); if (idx < INIITEMS) { @@ -593,11 +703,17 @@ read_iniread_flag(const INITBL *p) return FALSE; } +NP2CFG np2cfg_default; +NP2OSCFG np2oscfg_default; + void initload(void) { char path[MAX_PATH]; + np2cfg_default = np2cfg; + np2oscfg_default = np2oscfg; + milstr_ncpy(path, modulefile, sizeof(path)); ini_read(path, ini_title, iniitem, INIITEMS); }