--- np2/win9x/ini.cpp 2005/03/20 06:09:16 1.37 +++ np2/win9x/ini.cpp 2007/10/28 16:01:35 1.44 @@ -15,24 +15,8 @@ -static BOOL inigetbmp(const UINT8 *ptr, UINT pos) { - return((ptr[pos >> 3] >> (pos & 7)) & 1); -} - -static void inisetbmp(UINT8 *ptr, UINT pos, BOOL set) { - - UINT8 bit; - - ptr += (pos >> 3); - bit = 1 << (pos & 7); - if (set) { - *ptr |= bit; - } - else { - *ptr &= ~bit; - } -} +// ---- user static void inirdargs16(const OEMCHAR *src, const PFTBL *ini) { @@ -61,19 +45,69 @@ static void inirdargs16(const OEMCHAR *s } } -static void inirdargh8(const OEMCHAR *src, const PFTBL *ini) { +static void inirdbyte3(const OEMCHAR *src, const PFTBL *ini) { - UINT8 *dst; - int dsize; - int i; + UINT i; + + for (i=0; i<3; i++) { + if (src[i] == '\0') { + break; + } + if ((((src[i] - '0') & 0xff) < 9) || + (((src[i] - 'A') & 0xdf) < 26)) { + ((UINT8 *)ini->value)[i] = (UINT8)src[i]; + } + } +} + +static void inirdkb(const OEMCHAR *src, const PFTBL *ini) { + + if ((!milstr_extendcmp(src, OEMTEXT("PC98"))) || + (!milstr_cmp(src, OEMTEXT("98")))) { + *(UINT8 *)ini->value = KEY_PC98; + } + else if ((!milstr_extendcmp(src, OEMTEXT("DOS"))) || + (!milstr_cmp(src, OEMTEXT("PCAT"))) || + (!milstr_cmp(src, OEMTEXT("AT")))) { + *(UINT8 *)ini->value = KEY_KEY106; + } + else if ((!milstr_extendcmp(src, OEMTEXT("KEY101"))) || + (!milstr_cmp(src, OEMTEXT("101")))) { + *(UINT8 *)ini->value = KEY_KEY101; + } +} + + +// ---- Use WinAPI + +#if !defined(_UNICODE) +static void bitmapset(UINT8 *ptr, UINT pos, BOOL set) { + + UINT8 bit; + + ptr += (pos >> 3); + bit = 1 << (pos & 7); + if (set) { + *ptr |= bit; + } + else { + *ptr &= ~bit; + } +} + +static BOOL bitmapget(const UINT8 *ptr, UINT pos) { + + return((ptr[pos >> 3] >> (pos & 7)) & 1); +} + +static void binset(UINT8 *bin, UINT binlen, const OEMCHAR *src) { + + UINT i; UINT8 val; BOOL set; OEMCHAR c; - dst = (UINT8 *)ini->value; - dsize = ini->arg; - - for (i=0; ivalue; - arg = ini->arg; - if (arg > 0) { - OEMSPRINTF(tmp, OEMTEXT("%.2x"), ptr[0]); + if (binlen) { + OEMSPRINTF(tmp, OEMTEXT("%.2x"), bin[0]); milstr_ncpy(work, tmp, size); } - for (i=1; ivalue)[i] = (UINT8)src[i]; - } - } -} - -static void inirdkb(const OEMCHAR *src, const PFTBL *ini) { - - if ((!milstr_extendcmp(src, OEMTEXT("PC98"))) || - (!milstr_cmp(src, OEMTEXT("98")))) { - *(UINT8 *)ini->value = KEY_PC98; - } - else if ((!milstr_extendcmp(src, OEMTEXT("DOS"))) || - (!milstr_cmp(src, OEMTEXT("PCAT"))) || - (!milstr_cmp(src, OEMTEXT("AT")))) { - *(UINT8 *)ini->value = KEY_KEY106; - } - else if ((!milstr_extendcmp(src, OEMTEXT("KEY101"))) || - (!milstr_cmp(src, OEMTEXT("101")))) { - *(UINT8 *)ini->value = KEY_KEY101; - } -} - - -// ---- - void ini_read(const OEMCHAR *path, const OEMCHAR *title, const PFTBL *tbl, UINT count) { @@ -189,22 +181,16 @@ const PFTBL *pterm; case PFTYPE_BITMAP: GetPrivateProfileString(title, p->item, - (inigetbmp((UINT8 *)p->value, p->arg))?str_true:str_false, + (bitmapget((UINT8 *)p->value, p->arg))?str_true:str_false, work, NELEMENTS(work), path); - inisetbmp((UINT8 *)p->value, p->arg, + bitmapset((UINT8 *)p->value, p->arg, (milstr_cmp(work, str_true) == 0)); break; - case PFTYPE_ARGS16: + case PFTYPE_BIN: GetPrivateProfileString(title, p->item, str_null, work, NELEMENTS(work), path); - inirdargs16(work, p); - break; - - case PFTYPE_ARGH8: - GetPrivateProfileString(title, p->item, str_null, - work, NELEMENTS(work), path); - inirdargh8(work, p); + binset((UINT8 *)p->value, p->arg, work); break; case PFTYPE_SINT8: @@ -252,6 +238,12 @@ const PFTBL *pterm; *(UINT32 *)p->value = (UINT32)val; break; + case PFTYPE_ARGS16: + GetPrivateProfileString(title, p->item, str_null, + work, NELEMENTS(work), path); + inirdargs16(work, p); + break; + case PFTYPE_BYTE3: GetPrivateProfileString(title, p->item, str_null, work, NELEMENTS(work), path); @@ -291,8 +283,13 @@ const OEMCHAR *set; set = (*((UINT8 *)p->value))?str_true:str_false; break; - case PFTYPE_ARGH8: - iniwrsetargh8(work, NELEMENTS(work), p); + case PFTYPE_BITMAP: + set = (bitmapget((UINT8 *)p->value, p->arg))? + str_true:str_false; + break; + + case PFTYPE_BIN: + binget(work, NELEMENTS(work), (UINT8 *)p->value, p->arg); break; case PFTYPE_SINT8: @@ -343,6 +340,41 @@ const OEMCHAR *set; } } +#else // !defined(_UNICODE) + +// ---- Use profile.c + +static void pfread(const PFTBL *item, const OEMCHAR *string) { + + switch(item->itemtype & PFTYPE_MASK) { + case PFTYPE_ARGS16: + inirdargs16(string, item); + break; + + case PFTYPE_BYTE3: + inirdbyte3(string, item); + break; + + case PFTYPE_KB: + inirdkb(string, item); + break; + } +} + +void ini_read(const OEMCHAR *path, const OEMCHAR *title, + const PFTBL *tbl, UINT count) { + + profile_iniread(path, title, tbl, count, pfread); +} + +void ini_write(const OEMCHAR *path, const OEMCHAR *title, + const PFTBL *tbl, UINT count) { + + profile_iniwrite(path, title, tbl, count, NULL); +} + +#endif // !defined(_UNICODE) + // ---- @@ -358,6 +390,7 @@ enum { PFRO_BITMAP = PFFLAG_RO + PFTYPE_BITMAP, PFRO_UINT8 = PFFLAG_RO + PFTYPE_UINT8, PFRO_SINT32 = PFFLAG_RO + PFTYPE_SINT32, + PFRO_HEX8 = PFFLAG_RO + PFTYPE_HEX8, PFRO_HEX32 = PFFLAG_RO + PFTYPE_HEX32, PFRO_BYTE3 = PFFLAG_RO + PFTYPE_BYTE3, PFRO_KB = PFFLAG_RO + PFTYPE_KB @@ -377,15 +410,18 @@ static const PFTBL iniitem[] = { PFSTR("bmap_Dir", PFTYPE_STR, bmpfilefolder), PFSTR("fontfile", PFTYPE_STR, np2cfg.fontfile), PFSTR("biospath", PFRO_STR, np2cfg.biospath), + +#if defined(SUPPORT_HOSTDRV) PFSTR("hdrvroot", PFRO_STR, np2cfg.hdrvroot), PFVAL("hdrv_acc", PFRO_UINT8, &np2cfg.hdrvacc), +#endif - PFSTR("pc_model", PFTYPE_STR, &np2cfg.model), + PFSTR("pc_model", PFTYPE_STR, np2cfg.model), PFVAL("clk_base", PFTYPE_UINT32, &np2cfg.baseclock), PFVAL("clk_mult", PFTYPE_UINT32, &np2cfg.multiple), - PFEXT("DIPswtch", PFTYPE_ARGH8, np2cfg.dipsw, 3), - PFEXT("MEMswtch", PFTYPE_ARGH8, np2cfg.memsw, 8), + PFEXT("DIPswtch", PFTYPE_BIN, np2cfg.dipsw, 3), + PFEXT("MEMswtch", PFTYPE_BIN, np2cfg.memsw, 8), PFMAX("ExMemory", PFTYPE_UINT8, &np2cfg.EXTMEM, 63), PFVAL("ITF_WORK", PFRO_BOOL, &np2cfg.ITF_WORK), @@ -404,8 +440,8 @@ static const PFTBL iniitem[] = { PFAND("BEEP_vol", PFTYPE_UINT8, &np2cfg.BEEP_VOL, 3), PFVAL("xspeaker", PFRO_BOOL, &np2cfg.snd_x), - PFEXT("SND14vol", PFTYPE_ARGH8, np2cfg.vol14, 6), -// PFEXT("opt14BRD", PFTYPE_ARGH8, np2cfg.snd14opt, 3), + PFEXT("SND14vol", PFTYPE_BIN, np2cfg.vol14, 6), +// PFEXT("opt14BRD", PFTYPE_BIN, np2cfg.snd14opt, 3), PFVAL("opt26BRD", PFTYPE_HEX8, &np2cfg.snd26opt), PFVAL("opt86BRD", PFTYPE_HEX8, &np2cfg.snd86opt), PFVAL("optSPBRD", PFTYPE_HEX8, &np2cfg.spbopt), @@ -429,7 +465,7 @@ static const PFTBL iniitem[] = { PFVAL("MS_RAPID", PFTYPE_BOOL, &np2cfg.MOUSERAPID), PFAND("backgrnd", PFTYPE_UINT8, &np2oscfg.background, 3), - PFEXT("VRAMwait", PFTYPE_ARGH8, np2cfg.wait, 6), + PFEXT("VRAMwait", PFTYPE_BIN, np2cfg.wait, 6), PFAND("DspClock", PFTYPE_UINT8, &np2oscfg.DISPCLK, 3), PFVAL("DispSync", PFTYPE_BOOL, &np2cfg.DISPSYNC), PFVAL("Real_Pal", PFTYPE_BOOL, &np2cfg.RASTER), @@ -446,8 +482,8 @@ static const PFTBL iniitem[] = { PFAND("FG_COLOR", PFRO_HEX32, &np2cfg.FG_COLOR, 0xffffff), PFVAL("pc9861_e", PFTYPE_BOOL, &np2cfg.pc9861enable), - PFEXT("pc9861_s", PFTYPE_ARGH8, np2cfg.pc9861sw, 3), - PFEXT("pc9861_j", PFTYPE_ARGH8, np2cfg.pc9861jmp, 6), + PFEXT("pc9861_s", PFTYPE_BIN, np2cfg.pc9861sw, 3), + PFEXT("pc9861_j", PFTYPE_BIN, np2cfg.pc9861jmp, 6), PFVAL("calendar", PFTYPE_BOOL, &np2cfg.calendar), PFVAL("USE144FD", PFTYPE_BOOL, &np2cfg.usefd144), @@ -460,7 +496,7 @@ static const PFTBL iniitem[] = { PFVAL("keyboard", PFRO_KB, &np2oscfg.KEYBOARD), PFVAL("F12_COPY", PFTYPE_UINT8, &np2oscfg.F12COPY), PFVAL("Joystick", PFTYPE_BOOL, &np2oscfg.JOYPAD1), - PFEXT("Joy1_btn", PFTYPE_ARGH8, np2oscfg.JOY1BTN, 4), + PFEXT("Joy1_btn", PFTYPE_BIN, np2oscfg.JOY1BTN, 4), PFVAL("clocknow", PFTYPE_UINT8, &np2oscfg.clk_x), PFVAL("clockfnt", PFTYPE_UINT8, &np2oscfg.clk_fnt), @@ -501,7 +537,9 @@ static const PFTBL iniitem[] = { PFVAL("force400", PFRO_BOOL, &np2oscfg.force400), PFVAL("e_resume", PFTYPE_BOOL, &np2oscfg.resume), PFVAL("STATSAVE", PFRO_BOOL, &np2oscfg.statsave), +#if !defined(_WIN64) PFVAL("nousemmx", PFTYPE_BOOL, &np2oscfg.disablemmx), +#endif PFVAL("windtype", PFTYPE_UINT8, &np2oscfg.wintype), PFVAL("toolwind", PFTYPE_BOOL, &np2oscfg.toolwin), PFVAL("keydispl", PFTYPE_BOOL, &np2oscfg.keydisp), @@ -509,10 +547,15 @@ static const PFTBL iniitem[] = { PFVAL("useromeo", PFTYPE_BOOL, &np2oscfg.useromeo), PFVAL("thickfrm", PFTYPE_BOOL, &np2oscfg.thickframe), PFVAL("xrollkey", PFRO_BOOL, &np2oscfg.xrollkey), + PFVAL("fscrn_cx", PFRO_SINT32, &np2oscfg.fscrn_cx), + PFVAL("fscrn_cy", PFRO_SINT32, &np2oscfg.fscrn_cy), PFVAL("fscrnbpp", PFRO_UINT8, &np2oscfg.fscrnbpp), + PFVAL("fscrnmod", PFTYPE_HEX8, &np2oscfg.fscrnmod), PFVAL("I286SAVE", PFRO_BOOL, &np2oscfg.I286SAVE)}; +static const OEMCHAR ext_ini[] = OEMTEXT(".ini"); + void initgetfile(OEMCHAR *path, UINT size) { const OEMCHAR *ext; @@ -528,12 +571,12 @@ const OEMCHAR *ext; } ext = file_getext(path); if (ext[0] != '\0') { - file_catname(path, OEMTEXT(".ini"), size); + file_catname(path, ext_ini, size); } } else { file_cutext(path); - file_catname(path, OEMTEXT(".ini"), size); + file_catname(path, ext_ini, size); } }