| version 1.37, 2005/03/20 06:09:16 | version 1.43, 2007/01/08 01:16:59 | 
| Line 15 | Line 15 | 
 |  |  | 
 |  |  | 
 |  |  | 
 | static BOOL inigetbmp(const UINT8 *ptr, UINT pos) { |  | 
 |  |  | 
| return((ptr[pos >> 3] >> (pos & 7)) & 1); | // ---- user | 
| } |  | 
|  |  | 
| 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 PFTBL *ini) { | static void inirdargs16(const OEMCHAR *src, const PFTBL *ini) { | 
 |  |  | 
| Line 61  static void inirdargs16(const OEMCHAR *s | Line 45  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; | UINT    i; | 
| int             dsize; |  | 
| int             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; | UINT8   val; | 
 | BOOL    set; | BOOL    set; | 
 | OEMCHAR c; | OEMCHAR c; | 
 |  |  | 
| dst = (UINT8 *)ini->value; | for (i=0; i<binlen; i++) { | 
| dsize = ini->arg; |  | 
|  |  | 
| for (i=0; i<dsize; i++) { |  | 
 | val = 0; | val = 0; | 
 | set = FALSE; | set = FALSE; | 
 | while(*src == ' ') { | while(*src == ' ') { | 
| Line 102  static void inirdargh8(const OEMCHAR *sr | Line 136  static void inirdargh8(const OEMCHAR *sr | 
 | if (set == FALSE) { | if (set == FALSE) { | 
 | break; | break; | 
 | } | } | 
| dst[i] = val; | bin[i] = val; | 
 | } | } | 
 | } | } | 
 |  |  | 
| static void iniwrsetargh8(OEMCHAR *work, int size, const PFTBL *ini) { | static void binget(OEMCHAR *work, int size, const UINT8 *bin, UINT binlen) { | 
 |  |  | 
 | UINT    i; | UINT    i; | 
 | const UINT8     *ptr; |  | 
 | UINT    arg; |  | 
 | OEMCHAR tmp[8]; | OEMCHAR tmp[8]; | 
 |  |  | 
| ptr = (UINT8 *)ini->value; | if (binlen) { | 
| arg = ini->arg; | OEMSPRINTF(tmp, OEMTEXT("%.2x"), bin[0]); | 
| if (arg > 0) { |  | 
| OEMSPRINTF(tmp, OEMTEXT("%.2x"), ptr[0]); |  | 
 | milstr_ncpy(work, tmp, size); | milstr_ncpy(work, tmp, size); | 
 | } | } | 
| for (i=1; i<arg; i++) { | for (i=1; i<binlen; i++) { | 
| OEMSPRINTF(tmp, OEMTEXT(" %.2x"), ptr[i]); | OEMSPRINTF(tmp, OEMTEXT(" %.2x"), bin[i]); | 
 | milstr_ncat(work, tmp, size); | milstr_ncat(work, tmp, size); | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- user |  | 
 |  |  | 
 | static void inirdbyte3(const OEMCHAR *src, const PFTBL *ini) { |  | 
 |  |  | 
 | 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; |  | 
 | } |  | 
 | } |  | 
 |  |  | 
 |  |  | 
 | // ---- |  | 
 |  |  | 
 | void ini_read(const OEMCHAR *path, const OEMCHAR *title, | void ini_read(const OEMCHAR *path, const OEMCHAR *title, | 
 | const PFTBL *tbl, UINT count) { | const PFTBL *tbl, UINT count) { | 
 |  |  | 
| Line 189  const PFTBL *pterm; | Line 181  const PFTBL *pterm; | 
 |  |  | 
 | case PFTYPE_BITMAP: | case PFTYPE_BITMAP: | 
 | GetPrivateProfileString(title, p->item, | 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); | work, NELEMENTS(work), path); | 
| inisetbmp((UINT8 *)p->value, p->arg, | bitmapset((UINT8 *)p->value, p->arg, | 
 | (milstr_cmp(work, str_true) == 0)); | (milstr_cmp(work, str_true) == 0)); | 
 | break; | break; | 
 |  |  | 
| case PFTYPE_ARGS16: | case PFTYPE_BIN: | 
 | GetPrivateProfileString(title, p->item, str_null, | GetPrivateProfileString(title, p->item, str_null, | 
 | work, NELEMENTS(work), path); | work, NELEMENTS(work), path); | 
| inirdargs16(work, p); | binset((UINT8 *)p->value, p->arg, work); | 
| break; |  | 
|  |  | 
| case PFTYPE_ARGH8: |  | 
| GetPrivateProfileString(title, p->item, str_null, |  | 
| work, NELEMENTS(work), path); |  | 
| inirdargh8(work, p); |  | 
 | break; | break; | 
 |  |  | 
 | case PFTYPE_SINT8: | case PFTYPE_SINT8: | 
| Line 252  const PFTBL *pterm; | Line 238  const PFTBL *pterm; | 
 | *(UINT32 *)p->value = (UINT32)val; | *(UINT32 *)p->value = (UINT32)val; | 
 | break; | break; | 
 |  |  | 
 |  | case PFTYPE_ARGS16: | 
 |  | GetPrivateProfileString(title, p->item, str_null, | 
 |  | work, NELEMENTS(work), path); | 
 |  | inirdargs16(work, p); | 
 |  | break; | 
 |  |  | 
 | case PFTYPE_BYTE3: | case PFTYPE_BYTE3: | 
 | GetPrivateProfileString(title, p->item, str_null, | GetPrivateProfileString(title, p->item, str_null, | 
 | work, NELEMENTS(work), path); | work, NELEMENTS(work), path); | 
| Line 291  const OEMCHAR *set; | Line 283  const OEMCHAR *set; | 
 | set = (*((UINT8 *)p->value))?str_true:str_false; | set = (*((UINT8 *)p->value))?str_true:str_false; | 
 | break; | break; | 
 |  |  | 
| case PFTYPE_ARGH8: | case PFTYPE_BITMAP: | 
| iniwrsetargh8(work, NELEMENTS(work), p); | 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; | break; | 
 |  |  | 
 | case PFTYPE_SINT8: | case PFTYPE_SINT8: | 
| Line 343  const OEMCHAR *set; | Line 340  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) | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| Line 358  enum { | Line 390  enum { | 
 | PFRO_BITMAP             = PFFLAG_RO + PFTYPE_BITMAP, | PFRO_BITMAP             = PFFLAG_RO + PFTYPE_BITMAP, | 
 | PFRO_UINT8              = PFFLAG_RO + PFTYPE_UINT8, | PFRO_UINT8              = PFFLAG_RO + PFTYPE_UINT8, | 
 | PFRO_SINT32             = PFFLAG_RO + PFTYPE_SINT32, | PFRO_SINT32             = PFFLAG_RO + PFTYPE_SINT32, | 
 |  | PFRO_HEX8               = PFFLAG_RO + PFTYPE_HEX8, | 
 | PFRO_HEX32              = PFFLAG_RO + PFTYPE_HEX32, | PFRO_HEX32              = PFFLAG_RO + PFTYPE_HEX32, | 
 | PFRO_BYTE3              = PFFLAG_RO + PFTYPE_BYTE3, | PFRO_BYTE3              = PFFLAG_RO + PFTYPE_BYTE3, | 
 | PFRO_KB                 = PFFLAG_RO + PFTYPE_KB | PFRO_KB                 = PFFLAG_RO + PFTYPE_KB | 
| Line 377  static const PFTBL iniitem[] = { | Line 410  static const PFTBL iniitem[] = { | 
 | PFSTR("bmap_Dir", PFTYPE_STR,           bmpfilefolder), | PFSTR("bmap_Dir", PFTYPE_STR,           bmpfilefolder), | 
 | PFSTR("fontfile", PFTYPE_STR,           np2cfg.fontfile), | PFSTR("fontfile", PFTYPE_STR,           np2cfg.fontfile), | 
 | PFSTR("biospath", PFRO_STR,                     np2cfg.biospath), | PFSTR("biospath", PFRO_STR,                     np2cfg.biospath), | 
 |  |  | 
 |  | #if defined(SUPPORT_HOSTDRV) | 
 | PFSTR("hdrvroot", PFRO_STR,                     np2cfg.hdrvroot), | PFSTR("hdrvroot", PFRO_STR,                     np2cfg.hdrvroot), | 
 | PFVAL("hdrv_acc", PFRO_UINT8,           &np2cfg.hdrvacc), | 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_base", PFTYPE_UINT32,        &np2cfg.baseclock), | 
 | PFVAL("clk_mult", PFTYPE_UINT32,        &np2cfg.multiple), | PFVAL("clk_mult", PFTYPE_UINT32,        &np2cfg.multiple), | 
 |  |  | 
| PFEXT("DIPswtch", PFTYPE_ARGH8,         np2cfg.dipsw,                   3), | PFEXT("DIPswtch", PFTYPE_BIN,           np2cfg.dipsw,                   3), | 
| PFEXT("MEMswtch", PFTYPE_ARGH8,         np2cfg.memsw,                   8), | PFEXT("MEMswtch", PFTYPE_BIN,           np2cfg.memsw,                   8), | 
 | PFMAX("ExMemory", PFTYPE_UINT8,         &np2cfg.EXTMEM,                 63), | PFMAX("ExMemory", PFTYPE_UINT8,         &np2cfg.EXTMEM,                 63), | 
 | PFVAL("ITF_WORK", PFRO_BOOL,            &np2cfg.ITF_WORK), | PFVAL("ITF_WORK", PFRO_BOOL,            &np2cfg.ITF_WORK), | 
 |  |  | 
| Line 404  static const PFTBL iniitem[] = { | Line 440  static const PFTBL iniitem[] = { | 
 | PFAND("BEEP_vol", PFTYPE_UINT8,         &np2cfg.BEEP_VOL,               3), | PFAND("BEEP_vol", PFTYPE_UINT8,         &np2cfg.BEEP_VOL,               3), | 
 | PFVAL("xspeaker", PFRO_BOOL,            &np2cfg.snd_x), | PFVAL("xspeaker", PFRO_BOOL,            &np2cfg.snd_x), | 
 |  |  | 
| PFEXT("SND14vol", PFTYPE_ARGH8,         np2cfg.vol14,                   6), | PFEXT("SND14vol", PFTYPE_BIN,           np2cfg.vol14,                   6), | 
| //      PFEXT("opt14BRD", PFTYPE_ARGH8,         np2cfg.snd14opt,                3), | //      PFEXT("opt14BRD", PFTYPE_BIN,           np2cfg.snd14opt,                3), | 
 | PFVAL("opt26BRD", PFTYPE_HEX8,          &np2cfg.snd26opt), | PFVAL("opt26BRD", PFTYPE_HEX8,          &np2cfg.snd26opt), | 
 | PFVAL("opt86BRD", PFTYPE_HEX8,          &np2cfg.snd86opt), | PFVAL("opt86BRD", PFTYPE_HEX8,          &np2cfg.snd86opt), | 
 | PFVAL("optSPBRD", PFTYPE_HEX8,          &np2cfg.spbopt), | PFVAL("optSPBRD", PFTYPE_HEX8,          &np2cfg.spbopt), | 
| Line 429  static const PFTBL iniitem[] = { | Line 465  static const PFTBL iniitem[] = { | 
 | PFVAL("MS_RAPID", PFTYPE_BOOL,          &np2cfg.MOUSERAPID), | PFVAL("MS_RAPID", PFTYPE_BOOL,          &np2cfg.MOUSERAPID), | 
 |  |  | 
 | PFAND("backgrnd", PFTYPE_UINT8,         &np2oscfg.background,   3), | 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), | PFAND("DspClock", PFTYPE_UINT8,         &np2oscfg.DISPCLK,              3), | 
 | PFVAL("DispSync", PFTYPE_BOOL,          &np2cfg.DISPSYNC), | PFVAL("DispSync", PFTYPE_BOOL,          &np2cfg.DISPSYNC), | 
 | PFVAL("Real_Pal", PFTYPE_BOOL,          &np2cfg.RASTER), | PFVAL("Real_Pal", PFTYPE_BOOL,          &np2cfg.RASTER), | 
| Line 446  static const PFTBL iniitem[] = { | Line 482  static const PFTBL iniitem[] = { | 
 | PFAND("FG_COLOR", PFRO_HEX32,           &np2cfg.FG_COLOR,               0xffffff), | PFAND("FG_COLOR", PFRO_HEX32,           &np2cfg.FG_COLOR,               0xffffff), | 
 |  |  | 
 | PFVAL("pc9861_e", PFTYPE_BOOL,          &np2cfg.pc9861enable), | PFVAL("pc9861_e", PFTYPE_BOOL,          &np2cfg.pc9861enable), | 
| PFEXT("pc9861_s", PFTYPE_ARGH8,         np2cfg.pc9861sw,                3), | PFEXT("pc9861_s", PFTYPE_BIN,           np2cfg.pc9861sw,                3), | 
| PFEXT("pc9861_j", PFTYPE_ARGH8,         np2cfg.pc9861jmp,               6), | PFEXT("pc9861_j", PFTYPE_BIN,           np2cfg.pc9861jmp,               6), | 
 |  |  | 
 | PFVAL("calendar", PFTYPE_BOOL,          &np2cfg.calendar), | PFVAL("calendar", PFTYPE_BOOL,          &np2cfg.calendar), | 
 | PFVAL("USE144FD", PFTYPE_BOOL,          &np2cfg.usefd144), | PFVAL("USE144FD", PFTYPE_BOOL,          &np2cfg.usefd144), | 
| Line 460  static const PFTBL iniitem[] = { | Line 496  static const PFTBL iniitem[] = { | 
 | PFVAL("keyboard", PFRO_KB,                      &np2oscfg.KEYBOARD), | PFVAL("keyboard", PFRO_KB,                      &np2oscfg.KEYBOARD), | 
 | PFVAL("F12_COPY", PFTYPE_UINT8,         &np2oscfg.F12COPY), | PFVAL("F12_COPY", PFTYPE_UINT8,         &np2oscfg.F12COPY), | 
 | PFVAL("Joystick", PFTYPE_BOOL,          &np2oscfg.JOYPAD1), | 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("clocknow", PFTYPE_UINT8,         &np2oscfg.clk_x), | 
 | PFVAL("clockfnt", PFTYPE_UINT8,         &np2oscfg.clk_fnt), | PFVAL("clockfnt", PFTYPE_UINT8,         &np2oscfg.clk_fnt), | 
| Line 501  static const PFTBL iniitem[] = { | Line 537  static const PFTBL iniitem[] = { | 
 | PFVAL("force400", PFRO_BOOL,            &np2oscfg.force400), | PFVAL("force400", PFRO_BOOL,            &np2oscfg.force400), | 
 | PFVAL("e_resume", PFTYPE_BOOL,          &np2oscfg.resume), | PFVAL("e_resume", PFTYPE_BOOL,          &np2oscfg.resume), | 
 | PFVAL("STATSAVE", PFRO_BOOL,            &np2oscfg.statsave), | PFVAL("STATSAVE", PFRO_BOOL,            &np2oscfg.statsave), | 
 |  | #if !defined(_WIN64) | 
 | PFVAL("nousemmx", PFTYPE_BOOL,          &np2oscfg.disablemmx), | PFVAL("nousemmx", PFTYPE_BOOL,          &np2oscfg.disablemmx), | 
 |  | #endif | 
 | PFVAL("windtype", PFTYPE_UINT8,         &np2oscfg.wintype), | PFVAL("windtype", PFTYPE_UINT8,         &np2oscfg.wintype), | 
 | PFVAL("toolwind", PFTYPE_BOOL,          &np2oscfg.toolwin), | PFVAL("toolwind", PFTYPE_BOOL,          &np2oscfg.toolwin), | 
 | PFVAL("keydispl", PFTYPE_BOOL,          &np2oscfg.keydisp), | PFVAL("keydispl", PFTYPE_BOOL,          &np2oscfg.keydisp), | 
| Line 509  static const PFTBL iniitem[] = { | Line 547  static const PFTBL iniitem[] = { | 
 | PFVAL("useromeo", PFTYPE_BOOL,          &np2oscfg.useromeo), | PFVAL("useromeo", PFTYPE_BOOL,          &np2oscfg.useromeo), | 
 | PFVAL("thickfrm", PFTYPE_BOOL,          &np2oscfg.thickframe), | PFVAL("thickfrm", PFTYPE_BOOL,          &np2oscfg.thickframe), | 
 | PFVAL("xrollkey", PFRO_BOOL,            &np2oscfg.xrollkey), | 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("fscrnbpp", PFRO_UINT8,           &np2oscfg.fscrnbpp), | 
 |  | PFVAL("fscrnmod", PFRO_HEX8,            &np2oscfg.fscrnmod), | 
 | PFVAL("I286SAVE", PFRO_BOOL,            &np2oscfg.I286SAVE)}; | PFVAL("I286SAVE", PFRO_BOOL,            &np2oscfg.I286SAVE)}; | 
 |  |  | 
 |  |  | 
 |  | static const OEMCHAR ext_ini[] = OEMTEXT(".ini"); | 
 |  |  | 
 | void initgetfile(OEMCHAR *path, UINT size) { | void initgetfile(OEMCHAR *path, UINT size) { | 
 |  |  | 
 | const OEMCHAR   *ext; | const OEMCHAR   *ext; | 
| Line 528  const OEMCHAR *ext; | Line 571  const OEMCHAR *ext; | 
 | } | } | 
 | ext = file_getext(path); | ext = file_getext(path); | 
 | if (ext[0] != '\0') { | if (ext[0] != '\0') { | 
| file_catname(path, OEMTEXT(".ini"), size); | file_catname(path, ext_ini, size); | 
 | } | } | 
 | } | } | 
 | else { | else { | 
 | file_cutext(path); | file_cutext(path); | 
| file_catname(path, OEMTEXT(".ini"), size); | file_catname(path, ext_ini, size); | 
 | } | } | 
 | } | } | 
 |  |  |