This is a manual merge of a slightly adapted pull request #296.
The changes made are:
- Each time the theme format changes, the version was increased
- default.inc has been regenerated in the same commit as the theme changes
To help people familiar with Qsynth (I'm not, but it seems to be
one of the more polished FluidSynth front ends), use the same
presentation and terminology for the FluidSynth settings.
More to follow.
I don't really understand what these parameters do, or what the
sensible values are, so for now the sliders are limited only by
the allowed (or, in one case, "safe") values.
Clang will produce plenty of warnings (most of them seem to be of
the "if the stars align the wrong way, this may happen" variety),
but I don't have the time or patience to look at all of them.
This allows opening the dialog on (nearly) the same page again as when it was
closed. Sadly due to the different number of entries in the save and load
version this is not always exactly the same page as before. Same goes for
resolution changes.
Thanks to wjp for suggesting this.
On some systems, passing signed chars to macros like isspace() etc. lead
to a runtime error. Hence, mark these macros as forbidden by default,
and introduce otherwise equivalent alternatives for them.
Now SaveStateDescriptor no longer subclasses HashMap. Instead all possible
saved meta data is included directly into SaveStateDescriptor.
This is slightly less flexible, but we never needed that flexibility so far.
On the other hand it should reduce the memory usage. At least on my system
(Linux/amd64) the old SaveStateDescriptor had a size of 928 and the new
SaveStateDescriptor has a size of 200.
WinCE's strtol can't actually do proper error handling because it is
lacking errno, so just check the bounds instead. If you really have
some need to pass LONG_MIN/LONG_MAX as command-line parameters then
it could always be #ifdeffed, but I'm assuming no-one cares.
- endptr needs not be initialised before calling strtol(), it is always set by strtol().
- endptr is never a null pointer after calling strtol().
- There is no need to rely on strtol() setting EINVAL (which is not guaranteed).
Testing whether strtol() parsed till the end of the string is sufficient (it is guaranteed that the string is not empty at this point).
- It is sufficient to just test for ERANGE without inspecting the return value, because a successful call to strtol() does not change errno.
Signed-off-by: Alyssa Milburn <fuzzie@fuzzie.org>