Added new user shortcut "scrlck" (SDL/SDL2 using "Scroll Lock" for fullscreen toggle).

Cleanups and improvements in the userbutton shortcut code.
Documentation update (mention SDL2, updated userbutton list)
This commit is contained in:
Volker Ruppert 2014-07-07 07:29:08 +00:00
parent 20cc91a7d8
commit cb8d81defd
4 changed files with 68 additions and 36 deletions

View File

@ -54,7 +54,8 @@
# carbon use Carbon library (for MacOS X) # carbon use Carbon library (for MacOS X)
# macintosh use MacOS pre-10 # macintosh use MacOS pre-10
# amigaos use native AmigaOS libraries # amigaos use native AmigaOS libraries
# sdl use SDL library, cross platform # sdl use SDL 1.2.x library, cross platform
# sdl2 use SDL 2.x library, cross platform
# svga use SVGALIB library for Linux, allows graphics without X11 # svga use SVGALIB library for Linux, allows graphics without X11
# term text only, uses curses/ncurses library, cross platform # term text only, uses curses/ncurses library, cross platform
# rfb provides an interface to AT&T's VNC viewer, cross platform # rfb provides an interface to AT&T's VNC viewer, cross platform
@ -69,9 +70,11 @@
# Some display libraries now support specific options to control their # Some display libraries now support specific options to control their
# behaviour. These options are supported by more than one display library: # behaviour. These options are supported by more than one display library:
# #
# "gui_debug" - use GTK debugger gui (sdl, x) / Win32 debugger gui (sdl, win32) # "gui_debug" - use GTK debugger gui (sdl, sdl2, x) / Win32 debugger gui (sdl,
# "hideIPS" - disable IPS output in status bar (rfb, sdl, vncsrv, win32, wx, x) # sdl2, win32)
# "nokeyrepeat" - turn off host keyboard repeat (sdl, win32, x) # "hideIPS" - disable IPS output in status bar (rfb, sdl, sdl2, vncsrv,
# win32, wx, x)
# "nokeyrepeat" - turn off host keyboard repeat (sdl, sdl2, win32, x)
# "timeout" - time (in seconds) to wait for client (rfb, vncsrv) # "timeout" - time (in seconds) to wait for client (rfb, vncsrv)
# #
# See the examples below for other currently supported options. # See the examples below for other currently supported options.
@ -82,6 +85,7 @@
#display_library: nogui #display_library: nogui
#display_library: rfb #display_library: rfb
#display_library: sdl, options="fullscreen" # startup in fullscreen mode #display_library: sdl, options="fullscreen" # startup in fullscreen mode
#display_library: sdl2, options="fullscreen" # startup in fullscreen mode
#display_library: term #display_library: term
#display_library: vncsrv #display_library: vncsrv
#display_library: win32 #display_library: win32
@ -459,7 +463,8 @@ vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# Valid key names: # Valid key names:
# "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", # "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc",
# "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", # "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup",
# "plus", "right", "shift", "space", "tab", "up", "win", "print" and "power". # "plus", "power", "print", "right", "scrlck", "shift", "space", "tab", "up"
# and "win".
# Examples: # Examples:
# keyboard: type=mf, serial_delay=200, paste_delay=100000 # keyboard: type=mf, serial_delay=200, paste_delay=100000

View File

