1
0
Fork 0
Commit graph

4070 commits

Author SHA1 Message Date
krcroft
3df2734b52 Clarify choice of wrap-width 2020-04-04 04:10:06 +02:00
krcroft
9e086a882e Use WriteOut_NoParsing where possible 2020-04-04 04:10:06 +02:00
krcroft
75dd033cb0 Validate string to double using std::isfinite 2020-04-04 04:10:06 +02:00
krcroft
239396fec8 Add AUTOTYPE to DOSBox's programs
AUTOTYPE performs scripted keyboard entry into the running
DOS program.

It can be used to reliably skip intros, answer Q&A style questions
that some games ask on startup, or conduct a simple demo.

It allows for delaying input by any number of fractional seconds,
as well defining the pacing between keystrokes. It uses the
comma character "," to insert additional delays similar to modern
phone numbers.

It uses key_* names as defined by the mapper to avoid using SDL
scancodes[1], which are unstable across platforms. This approach
also allows the triggering of custom key bindings the use has
defined.

[1] https://wiki.libsdl.org/SDL_GetScancodeName

"Warning: The returned name is by design not stable across
platforms, e.g. the name for SDL_SCANCODE_LGUI is "Left GUI" under
Linux but "Left Windows" under Microsoft Windows, and some
scancodes like SDL_SCANCODE_NONUSBACKSLASH don't have any name at
all. There are even scancodes that share names, e.g.
SDL_SCANCODE_RETURN and SDL_SCANCODE_RETURN2 (both called
"Return"). This function is therefore unsuitable for creating a
stable cross-platform two-way mapping between strings and
scancodes."
2020-04-04 04:10:06 +02:00
krcroft
e8ac2d60f3 Ensure seeks and reads are within bounds of the track length
In the previous code, if the game attempted to seek beyond the track
length, or if a "seek & read" would add up to going beyond the
end-of-the-track, the code would pass those requests to the underlying
codecs to handle (and reject with a corresponding error code).

This PR moves those checks up into the CDROM CD-DA code, and will
short-circuit them. Illegal seeks won't be attempted, however the usual
negative return code will still be passed to the game just like before.
Likewise, reads beyond the end will be pruned so they will get as much
audio as possible, without asking the codec for extra.
2020-04-02 06:20:23 +02:00
Patryk Obara
e4d3188c7a Add clang-format rules
Rules are defined for all C/C++ code, except src/libs.

These rules are designed to emulate kernel coding convention with some
adaptations for C++11. Configuration file uses options available in
clang-format 8.0 (the newest version in 10.0) to provide compatibility
with older environments and operating systems.  Some options are
commented out and marked with TODOs - those need to be investigated and
enabled/disabled during upgrade to clang-format 9.0.

DOSBox codebase is a mix of various styles with only few consistent
rules seen throughout the codebase, these clang-format rules preserve
some of existing conventions and conciously break with others.

Some unwritten upstream rules, that are now encoded in clang-format:

- Using tab for indentation.
- K&R-like indentation for control statements.
- Indentation rules for structs, classes, and non-anonymous enums.
- Case labels in switch statements are aligned the same way goto
  statements would be (also K&R rule).

Some formatting aspects that were not followed consistently throughout
old DOSBox code, but are now encoded in clang-format:

- Space placing in control statements and function calls (makes the code
  much more readable).
- Control statements (if-else, while) must be broken into multiple lines
  (makes the code more readable, helps with debugging, reading compiler
  logs and static analysis reports).

Some unwritten upstream rules, that are now changed by these rules:

