|
|
@@ -710,22 +710,33 @@ bool opencl_set_intensity_from_str(struct cgpu_info * const cgpu, const char *_v
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
- if (isdigit(_val[0]))
|
|
|
{
|
|
|
- const double v = atof(_val);
|
|
|
- opencl_calc_intensity_range();
|
|
|
- if (v < min_intensity || v > max_intensity)
|
|
|
- return false;
|
|
|
- oclthreads = 1;
|
|
|
- intensity = v;
|
|
|
+ char *endptr;
|
|
|
+ const double v = strtod(_val, &endptr);
|
|
|
+ if (endptr == _val)
|
|
|
+ {
|
|
|
+ if (!dynamic)
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ opencl_calc_intensity_range();
|
|
|
+ if (v < min_intensity || v > max_intensity)
|
|
|
+ return false;
|
|
|
+ oclthreads = 1;
|
|
|
+ intensity = v;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Make actual assignments after we know the values are valid
|
|
|
data->dynamic = dynamic;
|
|
|
if (data->oclthreads)
|
|
|
{
|
|
|
- data->oclthreads = oclthreads;
|
|
|
- data->intensity = intensity;
|
|
|
+ if (oclthreads)
|
|
|
+ {
|
|
|
+ data->oclthreads = oclthreads;
|
|
|
+ data->intensity = intensity;
|
|
|
+ }
|
|
|
pause_dynamic_threads(cgpu->device_id);
|
|
|
}
|
|
|
else
|
|
|
@@ -920,8 +931,6 @@ void opencl_tui_wlogprint_choices(struct cgpu_info *cgpu)
|
|
|
static
|
|
|
const char *opencl_tui_handle_choice(struct cgpu_info *cgpu, int input)
|
|
|
{
|
|
|
- struct opencl_device_data * const data = cgpu->device_data;
|
|
|
-
|
|
|
switch (input)
|
|
|
{
|
|
|
case 'i': case 'I':
|
|
|
@@ -934,14 +943,11 @@ const char *opencl_tui_handle_choice(struct cgpu_info *cgpu, int input)
|
|
|
intvar = curses_input(promptbuf);
|
|
|
if (!intvar)
|
|
|
return "Invalid intensity\n";
|
|
|
- if (!strncasecmp(intvar, "d", 1)) {
|
|
|
- data->dynamic = true;
|
|
|
- pause_dynamic_threads(cgpu->device_id);
|
|
|
- free(intvar);
|
|
|
- return "Dynamic mode enabled\n";
|
|
|
- }
|
|
|
if (!_set_intensity(cgpu, intvar))
|
|
|
+ {
|
|
|
+ free(intvar);
|
|
|
return "Invalid intensity (out of range)\n";
|
|
|
+ }
|
|
|
free(intvar);
|
|
|
return "Intensity changed\n";
|
|
|
}
|