--- np2/win9x/ini.cpp 2004/02/03 08:24:40 1.22 +++ np2/win9x/ini.cpp 2005/02/09 20:11:35 1.32 @@ -2,20 +2,44 @@ #include #include #include "strres.h" +#include "profile.h" #include "np2.h" #include "np2arg.h" +#if defined(OSLANG_UCS2) +#include "oemtext.h" +#endif #include "dosio.h" #include "ini.h" #include "winkbd.h" #include "pccore.h" -static void inirdargs16(const char *src, const INITBL *ini) { + +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; + } +} + +static void inirdargs16(const OEMCHAR *src, const INITBL *ini) { SINT16 *dst; int dsize; int i; - char c; + OEMCHAR c; dst = (SINT16 *)ini->value; dsize = ini->arg; @@ -37,16 +61,16 @@ static void inirdargs16(const char *src, } } -static void inirdargh8(const char *src, const INITBL *ini) { +static void inirdargh8(const OEMCHAR *src, const INITBL *ini) { - BYTE *dst; + UINT8 *dst; int dsize; int i; - BYTE val; + UINT8 val; BOOL set; - char c; + OEMCHAR c; - dst = (BYTE *)ini->value; + dst = (UINT8 *)ini->value; dsize = ini->arg; for (i=0; ivalue; + ptr = (UINT8 *)ini->value; arg = ini->arg; if (arg > 0) { - SPRINTF(tmp, "%.2x", ptr[0]); + OEMSPRINTF(tmp, OEMTEXT("%.2x"), ptr[0]); milstr_ncpy(work, tmp, size); } for (i=1; ivalue)[i] = src[i]; + ((UINT8 *)ini->value)[i] = (UINT8)src[i]; } } } -static void inirdkb(const char *src, const INITBL *ini) { +static void inirdkb(const OEMCHAR *src, const INITBL *ini) { - if ((!milstr_extendcmp(src, "PC98")) || - (!milstr_cmp(src, "98"))) { - *(BYTE *)ini->value = KEY_PC98; - } - else if ((!milstr_extendcmp(src, "DOS")) || - (!milstr_cmp(src, "PCAT")) || - (!milstr_cmp(src, "AT"))) { - *(BYTE *)ini->value = KEY_KEY106; - } - else if ((!milstr_extendcmp(src, "KEY101")) || - (!milstr_cmp(src, "101"))) { - *(BYTE *)ini->value = KEY_KEY101; + 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 char *path, const char *title, +void ini_read(const OEMCHAR *path, const OEMCHAR *title, const INITBL *tbl, UINT count) { const INITBL *p; const INITBL *pterm; - char work[512]; +#if defined(OSLANG_UCS2) + OEMCHAR item[10]; +#else +const OEMCHAR *item; +#endif + OEMCHAR work[512]; UINT32 val; p = tbl; pterm = tbl + count; while(p < pterm) { +#if defined(OSLANG_UCS2) + oemtext_sjis2oem(item, NELEMENTS(item), p->item, (UINT)-1); +#else + item = p->item; +#endif switch(p->itemtype & INITYPE_MASK) { case INITYPE_STR: - GetPrivateProfileString(title, p->item, (char *)p->value, - (char *)p->value, p->arg, path); + GetPrivateProfileString(title, item, (OEMCHAR *)p->value, + (OEMCHAR *)p->value, p->arg, path); break; case INITYPE_BOOL: - GetPrivateProfileString(title, p->item, - (*((BYTE *)p->value))?str_true:str_false, - work, sizeof(work), path); - *((BYTE *)p->value) = (!milstr_cmp(work, str_true))?1:0; + GetPrivateProfileString(title, item, + (*((UINT8 *)p->value))?str_true:str_false, + work, NELEMENTS(work), path); + *((UINT8 *)p->value) = (!milstr_cmp(work, str_true))?1:0; + break; + + case INITYPE_BITMAP: + GetPrivateProfileString(title, item, + (inigetbmp((UINT8 *)p->value, p->arg))?str_true:str_false, + work, NELEMENTS(work), path); + inisetbmp((UINT8 *)p->value, p->arg, + (milstr_cmp(work, str_true) == 0)); break; case INITYPE_ARGS16: - GetPrivateProfileString(title, p->item, str_null, - work, sizeof(work), path); + GetPrivateProfileString(title, item, str_null, + work, NELEMENTS(work), path); inirdargs16(work, p); break; case INITYPE_ARGH8: - GetPrivateProfileString(title, p->item, str_null, - work, sizeof(work), path); + GetPrivateProfileString(title, item, str_null, + work, NELEMENTS(work), path); inirdargh8(work, p); break; case INITYPE_SINT8: case INITYPE_UINT8: - val = (BYTE)GetPrivateProfileInt(title, p->item, - *(BYTE *)p->value, path); - *(BYTE *)p->value = (BYTE)val; + val = (UINT8)GetPrivateProfileInt(title, item, + *(UINT8 *)p->value, path); + *(UINT8 *)p->value = (UINT8)val; break; case INITYPE_SINT16: case INITYPE_UINT16: - val = (UINT16)GetPrivateProfileInt(title, p->item, + val = (UINT16)GetPrivateProfileInt(title, item, *(UINT16 *)p->value, path); *(UINT16 *)p->value = (UINT16)val; break; case INITYPE_SINT32: case INITYPE_UINT32: - val = (UINT32)GetPrivateProfileInt(title, p->item, + val = (UINT32)GetPrivateProfileInt(title, item, *(UINT32 *)p->value, path); *(UINT32 *)p->value = (UINT32)val; break; case INITYPE_HEX8: - SPRINTF(work, str_x, *(BYTE *)p->value), - GetPrivateProfileString(title, p->item, work, - work, sizeof(work), path); - val = (BYTE)milstr_solveHEX(work); - *(BYTE *)p->value = (BYTE)val; + OEMSPRINTF(work, str_x, *(UINT8 *)p->value), + GetPrivateProfileString(title, item, work, + work, NELEMENTS(work), path); + val = (UINT8)milstr_solveHEX(work); + *(UINT8 *)p->value = (UINT8)val; break; case INITYPE_HEX16: - SPRINTF(work, str_x, *(UINT16 *)p->value), - GetPrivateProfileString(title, p->item, work, - work, sizeof(work), path); + OEMSPRINTF(work, str_x, *(UINT16 *)p->value), + GetPrivateProfileString(title, item, work, + work, NELEMENTS(work), path); val = (UINT16)milstr_solveHEX(work); *(UINT16 *)p->value = (UINT16)val; break; case INITYPE_HEX32: - SPRINTF(work, str_x, *(UINT32 *)p->value), - GetPrivateProfileString(title, p->item, work, - work, sizeof(work), path); + OEMSPRINTF(work, str_x, *(UINT32 *)p->value), + GetPrivateProfileString(title, item, work, + work, NELEMENTS(work), path); val = (UINT32)milstr_solveHEX(work); - *(UINT16 *)p->value = (UINT32)val; + *(UINT32 *)p->value = (UINT32)val; break; case INITYPE_BYTE3: - GetPrivateProfileString(title, p->item, str_null, - work, sizeof(work), path); + GetPrivateProfileString(title, item, str_null, + work, NELEMENTS(work), path); inirdbyte3(work, p); break; case INITYPE_KB: - GetPrivateProfileString(title, p->item, str_null, - work, sizeof(work), path); + GetPrivateProfileString(title, item, str_null, + work, NELEMENTS(work), path); inirdkb(work, p); break; } @@ -236,13 +278,13 @@ const INITBL *pterm; } } -void ini_write(const char *path, const char *title, +void ini_write(const OEMCHAR *path, const OEMCHAR *title, const INITBL *tbl, UINT count) { const INITBL *p; const INITBL *pterm; -const char *set; - char work[512]; +const OEMCHAR *set; + OEMCHAR work[512]; p = tbl; pterm = tbl + count; @@ -252,51 +294,51 @@ const char *set; set = work; switch(p->itemtype & INITYPE_MASK) { case INITYPE_STR: - set = (char *)p->value; + set = (OEMCHAR *)p->value; break; case INITYPE_BOOL: - set = (*((BYTE *)p->value))?str_true:str_false; + set = (*((UINT8 *)p->value))?str_true:str_false; break; case INITYPE_ARGH8: - iniwrsetargh8(work, sizeof(work), p); + iniwrsetargh8(work, NELEMENTS(work), p); break; case INITYPE_SINT8: - SPRINTF(work, str_d, *((char *)p->value)); + OEMSPRINTF(work, str_d, *((SINT8 *)p->value)); break; case INITYPE_SINT16: - SPRINTF(work, str_d, *((SINT16 *)p->value)); + OEMSPRINTF(work, str_d, *((SINT16 *)p->value)); break; case INITYPE_SINT32: - SPRINTF(work, str_d, *((SINT32 *)p->value)); + OEMSPRINTF(work, str_d, *((SINT32 *)p->value)); break; case INITYPE_UINT8: - SPRINTF(work, str_u, *((BYTE *)p->value)); + OEMSPRINTF(work, str_u, *((UINT8 *)p->value)); break; case INITYPE_UINT16: - SPRINTF(work, str_u, *((UINT16 *)p->value)); + OEMSPRINTF(work, str_u, *((UINT16 *)p->value)); break; case INITYPE_UINT32: - SPRINTF(work, str_u, *((UINT32 *)p->value)); + OEMSPRINTF(work, str_u, *((UINT32 *)p->value)); break; case INITYPE_HEX8: - SPRINTF(work, str_x, *((BYTE *)p->value)); + OEMSPRINTF(work, str_x, *((UINT8 *)p->value)); break; case INITYPE_HEX16: - SPRINTF(work, str_x, *((UINT16 *)p->value)); + OEMSPRINTF(work, str_x, *((UINT16 *)p->value)); break; case INITYPE_HEX32: - SPRINTF(work, str_x, *((UINT32 *)p->value)); + OEMSPRINTF(work, str_x, *((UINT32 *)p->value)); break; default: @@ -304,7 +346,13 @@ const char *set; break; } if (set) { +#if defined(OSLANG_UCS2) + OEMCHAR item[10]; + oemtext_sjis2oem(item, NELEMENTS(item), p->item, (UINT)-1); + WritePrivateProfileString(title, item, set, path); +#else WritePrivateProfileString(title, p->item, set, path); +#endif } } p++; @@ -314,11 +362,16 @@ const char *set; // ---- -static const char ini_title[] = "NekoProjectII"; +#if !defined(SUPPORT_PC9821) +static const OEMCHAR ini_title[] = OEMTEXT("NekoProjectII"); +#else +static const OEMCHAR ini_title[] = OEMTEXT("NekoProject21"); +#endif enum { INIRO_STR = INITYPE_STR + INIFLAG_RO, INIRO_BOOL = INITYPE_BOOL + INIFLAG_RO, + INIRO_BITMAP = INITYPE_BITMAP + INIFLAG_RO, INIRO_UINT8 = INITYPE_UINT8 + INIFLAG_RO, INIMAX_UINT8 = INITYPE_UINT8 + INIFLAG_MAX, INIAND_UINT8 = INITYPE_UINT8 + INIFLAG_AND, @@ -331,7 +384,7 @@ enum { static const INITBL iniitem[] = { {"np2title", INIRO_STR, np2oscfg.titles, - sizeof(np2oscfg.titles)}, + NELEMENTS(np2oscfg.titles)}, {"np2winid", INIRO_BYTE3, np2oscfg.winid, 0}, {"WindposX", INITYPE_SINT32, &np2oscfg.winx, 0}, {"WindposY", INITYPE_SINT32, &np2oscfg.winy, 0}, @@ -348,7 +401,7 @@ static const INITBL iniitem[] = { {"hdrv_acc", INIRO_UINT8, &np2cfg.hdrvacc, 0}, {"pc_model", INITYPE_STR, &np2cfg.model, - sizeof(np2cfg.model)}, + NELEMENTS(np2cfg.model)}, {"clk_base", INITYPE_UINT32, &np2cfg.baseclock, 0}, {"clk_mult", INITYPE_UINT32, &np2cfg.multiple, 0}, @@ -380,7 +433,7 @@ static const INITBL iniitem[] = { {"optSPBVR", INITYPE_HEX8, &np2cfg.spb_vrc, 0}, {"optSPBVL", INIMAX_UINT8, &np2cfg.spb_vrl, 24}, {"optSPB_X", INITYPE_BOOL, &np2cfg.spb_x, 0}, - {"optMPU98", INITYPE_HEX8 &np2cfg.mpuopt, 0}, + {"optMPU98", INITYPE_HEX8, &np2cfg.mpuopt, 0}, {"volume_F", INIMAX_UINT8, &np2cfg.vol_fm, 128}, {"volume_S", INIMAX_UINT8, &np2cfg.vol_ssg, 128}, @@ -419,6 +472,11 @@ 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}, + // OS°Í¸¡© {"keyboard", INIRO_KB, &np2oscfg.KEYBOARD, 0}, @@ -471,12 +529,14 @@ static const INITBL iniitem[] = { {"keydispl", INITYPE_BOOL, &np2oscfg.keydisp, 0}, {"jast_snd", INITYPE_BOOL, &np2oscfg.jastsnd, 0}, // ver0.73 {"useromeo", INITYPE_BOOL, &np2oscfg.useromeo, 0}, // ver0.74 + {"thickfrm", INITYPE_BOOL, &np2oscfg.thickframe, 0}, // ver0.77 + {"xrollkey", INIRO_BOOL, &np2oscfg.xrollkey, 0}, // ver0.78 {"I286SAVE", INIRO_BOOL, &np2oscfg.I286SAVE, 0}}; -void initgetfile(char *path, UINT size) { +void initgetfile(OEMCHAR *path, UINT size) { - char *p; + OEMCHAR *p; file_cpyname(path, modulefile, size); if (np2arg.ini) { @@ -489,28 +549,28 @@ void initgetfile(char *path, UINT size) } p = file_getext(path); if (!(*p)) { - file_catname(path, ".ini", size); + file_catname(path, OEMTEXT(".ini"), size); } } else { file_cutext(path); - file_catname(path, ".ini", size); + file_catname(path, OEMTEXT(".ini"), size); } } void initload(void) { - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; - initgetfile(path, sizeof(path)); - ini_read(path, ini_title, iniitem, sizeof(iniitem)/sizeof(INITBL)); + initgetfile(path, NELEMENTS(path)); + ini_read(path, ini_title, iniitem, NELEMENTS(iniitem)); } void initsave(void) { - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; - initgetfile(path, sizeof(path)); - ini_write(path, ini_title, iniitem, sizeof(iniitem)/sizeof(INITBL)); + initgetfile(path, NELEMENTS(path)); + ini_write(path, ini_title, iniitem, NELEMENTS(iniitem)); }