- Placing opening function bracket in the same line as function
  declaration (not in line with K&R).  This rule makes it hard to make
  constructor formatting consistent - old code dealt with it by not
  formatting initializer lists at all.  Unformatted initializer list can
  result in lines hundreds of lines long and make it hard to add/remove
  class fields while assuring correct initialization order.
  In new clang-format rules K&R indentation is followed, allowing
  initalizer lists to be formatted one initializer per line (which makes
  it much easier to read and edit.
2020-04-01 07:38:05 +02:00
krcroft
619742f70f Improve comment about EXPOSED event 2020-03-30 21:48:02 +02:00
krcroft
c2b3015839 Eliminate redundant use void arguments 2020-03-30 21:48:02 +02:00
krcroft
b4e6e40c95 Assess the mouse capture state when gaining window focus
This fixes mouse visibility issues on the Raspberry Pi,
which uses an older customized version of SDL2. SDL2 on
the Pi fires different windows events in a different
order, making dealing with states challenging.

To handle this generically, we additionally assess the
mouse capture state after the Window has gained focus.

We also add a "has_focus" state tracking boolean to the
SDL object, which protects against general SDL mouse
trigger events from changing the mouse state before the
Window has "risen" and delivered us an EXPOSED or FOCUS
event. In the prior code rapidly clicking the mouse while
DOSBox was starting could freeze the mouse cursor in
place on the Pi.

We still also assess the mouse state on EXPOSE events,
which is fired after full - windowed modes are toggled.
The EXPOSE even occurs reliably on OSX, X11, Wayland, and
Windows after the window has settled (but is never fired
on the Pi).
2020-03-30 21:48:02 +02:00
Patrick McMorris
82a3a46550 Enable parallel builds in VS for all configs 2020-03-30 19:31:03 +02:00
Patryk Obara
1d704d49a5 Fix few trivial warnings in macOS code
Prevents "unused-variable" warnings and one "sometimes-uninitialized"
warning.
2020-03-28 05:41:04 +01:00
Patryk Obara
f959484192 Make block_fnum unsigned in fmopl
This value is stored as 32-bit unsigned value elsewhere throughout this
file and is being compared against 32-bit unsigned in this function.
2020-03-28 05:41:04 +01:00
Patryk Obara
5983e820c4 Bring back C++11 foreach loop in fmopl
Upstream replaced C++11 code with C++ "almost-equivalents", when merging
code from MAME project.

Reverting this fixes few warnings (comparison of signed and unsigned
integer in this case) and makes it slightly easier for the compiler
to unroll the nested loops.
2020-03-28 05:41:04 +01:00
Patryk Obara
06805b28fb Change bpp to unsigned int around render code
Max value of bpp is 32, so there's really no reason to tie this variable
to architecture size.  This change prevents few -Wformat warnings.
2020-03-28 05:41:04 +01:00
krcroft
b71788dba6 Make a second harder attempt to seek if needed 2020-03-27 15:01:26 +01:00
Patryk Obara
dbfca7353e Cleanup MIDI/ALSA-related logs
We want logs to adhere to a common format.
2020-03-27 00:54:11 +01:00
Patryk Obara
9d2b7ea578 Adjust help strings for sdl options 2020-03-27 00:54:11 +01:00
Patryk Obara
193f2ed564 Declare sdl.vsync as deprecated/disabled
vsync is an option introduced by SDL2 patch, but the testing indicates,
that it very rarely (if ever) works.  We still want to support it, but
this might require serious implementation effort, so for the time being
we're removing broken option to prevent confusing the users.
2020-03-27 00:54:11 +01:00
Patryk Obara
04d2e9f3f1 Allow config properties to be deprecated
This allows us to show a warning to the user if the .conf file includes
a property that is no longer supported, or a property that is completely
unknown.  Actual handling of the property can still be implemented
(e.g. to use as a fallback for modern replacement), but doesn't need
to be.
2020-03-27 00:54:11 +01:00
Patryk Obara
779131d396 Skip splash screen if resolution is not large enough
It's the easiest way to prevent problems when user wants to play the
game using fullscreen while explicitly setting tiny resolution
for a specific game (e.g. 320x200).
2020-03-27 00:54:11 +01:00
Patryk Obara
5ac2567adc Rename gimp_image to splash_image 2020-03-27 00:54:11 +01:00
Patryk Obara
6f238c0d1a Fix splash screen for surface output
All rendering backends except output=surface assume input buffer row
with the same length as output buffer row. Surface is "special" and in
fullscreen uses pitch equal to *screen* width instead. Padding the
output rows with black pixels is necessary for splash screen to show up
correctly.
2020-03-27 00:54:11 +01:00
Patryk Obara
00ffbd0977 Remove dead code remains of "lazy_fullscreen" feature 2020-03-27 00:54:11 +01:00
Patryk Obara
1f62338610 Fix indirect memory leak of icon surface 2020-03-27 00:54:11 +01:00
Patryk Obara
d34378b621 Define SDL rgb-masks for creating surfaces 2020-03-27 00:54:11 +01:00
Patryk Obara
a5b65b3c8e Initialize default window size before GUI_StartUp 2020-03-27 00:54:11 +01:00
Patryk Obara
acb020147d Move "extern C" to ppscale header 2020-03-27 00:54:11 +01:00
Patryk Obara
facabcee2a Handle surface as the last option during update
SCREEN_SURFACE is no longer the default option, and it's usable only for
debugging purposes. Move it to the last position in switches, to make
texture and opengl a little bit faster.
2020-03-27 00:54:11 +01:00
Patryk Obara
8d5bc9537a Prevent a crash in Windows AMD drivers
Usually, when window is being created without SDL_WINDOW_OPENGL flag,
SDL2 internally re-creates it to support OpenGL during
SDL_CreateRenderer if needed.

This leads to crash in AMD OpenGL drivers (Windows only), which happens
for drivers: "opengl", "opengles", "opengles2".

When the window is created with correct flag from the get-go, the crash
does not happen.

On Linux, the code does not crash either way (at least not when using
Mesa and AMDGPU open source driver), so there's no point in propagating
the hack.

Also, remove a comment that is no longer relevant to the code below.
2020-03-27 00:54:11 +01:00
Patryk Obara
bb43294f68 Store SDL texture render driver as std::string 2020-03-27 00:54:11 +01:00
Patryk Obara
54a50d4231 Replace Lock/UnlockTexture with UpdateTexture
Lock/UnlockTexture is stable and works very well on Linux and with
OpenGL texture driver and on Linux and Windows, but it's usage caused
problems with content of updated texture when used with drivers:
'direct3d11' on Windows and 'metal' on macOS.

Also, Lock/Unlock turned out to be the root cause of deadlocks for
'opengl' driver on AmigaOS.

According to SDL2 documentation, using Lock/UnlockTexture is supposed to
be faster, but in DOSBox usecase we couldn't confirm significant
performance change - there are some community reports indicating, that
UpdateTexture might be actually faster (but we couldn't confirm it
either).

Discussion on this topic can be found on SDL forum:
https://forums.libsdl.org/viewtopic.php?t=9728

In our case, switch to UpdateTexture has no serious negative impact, but
makes the behaviour more robust across the board.
2020-03-27 00:54:11 +01:00
Patryk Obara
fa4e8c28de Update description of sdl.windowresolution 2020-03-27 00:54:11 +01:00
Patryk Obara
3001ef240f Remove old splash screen 2020-03-27 00:54:11 +01:00
Patryk Obara
854c021cdc Update splash screen to use 4:3 aspect ratio
This way it matches the default window size when going into text mode
with aspect=true (default).
2020-03-27 00:54:11 +01:00
Patryk Obara
aed68e9e6e Destroy SDL resources in the proper order
Prevent internal SDL2 asserts on Windows 10 when using output=texture,
also improves stability on AmigaOS and Linux using Wayland.
2020-03-27 00:54:11 +01:00
Patryk Obara
d3f3833f2c Set icon after sdl.window is created
Otherwise internal SDL2 asserts are triggered in Windows debug builds.
2020-03-27 00:54:11 +01:00
Patryk Obara
bf1c7eef18 Fix effc++ warnings in control.h 2020-03-27 00:54:11 +01:00
Patryk Obara
919099c757 Start with the correct full/window resolution
Make the user settings affect splash screen as well as emulator; this
way, when user wants to start in fullscreen, the splash screen will be
displayed in fullscreen - making the startup process more streamlined.

This fixes long-standing problem on SteamOS (or Steam in Big Picture
mode), when starting dosbox moves the user out of fullscreen to window
(to show tiny splash screen), and then back to fullscreen.
2020-03-27 00:54:11 +01:00
Patryk Obara
600ccccd37 Display splash screen using GFX API
Simplify the code displaying the splash screen and extract it to a new
function. Using GFX_* functions avoids the problem of re-creating
the window from scratch after splash is shown, which solves a lot of
problems:

- application window is always visible on screen, it does not disappear
  for a moment between closing splash and starting emulator.
- seriously reduces resolution trashing on start
- user will not experience loss of window focus due to splash screen
  disappearing (this was happening e.g. on AmigaOS)
2020-03-27 00:54:11 +01:00
Patryk Obara
0b173eec08 Cleanup and document GFX_StartUpdate function
Usage of this function depends on the state of global sdl struct; and
it's very easy to make a mistake - documentation should lower this risk.

Change the type of output parameter 'pitch' and assure type safety with
internal SDL types via static asserts.
2020-03-27 00:54:11 +01:00
Patryk Obara
08934b2972 Remove dead code remains of WinDIB usage
This used to have meaning for Windows 9x support via SDL 1.2; the issue
described in README was never mentioned in the context of SDL2.

Add missing include to video header while we're at it.
2020-03-27 00:54:11 +01:00
NicknineTheEagle
e905a6bd5d Implement phone book to remap phone numbers to addresses for modem 2020-03-23 01:05:03 +01:00
NicknineTheEagle
de45c413ae Fix auto-answer (S0) behavior in modem 2020-03-23 01:02:42 +01:00
NicknineTheEagle
880d2d2ceb Implement DTR drop actions (&Dn) and DTR drop delay (S25) in modem
&D0 may be needed for old apps which don't set DTR or set it to garbage.
DTR drop delay is required for Quake otherwise it doesn't disconnect
properly.
2020-03-23 01:02:42 +01:00
NicknineTheEagle
9cb13f6158 Fix a bug with backspace handling in modem
Fixes a bug where entering backspace while command buffer was already
empty added backspace char to the buffer thus screwing it up.
2020-03-23 01:02:37 +01:00
krcroft
99e53a830f Track and free unassigned CStickBindGroup allocations 2020-03-21 23:41:06 +01:00
krcroft
a1a3e0203d Only initialize the mapper once during startup 2020-03-21 23:41:06 +01:00
krcroft
5b8364148a Use prefix form of incrementing iterators 2020-03-20 01:06:23 +01:00
krcroft
c2fcc273da Explicitly ignore some return values 2020-03-20 01:06:23 +01:00
krcroft
269908cad0 Prevent undefined behavior while bit-shifting on 32bit systems 2020-03-20 01:06:23 +01:00