#include	"compiler.h"
#include	"resource.h"
#include	"xmil.h"
#include	"sysmng.h"
#include	"dialog.h"
#include	"dialogs.h"
#include	"pccore.h"
void SoundDialogProc(void) {
    FormType*	frm;
	UINT		rate;
	UINT		ms;
	UINT16		slidersata, ret;
#if defined(SUPPORT_TURBOZ) || defined(SUPPORT_OPM)
	ControlType*	fmboard;
	SINT16			fm;
#endif
	ControlType*	sample;
	ControlType*	buffer;
	UINT			update = 0;
	frm = ARM_FrmInitForm(IDD_SOUNDOPT);
#if defined(SUPPORT_TURBOZ) || defined(SUPPORT_OPM)
	fmboard = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_FMBOARD));
	ARM_CtlSetValue(fmboard, xmilcfg.SOUND_SW);
#endif
	rate = xmilcfg.samplingrate;
	if (rate == 11025) {
		slidersata = 0;
	} else if (rate == 44100) {
		slidersata = 2;
	}
	else {
		slidersata = 1;
	}
	sample = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_SAMPLERATE));
	ARM_CtlSetValue(sample, slidersata);
		
	ms = xmilcfg.delayms;
	if (ms < 50) {
		ms = 50;
	}
	else if (ms > 1000) {
		ms = 1000;
	}
	buffer = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_SNDBUFFER));
	ARM_CtlSetValue(buffer, ms);
	ret = ARM_FrmDoDialog(frm);
	if (ret == IDC_OK) {
#if defined(SUPPORT_TURBOZ) || defined(SUPPORT_OPM)
		fm = ARM_CtlGetValue(fmboard);
		if (fm != xmilcfg.SOUND_SW) {
			xmilcfg.SOUND_SW = fm;
			update |= SYS_UPDATECFG;
		}
#endif
		slidersata = ARM_CtlGetValue(sample);
		if (slidersata == 0) {
			rate = 11025;
		} else if (slidersata == 2) {
			rate = 44100;
		}
		else {
			rate = 22050;
		}
		if (rate != xmilcfg.samplingrate) {
			xmilcfg.samplingrate = rate;
			update |= SYS_UPDATECFG;
		}
		ms = ARM_CtlGetValue(buffer);
		if (ms != xmilcfg.delayms) {
			xmilcfg.delayms = ms;
			update |= SYS_UPDATECFG;
		}
	}
	ARM_FrmDeleteForm(frm);
	sysmng_update(update);
}
void OptionDialogProc(void) {
    FormType*		frm;
	ControlType*	joyrev;
	ControlType*	joyrapid;
	ControlType*	keym;
	SINT16			rev, rap, skip, ret;
	UINT			update = 0;
	int				i;
	frm = ARM_FrmInitForm(IDD_OPTION);
	joyrev = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_JOYX));
	joyrapid = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_RAPID));
	keym = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_JOYSTICK+xmiloscfg.FIVEWAY));
	ARM_CtlSetValue(keym, 1);
	ARM_CtlSetValue(joyrev, xmilcfg.BTN_MODE);
	ARM_CtlSetValue(joyrapid, xmilcfg.BTN_RAPID);
	ret = ARM_FrmDoDialog(frm);
	if (ret == IDC_OK) {
		rev = ARM_CtlGetValue(joyrev);
		if (rev != xmilcfg.BTN_MODE) {
			xmilcfg.BTN_MODE = rev;
			update |= SYS_UPDATECFG;
		}
		rap = ARM_CtlGetValue(joyrapid);
		if (rap != xmilcfg.BTN_RAPID) {
			xmilcfg.BTN_RAPID = rap;
			update |= SYS_UPDATECFG;
		}
		if (ARM_CtlGetValue(keym) == 0) {
			for (i=2;i>0;i--) {
				skip = ARM_CtlGetValue(ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_JOYSTICK+i)));
				if (skip != 0) {
					break;
				}
			}
			xmiloscfg.FIVEWAY = i;
			update |= SYS_UPDATEOSCFG;
		}
	}
	ARM_FrmDeleteForm(frm);
	sysmng_update(update);
}
void ScrnOptionDialogProc(void) {
    FormType*		frm;
	ControlType*	dispsync;
	ControlType*	raster;
	ControlType*	frame;
	SINT16			sync, ras, skip, ret;
	UINT			update = 0;
	int				i;
	frm = ARM_FrmInitForm(IDD_SCRNOPT);
	dispsync = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_DISPSYNC));
	raster = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_RASTER));
	ARM_CtlSetValue(dispsync, xmilcfg.DISPSYNC);
	ARM_CtlSetValue(raster, xmilcfg.RASTER);
	frame = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_AUTO+xmiloscfg.DRAW_SKIP));
	ARM_CtlSetValue(frame, 1);
	ret = ARM_FrmDoDialog(frm);
	if (ret == IDC_OK) {
		sync = ARM_CtlGetValue(dispsync);
		if (sync != xmilcfg.DISPSYNC) {
			xmilcfg.DISPSYNC = sync;
			update |= SYS_UPDATECFG;
		}
		ras = ARM_CtlGetValue(raster);
		if (ras != xmilcfg.RASTER) {
			xmilcfg.RASTER = ras;
			update |= SYS_UPDATECFG;
		}
		if (ARM_CtlGetValue(frame) == 0) {
			for (i=4;i>0;i--) {
				skip = ARM_CtlGetValue(ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_AUTO+i)));
				if (skip != 0) {
					break;
				}
			}
			xmiloscfg.DRAW_SKIP = i;
			update |= SYS_UPDATEOSCFG;
		}
	}
	ARM_FrmDeleteForm(frm);
	sysmng_update(update);
}
void DipswDialogProc(void) {
    FormType*		frm;
	ControlType*	boot2hd;
	ControlType*	hireso;
	SINT16			boot, reso, ret;
	UINT8			dipsw;
	frm = ARM_FrmInitForm(IDD_DIPSW);
	boot2hd = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_BOOT2HD));
	hireso = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_HIGHRES));
	ARM_CtlSetValue(boot2hd, (xmilcfg.DIP_SW & DIPSW_BOOTMEDIA)?1:0);
	ARM_CtlSetValue(hireso, (xmilcfg.DIP_SW & DIPSW_RESOLUTE)?0:1);
	ret = ARM_FrmDoDialog(frm);
	if (ret == IDC_OK) {
		boot = ARM_CtlGetValue(boot2hd);
		reso = ARM_CtlGetValue(hireso);
		dipsw = ((boot)?DIPSW_BOOTMEDIA:0) | ((reso)?0:DIPSW_RESOLUTE);
		if (dipsw != xmilcfg.DIP_SW) {
			xmilcfg.DIP_SW = dipsw;
			sysmng_update(SYS_UPDATECFG);
		}
	}
	ARM_FrmDeleteForm(frm);
}
void ConfigDialogProc(void) {
    FormType*		frm;
	ControlType*	resume;
	ControlType*	graf;
	SINT16			res, fiti, ret;
	UINT			update = 0;
	frm = ARM_FrmInitForm(IDD_CONFIG);
	resume = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_RESUME));
	graf = ARM_FrmGetObjectPtr(frm, ARM_FrmGetObjectIndex(frm, IDC_GRAFFITI));
	ARM_CtlSetValue(resume, xmiloscfg.resume);
	ARM_CtlSetValue(graf, xmiloscfg.graffiti);
	ret = ARM_FrmDoDialog(frm);
	if (ret == IDC_OK) {
		fiti = ARM_CtlGetValue(graf);
		if (fiti != xmiloscfg.graffiti) {
			xmiloscfg.graffiti = fiti;
			update |= SYS_UPDATEOSCFG;
		}
		res = ARM_CtlGetValue(resume);
		if (res != xmiloscfg.resume) {
			xmiloscfg.resume = res;
			update |= SYS_UPDATEOSCFG;
		}
	}
	ARM_FrmDeleteForm(frm);
	sysmng_update(update);
}
RetroPC.NET-CVS <cvs@retropc.net>