Fixes V576 warning from PVS-Studio - in this case PVS is somewhat
pedantic, as it warns about printf'ing of malloc'ed memory and risk the
associated problems in OOM situations.
In this case it can be a problem, as LOG_MSG aka GFX_ShowMsg
allocates memory during printing in result an error message could cause
stack overflow, although it's extremely unlikely on modern OSes.
Avoid triggering this warning by using memory-safe container and using
C++11 data() accessor to vector internal buffer; in case of OOM
situation, stack will be unrolled and program should exit with nice
error message.
A number of "templated" scaler implementations are unused in the
implementation. If any single one of them needs to be brought back
(unlikely), then it's a simple matter of removing an ifdef.
These templates turn off compilation of following scaler
implementations:
void Normal1x_9_8_L(const void*)
void Normal1x_9_8_R(const void*)
void Normal2x_9_8_L(const void*)
void Normal2x_9_8_R(const void*)
void Normal3x_9_8_L(const void*)
void Normal3x_9_8_R(const void*)
void NormalDw_9_8_L(const void*)
void NormalDw_9_8_R(const void*)
void NormalDh_9_8_L(const void*)
void NormalDh_9_8_R(const void*)
void HQ2x_15_L()
void HQ2x_15_R()
void HQ3x_15_L()
void HQ3x_15_R()
void Super2xSaI_15_L()
void Super2xSaI_15_R()
void SuperEagle_15_L()
void SuperEagle_15_R()
void _2xSaI_15_L()
void _2xSaI_15_R()
void AdvMame2x_15_L()
void AdvMame2x_15_R()
void AdvMame3x_15_L()
void AdvMame3x_15_R()
void Cache_9_8(const void*)
This keywords is only a hint, was used in C in 1970s, but is useless
nowadays. Some reports indicate, that GCC never used it to actually
treat variable as a register.
It was deprecated from C++ in 2009:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4193.html#809
It was removed from language in C++17, and will likely see new meaning
in some future standard, similar to how 'auto' got replaced in C++11.
Replace the [sdl] `autolock = true/false` configuration setting with [sdl]
`capture_mouse = ...` with a two-value setting.
The first value defines how the mouse is controlled:
- onclick: The mouse will be captured with a click inside the window.
- onstart: The mouse is captured immediately on start (similar to real DOS).
- seamless: The mouse will move seamlessly in and out of DOSBox and cannot be captured.
- nomouse: The mouse is disabled and hidden without any input sent to the game.
The second value defines how middle-clicks are handled:
- middlegame: Middle-clicks are sent to the game (not used to uncapture the mouse).
- middlerelease: Middle-click will uncapture the mouse when windowed (not sent to the game).
Middle-clicks are sent to the game when fullscreen or when seamless control is set.
The default setting of "onclick middlegame" reproduces DOSBox's existing behavior.
This is accomplished by clearing all the binds on the events, and
then re-parsing the file.
This allows batch scripts to change keybindings, and is useful for DOS
game menus, who can now change the mappings per-game.
ie: config -set sdl mapperfile=~/.dosbox/mario-and-luigi.map
or: config -r -conf ~/.dosbox/mario-and-luigi.conf
(with a mapperfile=mario-and-luigi.map line in mario-and-luigi.conf)
Warning: Because internal changes don't have access to the
current_config_path, paths set with config -set are relative to the
CWD. Relevant source lines are src/misc/setup.cpp lines 349 and 917
I'm unsure if this interacts well with the CAPS and NUMLOCK code at the
bottom of MAPPER_Init, as those now get run every time the mapper
reloads. If it does misbehave, those if statements can probably be
moved to the MAPPER_StartUp function, although it is called a bit earlier
than MAPPER_Init.
A natural extension of this would be to add the ability to change the
mapperfile from within the MAPPER UI.
Users who test dosbox-staging via various GUI frontends might have a
problem distinguishing if the instance they have configured is really
dosbox-staging or some other version of DOSBox. Different splash screen
is a simple remedy for it.
Two graphical files are included: one in vector format to allow for
further refinements and one converted to necessary size in png format,
that is used as direct source of logo embedded in the source code. Use
GIMP to convert the png logo to a C file.
Notes about new design:
Orange background was replaced by black to make switch to black
background of empty terminal a little less jarring.
The box side is covered with the rainbow-like pattern to resemble logos
of various computer platforms popular in the 80s. AFAIK IBM or
PC-clones never had such colourful logos, but the point is to resemble
a retro-computing platform while being aesthetically pleasing.
Some computing platforms, that used rainbow patterns are Sinclair,
Commodore, Amiga, Dragon 32, and Apple. The pattern used for
dosbox-staging splash is deliberately different from all of these.
Word "staging" is rendered using excellent Raleway font:
https://www.theleagueofmoveabletype.com/raleway
This change is not supposed to be upstreamed.
This merge had serious conflicts; some of changes could be applied, but
others needed to be removed.
- Code for new SETMODE_RESTARTS_SUBSYSTEM was removed, as it depends on
SDL 1.2 functionality (SDL_SetVideoMode) and seems rather pointless
for SDL 2.0.
- Support for setting windowresolution as a percentage was retained, but
window centering of this feature likely won't work, as it depends on
SDL 1.2 env variable SDL_VIDEO_CENTERED.
- Support for applying windowresolution as a percentage was removed, as
it was implemented purely in code removed during transition to
SDL 2.0.
Add way to restart graphics subsystem on fullscreen/windowed mode transitions in OpenGL mode (disabled by default)
Add check for pixels being valid in OpenGL to prevent direct crash when the allocation fails.
Add define to turn off Pixel Buffer Object usage. (disabled by default)
Add a way to specify the windowresolution as percentage of your current resolution. (This centers the window.)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4306
There's no point in hardcoding these values - they can be different to
every user (it depends on hardware, OS, SDL version, etc).
Also, future versions of SDL might introduce more renderers, so this way
the code is more future-proof.
Otherwise users might easily miss, that this option is supposed to work
only for 'texture' output.
Also, do slight adjustments to formatting in generated .conf file.