static void onActivate(void * /* dummy */) { int i; int index; int step; CalState = 0; GfuiLabelSetText(scrHandle2, InstId, Instructions[CalState]); glutIdleFunc(Idle2); glutPostRedisplay(); for (index = 0; index < NUM_JOY; index++) { if (js[index]) { js[index]->read(&rawb[index], &ax[index * _JS_MAX_AXES]); /* initial value */ } } for (i = 0; i < 4; i++) { if (i > 0) { step = i + 2; } else { step = i + 1; } if (Cmd[step + OFFSET_CMD].ref.type == GFCTRL_TYPE_JOY_AXIS) { GfuiLabelSetText(scrHandle2, LabAxisId[i], GfctrlGetNameByRef(GFCTRL_TYPE_JOY_AXIS, Cmd[step + OFFSET_CMD].ref.index)); } else { GfuiLabelSetText(scrHandle2, LabAxisId[i], "---"); } GfuiLabelSetText(scrHandle2, LabMinId[i], ""); GfuiLabelSetText(scrHandle2, LabMaxId[i], ""); } }
static void advanceStep (void) { int i; int nextAxis = GFCTRL_JOY_NUMBER * GFCTRL_JOY_MAX_AXES; AtobCount++; if (CalState <= 0) { CalState++; AtobCount = 0; } /* scan through cmds looking for the next ATOB on this axis */ while (AtobCount <= CMD_END_OF_LIST) { if (Cmd[AtobCount].ref.type == GFCTRL_TYPE_JOY_ATOB && Cmd[AtobCount].ref.index == AtobAxis) { GfuiLabelSetText(ScrHandle, AtobCommandID, Cmd[AtobCount].name); return; } AtobCount++; } /* Pause briefly to compute thresholds */ if (CalState ==2) { CalState = 3; return; } /* no more new ATOBs for this axis, scan for next smallest axis */ AtobCount = 0; for (i = 0; i <= CMD_END_OF_LIST; i++) { if (Cmd[i].ref.type == GFCTRL_TYPE_JOY_ATOB && nextAxis > Cmd[i].ref.index && AtobAxis < Cmd[i].ref.index) { nextAxis = Cmd[i].ref.index; AtobCount ++; } } if (AtobCount) { AtobAxis = nextAxis; /* find first command on new axis */ for (AtobCount = 0; AtobCount <= CMD_END_OF_LIST; AtobCount++) { if (Cmd[AtobCount].ref.type == GFCTRL_TYPE_JOY_ATOB && Cmd[AtobCount].ref.index == AtobAxis) { GfuiLabelSetText(ScrHandle, AtobAxisID, GfctrlGetNameByRef(GFCTRL_TYPE_JOY_ATOB, AtobAxis)); GfuiLabelSetText(ScrHandle, AtobCommandID, Cmd[AtobCount].name); CalState = 1; return; } } } /* no more ATOBs found, we're done */ }
static void onActivate(void * /* dummy */) { int i; int index; // Create and test joysticks ; only keep the up and running ones. for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { Joystick[index] = new jsJoystick(index); if (Joystick[index]->notWorking()) { /* don't configure the joystick */ delete Joystick[index]; Joystick[index] = 0; } } CalState = 0; AtobAxis = GFCTRL_JOY_NUMBER * GFCTRL_JOY_MAX_AXES;; /* Find commands which are ATOB */ for (i = 0; i <= CMD_END_OF_LIST; i++) { if (Cmd[i].ref.type == GFCTRL_TYPE_JOY_ATOB) { if (AtobAxis > Cmd[i].ref.index) AtobAxis = Cmd[i].ref.index; } } for (AtobCount = 0; AtobCount <= CMD_END_OF_LIST; AtobCount++) { if (Cmd[AtobCount].ref.index == AtobAxis) break; } /* Set label titles */ GfuiLabelSetText(ScrHandle, AtobAxisID, GfctrlGetNameByRef(GFCTRL_TYPE_JOY_ATOB, AtobAxis)); GfuiLabelSetText(ScrHandle, AtobCommandID, "---"); GfuiLabelSetText(ScrHandle, InstId, Instructions[CalState]); GfuiApp().eventLoop().setRecomputeCB(Idle2); GfuiApp().eventLoop().postRedisplay(); for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { if (Joystick[index]) { Joystick[index]->read(&JoyButtons[index], &JoyAxis[index * GFCTRL_JOY_MAX_AXES]); /* initial value */ } } GfuiEnable(ScrHandle, CancelBut, GFUI_ENABLE); if (DoneBut) GfuiEnable(ScrHandle, DoneBut, GFUI_DISABLE); else GfuiEnable(ScrHandle, NextBut, GFUI_DISABLE); }
static void onActivate(void * /* dummy */) { int i; int index; int step; // Create and test joysticks ; only keep the up and running ones. for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { Joystick[index] = new jsJoystick(index); if (Joystick[index]->notWorking()) { /* don't configure the joystick */ delete Joystick[index]; Joystick[index] = 0; } } CalState = 0; GfuiLabelSetText(ScrHandle, InstId, Instructions[CalState]); GfuiApp().eventLoop().setRecomputeCB(Idle2); GfuiApp().eventLoop().postRedisplay(); for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { if (Joystick[index]) { Joystick[index]->read(&JoyButtons[index], &JoyAxis[index * GFCTRL_JOY_MAX_AXES]); /* initial value */ } } for (i = 0; i < NbMaxCalAxis; i++) { if (i > 0) { step = i + 2; } else { step = i + 1; } if (Cmd[step + CmdOffset].ref.type == GFCTRL_TYPE_JOY_AXIS) { GfuiLabelSetText(ScrHandle, LabAxisId[i], GfctrlGetNameByRef(GFCTRL_TYPE_JOY_AXIS, Cmd[step + CmdOffset].ref.index)); } else { GfuiLabelSetText(ScrHandle, LabAxisId[i], "---"); } GfuiLabelSetText(ScrHandle, LabMinId[i], ""); GfuiLabelSetText(ScrHandle, LabMaxId[i], ""); } GfuiEnable(ScrHandle, CancelBut, GFUI_ENABLE); if (DoneBut) GfuiEnable(ScrHandle, DoneBut, GFUI_DISABLE); else GfuiEnable(ScrHandle, NextBut, GFUI_DISABLE); }
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; } }
static void Idle2(void) { int index; #if SDL_JOYSTICK /* Check for activity on Joystick buttons */ GfctrlJoyGetCurrentStates(&joyInfo); for (index = 0; index < GFCTRL_JOY_NUMBER * GFCTRL_JOY_MAX_BUTTONS; index++) { if (joyInfo.edgedn[index]) { /* Check whether to ignore */ if(Cmd[CalState + CmdOffset].butIgnore == index) break; /* Button fired */ JoyCalAutomaton(); if (CalState >= NbCalSteps) { GfuiApp().eventLoop().setRecomputeCB(0); } GfuiApp().eventLoop().postRedisplay(); return; } #else int mask; int b, i; for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { if (Joystick[index]) { Joystick[index]->read(&b, &JoyAxis[index * GFCTRL_JOY_MAX_AXES]); /* Joystick buttons */ for (i = 0, mask = 1; i < 32; i++, mask *= 2) { if (((b & mask) != 0) && ((JoyButtons[index] & mask) == 0)) { /* Check whether to ignore */ if(Cmd[CalState + CmdOffset].butIgnore == i + 32 * index) break; /* Button fired */ JoyCalAutomaton(); if (CalState >= NbCalSteps) { GfuiApp().eventLoop().setRecomputeCB(0); } GfuiApp().eventLoop().postRedisplay(); JoyButtons[index] = b; return; } } JoyButtons[index] = b; } #endif } /* Let CPU take breath (and fans stay at low and quite speed) */ GfSleep(0.001); } static void onActivate(void * /* dummy */) { int i; int step; #if SDL_JOYSTICK //joyInfo = GfctrlJoyCreate(); GfctrlJoyGetCurrentStates(&joyInfo); #else int index; // Create and test joysticks ; only keep the up and running ones. for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { Joystick[index] = new jsJoystick(index); if (Joystick[index]->notWorking()) { /* don't configure the joystick */ delete Joystick[index]; Joystick[index] = 0; } } #endif CalState = 0; GfuiLabelSetText(ScrHandle, InstId, Instructions[CalState]); GfuiApp().eventLoop().setRecomputeCB(Idle2); GfuiApp().eventLoop().postRedisplay(); #ifndef SDL_JOYSTICK for (index = 0; index < GFCTRL_JOY_NUMBER; index++) { if (Joystick[index]) { Joystick[index]->read(&JoyButtons[index], &JoyAxis[index * GFCTRL_JOY_MAX_AXES]); /* initial value */ } } #endif for (i = 0; i < NbMaxCalAxis; i++) { if (i > 0) { step = i + 2; } else { step = i + 1; } if (Cmd[step + CmdOffset].ref.type == GFCTRL_TYPE_JOY_AXIS) { GfuiLabelSetText(ScrHandle, LabAxisId[i], GfctrlGetNameByRef(GFCTRL_TYPE_JOY_AXIS, Cmd[step + CmdOffset].ref.index)); } else { GfuiLabelSetText(ScrHandle, LabAxisId[i], "---"); } GfuiLabelSetText(ScrHandle, LabMinId[i], ""); GfuiLabelSetText(ScrHandle, LabMaxId[i], ""); } GfuiEnable(ScrHandle, CancelBut, GFUI_ENABLE); if (DoneBut) GfuiEnable(ScrHandle, DoneBut, GFUI_DISABLE); else GfuiEnable(ScrHandle, NextBut, GFUI_DISABLE); }
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