| version 1.1, 2004/08/08 12:26:19 | version 1.4, 2005/02/04 06:42:12 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 | #include        <windowsx.h> |  | 
 | #include        <io.h> |  | 
 | #include        "strres.h" | #include        "strres.h" | 
 |  | #include        "profile.h" | 
 | #include        "xmil.h" | #include        "xmil.h" | 
 | #include        "oemtext.h" |  | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "ini.h" | #include        "ini.h" | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 |  |  | 
 |  |  | 
| void ini_read(const OEMCHAR *path, const OEMCHAR *title, | static const char ini_title[] = "Xmillennium"; | 
| const INITBL *tbl, UINT count) { |  | 
|  |  | 
| const INITBL    *p; |  | 
| const INITBL    *pterm; |  | 
| #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, item, (OEMCHAR *)p->value, |  | 
| (OEMCHAR *)p->value, p->arg, path); |  | 
| break; |  | 
|  |  | 
| case INITYPE_BOOL: |  | 
| 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_SINT8: |  | 
| case INITYPE_UINT8: |  | 
| 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, item, |  | 
| *(UINT16 *)p->value, path); |  | 
| *(UINT16 *)p->value = (UINT16)val; |  | 
| break; |  | 
|  |  | 
| case INITYPE_SINT32: |  | 
| case INITYPE_UINT32: |  | 
| val = (UINT32)GetPrivateProfileInt(title, item, |  | 
| *(UINT32 *)p->value, path); |  | 
| *(UINT32 *)p->value = (UINT32)val; |  | 
| break; |  | 
|  |  | 
| case INITYPE_HEX8: |  | 
| SPRINTF(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, 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, item, work, |  | 
| work, NELEMENTS(work), path); |  | 
| val = (UINT32)milstr_solveHEX(work); |  | 
| *(UINT32 *)p->value = (UINT32)val; |  | 
| break; |  | 
| } |  | 
| p++; |  | 
| } |  | 
| } |  | 
|  |  | 
| void ini_write(const OEMCHAR *path, const OEMCHAR *title, |  | 
| const INITBL *tbl, UINT count) { |  | 
|  |  | 
| const INITBL    *p; |  | 
| const INITBL    *pterm; |  | 
| const OEMCHAR   *set; |  | 
| OEMCHAR         work[512]; |  | 
|  |  | 
| p = tbl; |  | 
| pterm = tbl + count; |  | 
| while(p < pterm) { |  | 
| if (!(p->itemtype & INIFLAG_RO)) { |  | 
| work[0] = '\0'; |  | 
| set = work; |  | 
| switch(p->itemtype & INITYPE_MASK) { |  | 
| case INITYPE_STR: |  | 
| set = (OEMCHAR *)p->value; |  | 
| break; |  | 
|  |  | 
| case INITYPE_BOOL: |  | 
| set = (*((UINT8 *)p->value))?str_true:str_false; |  | 
| break; |  | 
|  |  | 
| case INITYPE_SINT8: |  | 
| SPRINTF(work, str_d, *((SINT8 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_SINT16: |  | 
| SPRINTF(work, str_d, *((SINT16 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_SINT32: |  | 
| SPRINTF(work, str_d, *((SINT32 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_UINT8: |  | 
| SPRINTF(work, str_u, *((UINT8 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_UINT16: |  | 
| SPRINTF(work, str_u, *((UINT16 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_UINT32: |  | 
| SPRINTF(work, str_u, *((UINT32 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_HEX8: |  | 
| SPRINTF(work, str_x, *((UINT8 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_HEX16: |  | 
| SPRINTF(work, str_x, *((UINT16 *)p->value)); |  | 
| break; |  | 
|  |  | 
| case INITYPE_HEX32: |  | 
| SPRINTF(work, str_x, *((UINT32 *)p->value)); |  | 
| break; |  | 
|  |  | 
| default: |  | 
| set = NULL; |  | 
| 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++; |  | 
| } |  | 
| } |  | 
|  |  | 
|  |  | 
| // ---- |  | 
|  |  | 
| static const OEMCHAR ini_title[] = OEMTEXT("Xmillennium"); |  | 
 |  |  | 
 | enum { | enum { | 
| INIRO_BOOL                      = INITYPE_BOOL + INIFLAG_RO, | PFRO_BOOL               = PFTYPE_BOOL + PFFLAG_RO, | 
| INIMAX_UINT8            = INITYPE_UINT8 + INIFLAG_MAX, | PFMAX_UINT8             = PFTYPE_UINT8 + PFFLAG_MAX, | 
| INIAND_UINT8            = INITYPE_UINT8 + INIFLAG_AND, | PFAND_UINT8             = PFTYPE_UINT8 + PFFLAG_AND, | 
| INIROAND_HEX32          = INITYPE_HEX32 + INIFLAG_RO + INIFLAG_AND | PFROAND_HEX32   = PFTYPE_HEX32 + PFFLAG_RO + PFFLAG_AND | 
 | }; | }; | 
 |  |  | 
| static const INITBL iniitem[] = { | static const PFTBL iniitem[] = { | 
| {"WindposX", INITYPE_SINT32,    &xmiloscfg.winx,                0}, | {"WindposX", PFTYPE_SINT32,             &xmiloscfg.winx,                0}, | 
| {"WindposY", INITYPE_SINT32,    &xmiloscfg.winy,                0}, | {"WindposY", PFTYPE_SINT32,             &xmiloscfg.winy,                0}, | 
| {"DspClock", INIAND_UINT8,              &xmiloscfg.DISPCLK,             0x03}, | {"DspClock", PFAND_UINT8,               &xmiloscfg.DISPCLK,             0x03}, | 
| {"s_NOWAIT", INITYPE_BOOL,              &xmiloscfg.NOWAIT,              0}, | {"s_NOWAIT", PFTYPE_BOOL,               &xmiloscfg.NOWAIT,              0}, | 
| {"SkpFrame", INITYPE_UINT8,             &xmiloscfg.DRAW_SKIP,   0}, | {"SkpFrame", PFTYPE_UINT8,              &xmiloscfg.DRAW_SKIP,   0}, | 
| {"FDfolder", INITYPE_STR,               fddfolder,                              MAX_PATH}, | {"FDfolder", PFTYPE_STR,                fddfolder,                              MAX_PATH}, | 
| {"bmap_Dir", INITYPE_STR,               bmpfilefolder,                  MAX_PATH}, | {"bmap_Dir", PFTYPE_STR,                bmpfilefolder,                  MAX_PATH}, | 
|  |  | 
| {"IPL_TYPE", INIMAX_UINT8,              &xmilcfg.ROM_TYPE,              3}, | {"IPL_TYPE", PFMAX_UINT8,               &xmilcfg.ROM_TYPE,              3}, | 
| {"cpu_8MHz", INITYPE_BOOL,              &xmilcfg.CPU8MHz,               0}, | {"Resolute", PFTYPE_HEX8,               &xmilcfg.DIP_SW,                0}, | 
| {"Resolute", INITYPE_HEX8,              &xmilcfg.DIP_SW,                0}, |  | 
|  | {"DispSync", PFTYPE_BOOL,               &xmilcfg.DISPSYNC,              0}, | 
| {"DispSync", INITYPE_BOOL,              &xmilcfg.DISPSYNC,              0}, | {"Real_Pal", PFTYPE_BOOL,               &xmilcfg.RASTER,                0}, | 
| {"Real_Pal", INITYPE_BOOL,              &xmilcfg.RASTER,                0}, | {"skipline", PFTYPE_BOOL,               &xmilcfg.skipline,              0}, | 
| {"skipline", INITYPE_BOOL,              &xmilcfg.skipline,              0}, | {"skplight", PFTYPE_UINT16,             &xmilcfg.skiplight,             0}, | 
| {"skplight", INITYPE_UINT16,    &xmilcfg.skiplight,             0}, |  | 
|  | {"SampleHz", PFTYPE_UINT16,             &xmilcfg.samplingrate,  0}, | 
| {"SampleHz", INITYPE_UINT16,    &xmilcfg.samplingrate,  0}, | {"Latencys", PFTYPE_UINT16,             &xmilcfg.delayms,               0}, | 
| {"Latencys", INITYPE_UINT16,    &xmilcfg.delayms,               0}, | #if defined(SUPPORT_TURBOZ) || defined(SUPPORT_OPM) | 
| {"OPMsound", INITYPE_BOOL,              &xmilcfg.SOUND_SW,              0}, | {"OPMsound", PFTYPE_BOOL,               &xmilcfg.SOUND_SW,              0}, | 
| {"Seek_Snd", INITYPE_BOOL,              &xmilcfg.MOTOR,                 0}, | #endif | 
| {"Seek_Vol", INIMAX_UINT8,              &xmilcfg.MOTORVOL,              100}, | {"Seek_Snd", PFTYPE_BOOL,               &xmilcfg.MOTOR,                 0}, | 
|  | {"Seek_Vol", PFMAX_UINT8,               &xmilcfg.MOTORVOL,              100}, | 
| {"MouseInt", INITYPE_BOOL,              &xmilcfg.MOUSE_SW,              0}, |  | 
| {"btnRAPID", INITYPE_BOOL,              &xmilcfg.BTN_RAPID,             0}, | {"MouseInt", PFTYPE_BOOL,               &xmilcfg.MOUSE_SW,              0}, | 
| {"btn_MODE", INITYPE_BOOL,              &xmilcfg.BTN_MODE,              0}, | {"btnRAPID", PFTYPE_BOOL,               &xmilcfg.BTN_RAPID,             0}, | 
|  | {"btn_MODE", PFTYPE_BOOL,               &xmilcfg.BTN_MODE,              0}, | 
 |  |  | 
| {"Joystick", INITYPE_BOOL,              &xmiloscfg.JOYSTICK,    0}, | {"Joystick", PFTYPE_BOOL,               &xmiloscfg.JOYSTICK,    0}, | 
| {"Z80_SAVE", INIRO_BOOL,                &xmiloscfg.Z80SAVE,             0}}; | {"Z80_SAVE", PFRO_BOOL,                 &xmiloscfg.Z80SAVE,             0}}; | 
 |  |  | 
 |  |  | 
| static void initgetfile(OEMCHAR *path, UINT size) { | void initgetfile(OEMCHAR *path, UINT size) { | 
 |  |  | 
 | file_cpyname(path, modulefile, size); | file_cpyname(path, modulefile, size); | 
 | file_cutext(path); | file_cutext(path); | 
| Line 225  void initload(void) { | Line 61  void initload(void) { | 
 | OEMCHAR path[MAX_PATH]; | OEMCHAR path[MAX_PATH]; | 
 |  |  | 
 | initgetfile(path, NELEMENTS(path)); | initgetfile(path, NELEMENTS(path)); | 
| ini_read(path, ini_title, iniitem, NELEMENTS(iniitem)); | profile_iniread(path, ini_title, iniitem, NELEMENTS(iniitem), NULL); | 
 | } | } | 
 |  |  | 
 | void initsave(void) { | void initsave(void) { | 
| Line 233  void initsave(void) { | Line 69  void initsave(void) { | 
 | OEMCHAR path[MAX_PATH]; | OEMCHAR path[MAX_PATH]; | 
 |  |  | 
 | initgetfile(path, NELEMENTS(path)); | initgetfile(path, NELEMENTS(path)); | 
| ini_write(path, ini_title, iniitem, NELEMENTS(iniitem)); | profile_iniwrite(path, ini_title, iniitem, NELEMENTS(iniitem), NULL); | 
 | } | } | 
 |  |  |