@ -610,7 +610,7 @@ code that displays the Bochs VGA screen and handles keyboard and mouse events.
tried first in Unix and then ported to the others; see tried first in Unix and then ported to the others; see
<xref linkend="compiling"> for compile instructions. <xref linkend="compiling"> for compile instructions.
</entry> </entry>
<entry>x, sdl, wx, term, rfb, vncsrv</entry> <entry>x, sdl, sdl2, wx, term, rfb, vncsrv</entry>
</row> </row>
<row> <row>
@ -621,7 +621,7 @@ code that displays the Bochs VGA screen and handles keyboard and mouse events.
see <xref linkend="compiling-win32"> for compile instructions, see <xref linkend="compiling-win32"> for compile instructions,
or Cygwin, see <xref linkend="compile-cygwin">. or Cygwin, see <xref linkend="compile-cygwin">.
</entry> </entry>
<entry>win32, sdl, wx, rfb</entry> <entry>win32, sdl, sdl2, wx, rfb</entry>
</row> </row>
<row> <row>
@ -631,7 +631,7 @@ code that displays the Bochs VGA screen and handles keyboard and mouse events.
Jeremy Parsons (Br'fin) has been maintaining the MacOS X port since Jeremy Parsons (Br'fin) has been maintaining the MacOS X port since
March 2002; see <xref linkend="compile-macosx"> for compile instructions. March 2002; see <xref linkend="compile-macosx"> for compile instructions.
</entry> </entry>
<entry>carbon, x, rfb, sdl</entry> <entry>carbon, x, rfb, sdl, sdl2</entry>
</row> </row>
<row> <row>
@ -1575,7 +1575,7 @@ description of each one.
<row><entry>/usr/bin/bochs-dlx </entry> <entry> run this script to try out DLX Linux inside Bochs!</entry> </row> <row><entry>/usr/bin/bochs-dlx </entry> <entry> run this script to try out DLX Linux inside Bochs!</entry> </row>
<row><entry>/usr/share/bochs/dlxlinux/ </entry> <entry> directory containing DLX linux sample disk image and configuration files</entry> </row> <row><entry>/usr/share/bochs/dlxlinux/ </entry> <entry> directory containing DLX linux sample disk image and configuration files</entry> </row>
<row><entry>/usr/share/bochs/dlxlinux/readme.txt</entry> <entry> description of DLX linux</entry> </row> <row><entry>/usr/share/bochs/dlxlinux/readme.txt</entry> <entry> description of DLX linux</entry> </row>
<row><entry>/usr/share/bochs/keymaps/*.map </entry> <entry>keymap tables for X11 and SDL </entry> </row> <row><entry>/usr/share/bochs/keymaps/*.map </entry> <entry>keymap tables for X11, SDL and SDL2 </entry> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>
@ -1989,7 +1989,11 @@ In Bochs 1.3 and before, the X11 GUI was always the default.
</row> </row>
<row> <row>
<entry>--with-sdl</entry> <entry>--with-sdl</entry>
<entry>Enable support for the SDL GUI interface; see <xref linkend="compile-sdl">.</entry> <entry>Enable support for the SDL 1.2.x GUI interface; see <xref linkend="compile-sdl">.</entry>
</row>
<row>
<entry>--with-sdl2</entry>
<entry>Enable support for the SDL 2.x GUI interface; see <xref linkend="compile-sdl">.</entry>
</row> </row>
<row> <row>
<entry>--with-term</entry> <entry>--with-term</entry>
@ -3230,14 +3234,15 @@ Examples:
Some display libraries now support specific options to control their Some display libraries now support specific options to control their
behaviour. These options are supported by more than one display library: behaviour. These options are supported by more than one display library:
<screen> <screen>
"gui_debug" - use GTK debugger gui (sdl, x) / Win32 debugger gui (sdl, win32) "gui_debug" - use GTK debugger gui (sdl, x) / Win32 debugger gui (sdl, sdl2, win32)
"hideIPS" - disable IPS output in status bar (rfb, sdl, vncsrv, win32, wx, x) "hideIPS" - disable IPS output in status bar (rfb, sdl, sdl2, vncsrv, win32, wx, x)
"nokeyrepeat" - turn off host keyboard repeat (sdl, win32, x) "nokeyrepeat" - turn off host keyboard repeat (sdl, sdl2, win32, x)
"timeout" - time (in seconds) to wait for client (rfb, vncsrv) "timeout" - time (in seconds) to wait for client (rfb, vncsrv)
</screen> </screen>
See the examples below for other currently supported options. See the examples below for other currently supported options.
<screen> <screen>
display_library: sdl, options="fullscreen" # startup in fullscreen mode display_library: sdl, options="fullscreen" # startup in fullscreen mode
display_library: sdl2, options="fullscreen" # startup in fullscreen mode
</screen> </screen>
</para> </para>
@ -3273,7 +3278,12 @@ See the examples below for other currently supported options.
</row> </row>
<row> <row>
<entry>sdl</entry> <entry>sdl</entry>
<entry>use SDL library, cross platform, <entry>use SDL 1.2.x library, cross platform,
details in <xref linkend="compile-sdl"></entry>
</row>
<row>
<entry>sdl2</entry>
<entry>use SDL 2.x library, cross platform,
details in <xref linkend="compile-sdl"></entry> details in <xref linkend="compile-sdl"></entry>
</row> </row>
<row> <row>
@ -3782,8 +3792,9 @@ Valid key names:
</para> </para>
<para> <para>
"alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc",
"f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", "plus", "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup",
"right", "shift", "space", "tab", "up", "win", "print" and "power". "plus", "power", "print", "right", "scrlck", "shift", "space", "tab", "up"
and "win".
</para> </para>
</section> </section>
@ -5283,7 +5294,7 @@ behavoiur of Bochs at runtime if you click on one of these buttons:
</para> </para>
<note><para> <note><para>
Changing the mouse capture at runtime is not supported by all display libraries, Changing the mouse capture at runtime is not supported by all display libraries,
but it is already present on RFB, SDL, VNCSRV, Win32, wxWidgets and X11. but it is already present on RFB, SDL, SDL2, VNCSRV, Win32, wxWidgets and X11.
</para></note> </para></note>
<note><para> <note><para>
Support for 2 button mouse to toggle the capture mode not yet complete - using Support for 2 button mouse to toggle the capture mode not yet complete - using
@ -5578,7 +5589,7 @@ drivers and their features.
</row> </row>
<row> <row>
<entry>sdl</entry> <entry>sdl</entry>
<entry>for wave output on platforms supported by SDL</entry> <entry>for wave output on platforms supported by SDL (1.2.x or 2.x)</entry>
<entry>No</entry> <entry>No</entry>
<entry>No</entry> <entry>No</entry>
</row> </row>
@ -6295,7 +6306,12 @@ simulation is starting.
<row> <row>
<entry>SDL</entry> <entry>SDL</entry>
<entry>SDL</entry> <entry>SDL</entry>
<entry>SDL gui</entry> <entry>SDL 1.2.x gui</entry>
</row>
<row>
<entry>SDL2</entry>
<entry>SDL2</entry>
<entry>SDL 2.x gui</entry>
</row> </row>
<row> <row>
<entry>serial</entry> <entry>serial</entry>

View File

@ -1,5 +1,5 @@
.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com" .\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com"
.TH bochsrc 5 "19 Jun 2014" "bochsrc" "The Bochs Project" .TH bochsrc 5 "7 Jul 2014" "bochsrc" "The Bochs Project"
.\"SKIP_SECTION" .\"SKIP_SECTION"
.SH NAME .SH NAME
bochsrc \- Configuration file for Bochs. bochsrc \- Configuration file for Bochs.
@ -93,7 +93,8 @@ The choices are:
carbon Carbon library (for MacOS X) carbon Carbon library (for MacOS X)
macintosh MacOS pre-10 macintosh MacOS pre-10
amigaos native AmigaOS libraries amigaos native AmigaOS libraries
sdl SDL library, cross platform sdl SDL 1.2.x library, cross platform
sdl2 SDL 2.x library, cross platform
term text only, uses curses/ncurses library, cross platform term text only, uses curses/ncurses library, cross platform
rfb provides an interface to AT&T's VNC viewer, cross platform rfb provides an interface to AT&T's VNC viewer, cross platform
vncsrv use LibVNCServer for extended RFB(VNC) support vncsrv use LibVNCServer for extended RFB(VNC) support
@ -108,9 +109,9 @@ the "wx" display library.
Some display libraries now support specific options to control their Some display libraries now support specific options to control their
behaviour. These options are supported by more than one display library: behaviour. These options are supported by more than one display library:
"gui_debug" - use GTK debugger gui (sdl, x) "gui_debug" - use GTK debugger gui (sdl, sdl2, x)
"hideIPS" - disable IPS output in status bar (rfb, sdl, vncsrv, wx, x) "hideIPS" - disable IPS output in status bar (rfb, sdl, sdl2, vncsrv, wx, x)
"nokeyrepeat" - turn off host keyboard repeat (sdl, x) "nokeyrepeat" - turn off host keyboard repeat (sdl, sdl2, x)
"timeout" - time (in seconds) to wait for client (rfb, vncsrv) "timeout" - time (in seconds) to wait for client (rfb, vncsrv)
See the examples below for other currently supported options. See the examples below for other currently supported options.
@ -118,6 +119,7 @@ See the examples below for other currently supported options.
Examples: Examples:
display_library: x display_library: x
display_library: sdl, options="fullscreen" # startup in fullscreen mode display_library: sdl, options="fullscreen" # startup in fullscreen mode
display_library: sdl2, options="fullscreen" # startup in fullscreen mode
.TP .TP
@ -521,8 +523,9 @@ button in the header bar. The shortcut string is a combination of maximum
Valid key names: Valid key names:
"alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc",
"f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", "plus", "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup",
"right", "shift", "space", "tab", "up", "win", "print" and "power". "plus", "power", "print", "right", "scrlck", "shift", "space", "tab", "up"
and "win".
Examples: Examples:
keyboard: type=mf, serial_delay=200, paste_delay=100000 keyboard: type=mf, serial_delay=200, paste_delay=100000

View File

@ -46,7 +46,7 @@ bx_gui_c *bx_gui = NULL;
#define LOG_THIS BX_GUI_THIS #define LOG_THIS BX_GUI_THIS
#define BX_KEY_UNKNOWN 0x7fffffff #define BX_KEY_UNKNOWN 0x7fffffff
#define N_USER_KEYS 37 #define N_USER_KEYS 38
typedef struct { typedef struct {
const char *key; const char *key;
@ -91,7 +91,8 @@ static user_key_t user_keys[N_USER_KEYS] =
{ "up", BX_KEY_UP }, { "up", BX_KEY_UP },
{ "win", BX_KEY_WIN_L }, { "win", BX_KEY_WIN_L },
{ "print", BX_KEY_PRINT }, { "print", BX_KEY_PRINT },
{ "power", BX_KEY_POWER_POWER } { "power", BX_KEY_POWER_POWER },
{ "scrlck", BX_KEY_SCRL_LOCK }
}; };
bx_gui_c::bx_gui_c(void): disp_mode(DISP_MODE_SIM) bx_gui_c::bx_gui_c(void): disp_mode(DISP_MODE_SIM)
@ -660,6 +661,7 @@ void bx_gui_c::userbutton_handler(void)
{ {
Bit32u shortcut[4]; Bit32u shortcut[4];
Bit32u symbol; Bit32u symbol;
bx_param_string_c *sparam;
char user_shortcut[512]; char user_shortcut[512];
char *ptr; char *ptr;
int i, len = 0, ret = 1; int i, len = 0, ret = 1;
@ -667,22 +669,28 @@ void bx_gui_c::userbutton_handler(void)
if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_USER) { if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_USER) {
ret = SIM->ask_param(BXPN_USER_SHORTCUT); ret = SIM->ask_param(BXPN_USER_SHORTCUT);
} }
strcpy(user_shortcut, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()); sparam = SIM->get_param_string(BXPN_USER_SHORTCUT);
if ((ret > 0) && user_shortcut[0] && (strcmp(user_shortcut, "none"))) { if ((ret > 0) && !sparam->isempty()) {
strcpy(user_shortcut, sparam->getptr());
ptr = strtok(user_shortcut, "-"); ptr = strtok(user_shortcut, "-");
if ((strcmp(ptr, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr())) || if ((strcmp(ptr, sparam->getptr())) ||
(strlen(SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()) < 6)) { (strlen(sparam->getptr()) < 7)) {
while (ptr) { while (ptr) {
symbol = get_user_key(ptr); symbol = get_user_key(ptr);
if (symbol == BX_KEY_UNKNOWN) { if (symbol == BX_KEY_UNKNOWN) {
BX_ERROR(("Unknown shortcut %s ignored", ptr)); BX_ERROR(("Unknown shortcut '%s' ignored", ptr));
return; return;
} }
shortcut[len++] = symbol; if (len < 3) {
ptr = strtok(NULL, "-"); shortcut[len++] = symbol;
ptr = strtok(NULL, "-");
} else {
BX_ERROR(("Ignoring extra key symbol '%s'", ptr));
break;
}
} }
} else { } else {
BX_ERROR(("Unknown shortcut %s ignored", user_shortcut)); BX_ERROR(("Unknown shortcut '%s' ignored", user_shortcut));
return; return;
} }
i = 0; i = 0;