示例#1
0
void
HmReadPrefs(int index)
{
    const char	*prm;
    const char	*defaultSettings;
    char	sstring[1024];
    int		cmd;
    float	tmp;
    tCtrlRef	*ref;
    int		i;
    int		idx = index - 1;
    tControlCmd	*cmdCtrl;

    HCtx[idx]->CmdControl = (tControlCmd *) calloc (nbCmdControl, sizeof (tControlCmd));
    cmdCtrl = HCtx[idx]->CmdControl;
    memcpy(cmdCtrl, CmdControlRef, nbCmdControl * sizeof (tControlCmd));

    sprintf(sstring, "%s%s", GetLocalDir(), HM_PREF_FILE);
    PrefHdle = GfParmReadFile(sstring, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);

    sprintf(sstring, "%s/%s/%d", HM_SECT_PREF, HM_LIST_DRV, index);
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_TRANS, HM_VAL_AUTO);
    if (strcmp(prm, HM_VAL_AUTO) == 0) {
	HCtx[idx]->Transmission = 0;
    } else {
	HCtx[idx]->Transmission = 1;
    }

    /* Parameters Settings */
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_ABS, Yn[HCtx[idx]->ParamAbs]);
    if (strcmp(prm, Yn[0]) == 0) {
	HCtx[idx]->ParamAbs = 1;
    } else {
	HCtx[idx]->ParamAbs = 0;
    }
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_ASR, Yn[HCtx[idx]->ParamAsr]);
    if (strcmp(prm, Yn[0]) == 0) {
	HCtx[idx]->ParamAsr = 1;
    } else {
	HCtx[idx]->ParamAsr = 0;
    }

    prm = GfParmGetStr(PrefHdle, HM_SECT_PREF, HM_ATT_CONTROL, controlList[2].parmName);
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_CONTROL, prm);
    for (i = 0; i < nbControl; i++) {
	if (!strcmp(prm, controlList[i].parmName)) {
	    break;
	}
    }
    if (i == nbControl) {
	i = 2;
    }
    if ((i == 0) && !joyPresent) {
	i = 2;
    }

    defaultSettings = controlList[i].settings;

    /* Command Settings */
    for (cmd = 0; cmd < nbCmdControl; cmd++) {
	prm = GfctrlGetNameByRef(cmdCtrl[cmd].type, cmdCtrl[cmd].val);
	prm = GfParmGetStr(PrefHdle, defaultSettings, cmdCtrl[cmd].name, prm);
	prm = GfParmGetStr(PrefHdle, sstring, cmdCtrl[cmd].name, prm);
	if (!prm || (strlen(prm) == 0)) {
	    cmdCtrl[cmd].type = GFCTRL_TYPE_NOT_AFFECTED;
	    GfOut("%s -> NONE (-1)\n", cmdCtrl[cmd].name);
	    continue;
	}
	ref = GfctrlGetRefByName(prm);
	cmdCtrl[cmd].type = ref->type;
	cmdCtrl[cmd].val = ref->index;
	GfOut("%s -> %s\n", cmdCtrl[cmd].name, prm);

	if (cmdCtrl[cmd].minName) {
	    cmdCtrl[cmd].min = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].minName, (char*)NULL, (tdble)cmdCtrl[cmd].min);
	    cmdCtrl[cmd].min = cmdCtrl[cmd].minVal = (float)GfParmGetNum(PrefHdle, sstring, cmdCtrl[cmd].minName, (char*)NULL, (tdble)cmdCtrl[cmd].min);
	}
	if (cmdCtrl[cmd].maxName) {
	    cmdCtrl[cmd].max = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].maxName, (char*)NULL, (tdble)cmdCtrl[cmd].max);
	    cmdCtrl[cmd].max = (float)GfParmGetNum(PrefHdle, sstring,         cmdCtrl[cmd].maxName, (char*)NULL, (tdble)cmdCtrl[cmd].max);
	}	
	if (cmdCtrl[cmd].sensName) {
	    cmdCtrl[cmd].sens = 1.0f / (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].sensName, (char*)NULL, 1.0 / (tdble)cmdCtrl[cmd].sens);
	    cmdCtrl[cmd].sens = 1.0f / (float)GfParmGetNum(PrefHdle, sstring,         cmdCtrl[cmd].sensName, (char*)NULL, 1.0 / (tdble)cmdCtrl[cmd].sens);
	}	
	if (cmdCtrl[cmd].powName) {
	    cmdCtrl[cmd].pow = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].powName, (char*)NULL, (tdble)cmdCtrl[cmd].pow);
	    cmdCtrl[cmd].pow = (float)GfParmGetNum(PrefHdle, sstring,         cmdCtrl[cmd].powName, (char*)NULL, (tdble)cmdCtrl[cmd].pow);
	}
	if (cmdCtrl[cmd].spdSensName) {
	    cmdCtrl[cmd].spdSens = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].spdSensName, (char*)NULL, (tdble)cmdCtrl[cmd].spdSens);
	    cmdCtrl[cmd].spdSens = (float)GfParmGetNum(PrefHdle, sstring,         cmdCtrl[cmd].spdSensName, (char*)NULL, (tdble)cmdCtrl[cmd].spdSens);
	    cmdCtrl[cmd].spdSens = cmdCtrl[cmd].spdSens / 100.0;
	}
	if (cmdCtrl[cmd].deadZoneName) {
	    cmdCtrl[cmd].deadZone = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].deadZoneName, (char*)NULL, (tdble)cmdCtrl[cmd].deadZone);
	    cmdCtrl[cmd].deadZone = (float)GfParmGetNum(PrefHdle, sstring,         cmdCtrl[cmd].deadZoneName, (char*)NULL, (tdble)cmdCtrl[cmd].deadZone);
	}
	if (cmdCtrl[cmd].min > cmdCtrl[cmd].max) {
	    tmp = cmdCtrl[cmd].min;
	    cmdCtrl[cmd].min = cmdCtrl[cmd].max;
	    cmdCtrl[cmd].max = tmp;
	}
	cmdCtrl[cmd].deadZone = (cmdCtrl[cmd].max - cmdCtrl[cmd].min) * cmdCtrl[cmd].deadZone;
	if (cmdCtrl[cmd].type == GFCTRL_TYPE_MOUSE_AXIS) {
	    HCtx[idx]->MouseControlUsed = 1;
	}
    }

    prm = GfParmGetStr(PrefHdle, defaultSettings, HM_ATT_REL_BUT_NEUTRAL, Yn[HCtx[idx]->RelButNeutral]);
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_REL_BUT_NEUTRAL, prm);
    if (strcmp(prm, Yn[0]) == 0) {
	HCtx[idx]->RelButNeutral = 1;
    } else {
	HCtx[idx]->RelButNeutral = 0;
    }

    prm = GfParmGetStr(PrefHdle, defaultSettings, HM_ATT_SEQSHFT_ALLOW_NEUTRAL, Yn[HCtx[idx]->SeqShftAllowNeutral]);
    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_SEQSHFT_ALLOW_NEUTRAL, prm);
    if (strcmp(prm, Yn[0]) == 0) {
	HCtx[idx]->SeqShftAllowNeutral = 1;
    } else {
	HCtx[idx]->SeqShftAllowNeutral = 0;
    }

    prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_AUTOREVERSE, Yn[HCtx[idx]->AutoReverse]);
    if (strcmp(prm, Yn[0]) == 0) {
	HCtx[idx]->AutoReverse = 1;
    } else {
	HCtx[idx]->AutoReverse = 0;
    }
}
示例#2
0
void
HmReadPrefs(const int index)
{
	const char	*prm;
	const char	*defaultSettings;
	char	sstring[1024];
	tCtrlRef	*ref;
	const int	idx = index - 1;
	tControlCmd	*cmdCtrl;

	cmdCtrl = HCtx[idx]->cmdControl = (tControlCmd *) calloc (NbCmdControl, sizeof (tControlCmd));
	memcpy(cmdCtrl, CmdControlRef, NbCmdControl * sizeof (tControlCmd));

	sprintf(sstring, "%s%s", GfLocalDir(), HM_PREF_FILE);
	PrefHdle = GfParmReadFile(sstring, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);
	sprintf(sstring, "%s/%s/%d", HM_SECT_PREF, HM_LIST_DRV, index);
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_TRANS, HM_VAL_AUTO);
	if (!strcmp(prm, HM_VAL_AUTO))
		HCtx[idx]->transmission = eTransAuto;
	else if (!strcmp(prm, HM_VAL_SEQ))
		HCtx[idx]->transmission = eTransSeq;
	else if (!strcmp(prm, HM_VAL_HBOX))
		HCtx[idx]->transmission = eTransHbox;
	else
		HCtx[idx]->transmission = eTransGrid;

	/* Parameters Settings */
	//ABS on/off
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_ABS, Yn[HCtx[idx]->paramAbs].c_str());
	HCtx[idx]->paramAbs = (prm == Yn[0]);
	
	//ASR on/off
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_ASR, Yn[HCtx[idx]->paramAsr].c_str());
	HCtx[idx]->paramAsr = (prm == Yn[0]);
	
	//Controls
	prm = GfParmGetStr(PrefHdle, HM_SECT_PREF, HM_ATT_CONTROL, controlList[2].parmName);
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_CONTROL, prm);
	int i;
	for (i = 0; i < nbControl; i++) {
		if (!strcmp(prm, controlList[i].parmName))
			break;
	}//for i
	
	if (i == nbControl)
		i = 2;
	
	if (i == 0 && !joyPresent)
		i = 2;
	
	defaultSettings = controlList[i].settings;
	
	/* Command Settings */
	GfOut("Command settings :\n");
	for (int cmd = 0; cmd < NbCmdControl; cmd++) {
		
		prm = GfctrlGetNameByRef(cmdCtrl[cmd].type, cmdCtrl[cmd].val);
		prm = GfParmGetStr(PrefHdle, defaultSettings, cmdCtrl[cmd].name, prm);
		prm = GfParmGetStr(PrefHdle, sstring, cmdCtrl[cmd].name, prm);
		if (!prm || strlen(prm) == 0) {
			cmdCtrl[cmd].type = GFCTRL_TYPE_NOT_AFFECTED;
			GfOut("  %s\t: None (-1)\n", cmdCtrl[cmd].name);
			continue;
		}
		
		ref = GfctrlGetRefByName(prm);
		cmdCtrl[cmd].type = ref->type; // GFCTRL_TYPE_XX
		cmdCtrl[cmd].val = ref->index; // Index for joy. axis, buttons ; 1-bytes ASCII code for keys.
		GfOut("  %s\t: %s\n", cmdCtrl[cmd].name, prm);
	
		/* min value < max value */
		if (cmdCtrl[cmd].minName) {
			cmdCtrl[cmd].min = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].minName, (char*)NULL, (tdble)cmdCtrl[cmd].min);
			cmdCtrl[cmd].min = cmdCtrl[cmd].minVal = (float)GfParmGetNum(PrefHdle, sstring, cmdCtrl[cmd].minName, (char*)NULL, (tdble)cmdCtrl[cmd].min);
		}//if minName
	
		/* max value > min value */
		if (cmdCtrl[cmd].maxName) {
			cmdCtrl[cmd].max = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].maxName, (char*)NULL, (tdble)cmdCtrl[cmd].max);
			cmdCtrl[cmd].max = (float)GfParmGetNum(PrefHdle, sstring,		 cmdCtrl[cmd].maxName, (char*)NULL, (tdble)cmdCtrl[cmd].max);
		}//if maxName
	
		/* 0 < sensitivity */
		if (cmdCtrl[cmd].sensName) {
			cmdCtrl[cmd].sens = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].sensName, (char*)NULL, (tdble)cmdCtrl[cmd].sens);
			cmdCtrl[cmd].sens = (float)GfParmGetNum(PrefHdle, sstring,		 cmdCtrl[cmd].sensName, (char*)NULL, (tdble)cmdCtrl[cmd].sens);
			if (cmdCtrl[cmd].sens <= 0.0)
				cmdCtrl[cmd].sens = 1.0e-6;
		}//if sensName
	
		/* 0 < power (1 = linear) */
		if (cmdCtrl[cmd].powName) {
			cmdCtrl[cmd].pow = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].powName, (char*)NULL, (tdble)cmdCtrl[cmd].pow);
			cmdCtrl[cmd].pow = (float)GfParmGetNum(PrefHdle, sstring,		 cmdCtrl[cmd].powName, (char*)NULL, (tdble)cmdCtrl[cmd].pow);
		}//if powName

		/* 0 <= sensitivity to car speed */
		if (cmdCtrl[cmd].spdSensName) {
			cmdCtrl[cmd].spdSens = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].spdSensName, (char*)NULL, (tdble)cmdCtrl[cmd].spdSens);
			cmdCtrl[cmd].spdSens = (float)GfParmGetNum(PrefHdle, sstring,		 cmdCtrl[cmd].spdSensName, (char*)NULL, (tdble)cmdCtrl[cmd].spdSens);
			if (cmdCtrl[cmd].spdSens < 0.0)
				cmdCtrl[cmd].spdSens = 0.0;
		}//if spdSendName

		/* 0 =< dead zone < max value - min value (not used for on/off controls like keyboard / mouse buttons / joystick buttons) */
		if (cmdCtrl[cmd].deadZoneName) {
			cmdCtrl[cmd].deadZone = (float)GfParmGetNum(PrefHdle, defaultSettings, cmdCtrl[cmd].deadZoneName, (char*)NULL, (tdble)cmdCtrl[cmd].deadZone);
			cmdCtrl[cmd].deadZone = (float)GfParmGetNum(PrefHdle, sstring,		 cmdCtrl[cmd].deadZoneName, (char*)NULL, (tdble)cmdCtrl[cmd].deadZone);
			if (cmdCtrl[cmd].deadZone < 0.0)
				cmdCtrl[cmd].deadZone = 0.0;
			else if (cmdCtrl[cmd].deadZone > 1.0)
				cmdCtrl[cmd].deadZone = 1.0;
		}//if deadZoneName
	
		if (cmdCtrl[cmd].min > cmdCtrl[cmd].max)
			std::swap(cmdCtrl[cmd].min, cmdCtrl[cmd].max);
	
		//cmdCtrl[cmd].deadZone = (cmdCtrl[cmd].max - cmdCtrl[cmd].min) * cmdCtrl[cmd].deadZone;
		
		if (cmdCtrl[cmd].type == GFCTRL_TYPE_MOUSE_AXIS)
			HCtx[idx]->mouseControlUsed = 1;
		
	}//for cmd

	prm = GfParmGetStr(PrefHdle, defaultSettings, HM_ATT_REL_BUT_NEUTRAL, Yn[HCtx[idx]->relButNeutral].c_str());
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_REL_BUT_NEUTRAL, prm);
	HCtx[idx]->relButNeutral = (prm == Yn[0]);
	
	prm = GfParmGetStr(PrefHdle, defaultSettings, HM_ATT_SEQSHFT_ALLOW_NEUTRAL, Yn[HCtx[idx]->seqShftAllowNeutral].c_str());
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_SEQSHFT_ALLOW_NEUTRAL, prm);
	HCtx[idx]->seqShftAllowNeutral = (prm == Yn[0]);

	prm = GfParmGetStr(PrefHdle, defaultSettings, HM_ATT_SEQSHFT_ALLOW_REVERSE, Yn[HCtx[idx]->seqShftAllowReverse].c_str());
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_SEQSHFT_ALLOW_REVERSE, prm);
	HCtx[idx]->seqShftAllowReverse = (prm == Yn[0]);
	
	prm = GfParmGetStr(PrefHdle, sstring, HM_ATT_AUTOREVERSE, Yn[HCtx[idx]->autoReverse].c_str());
	HCtx[idx]->autoReverse = (prm == Yn[0]);
}//HmReadPrefs