|
|
| version 1.1, 2004/08/08 12:26:19 | version 1.3, 2004/08/20 08:41:41 |
|---|---|
| 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}, | {"OPMsound", PFTYPE_BOOL, &xmilcfg.SOUND_SW, 0}, |
| {"OPMsound", INITYPE_BOOL, &xmilcfg.SOUND_SW, 0}, | {"Seek_Snd", PFTYPE_BOOL, &xmilcfg.MOTOR, 0}, |
| {"Seek_Snd", INITYPE_BOOL, &xmilcfg.MOTOR, 0}, | {"Seek_Vol", PFMAX_UINT8, &xmilcfg.MOTORVOL, 100}, |
| {"Seek_Vol", INIMAX_UINT8, &xmilcfg.MOTORVOL, 100}, | |
| {"MouseInt", PFTYPE_BOOL, &xmilcfg.MOUSE_SW, 0}, | |
| {"MouseInt", INITYPE_BOOL, &xmilcfg.MOUSE_SW, 0}, | {"btnRAPID", PFTYPE_BOOL, &xmilcfg.BTN_RAPID, 0}, |
| {"btnRAPID", INITYPE_BOOL, &xmilcfg.BTN_RAPID, 0}, | {"btn_MODE", PFTYPE_BOOL, &xmilcfg.BTN_MODE, 0}, |
| {"btn_MODE", INITYPE_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 59 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 67 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); |
| } | } |