2001-10-03 17:10:38 +04:00
|
|
|
/////////////////////////////////////////////////////////////////////////
|
2011-02-25 01:05:47 +03:00
|
|
|
// $Id$
|
2001-10-03 17:10:38 +04:00
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
2017-01-01 20:45:06 +03:00
|
|
|
// Copyright (C) 2002-2017 The Bochs Project
|
2001-04-10 05:04:59 +04:00
|
|
|
//
|
|
|
|
// This library is free software; you can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU Lesser General Public
|
|
|
|
// License as published by the Free Software Foundation; either
|
|
|
|
// version 2 of the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This library is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
// Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
|
|
// License along with this library; if not, write to the Free Software
|
2009-02-08 12:05:52 +03:00
|
|
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
2001-04-10 05:04:59 +04:00
|
|
|
|
2017-01-14 16:10:20 +03:00
|
|
|
// header bar and status bar stuff
|
|
|
|
#define BX_HEADER_BAR_Y 32
|
|
|
|
|
|
|
|
#define BX_MAX_PIXMAPS 17
|
|
|
|
#define BX_MAX_HEADERBAR_ENTRIES 12
|
|
|
|
|
|
|
|
// align pixmaps towards left or right side of header bar
|
|
|
|
#define BX_GRAVITY_LEFT 10
|
|
|
|
#define BX_GRAVITY_RIGHT 11
|
|
|
|
|
2004-02-07 17:34:35 +03:00
|
|
|
#define BX_MAX_STATUSITEMS 10
|
|
|
|
|
2017-01-14 16:10:20 +03:00
|
|
|
// gui dialog capabilities
|
2006-06-07 23:40:15 +04:00
|
|
|
#define BX_GUI_DLG_FLOPPY 0x01
|
|
|
|
#define BX_GUI_DLG_CDROM 0x02
|
|
|
|
#define BX_GUI_DLG_SNAPSHOT 0x04
|
|
|
|
#define BX_GUI_DLG_RUNTIME 0x08
|
|
|
|
#define BX_GUI_DLG_USER 0x10
|
|
|
|
#define BX_GUI_DLG_SAVE_RESTORE 0x20
|
|
|
|
#define BX_GUI_DLG_ALL 0x3F
|
2005-11-12 19:09:55 +03:00
|
|
|
|
2010-05-18 19:33:41 +04:00
|
|
|
// text mode blink feature
|
2008-01-29 00:52:09 +03:00
|
|
|
#define BX_TEXT_BLINK_MODE 0x01
|
|
|
|
#define BX_TEXT_BLINK_TOGGLE 0x02
|
|
|
|
#define BX_TEXT_BLINK_STATE 0x04
|
|
|
|
|
2010-05-18 19:33:41 +04:00
|
|
|
// mouse capture toggle feature
|
2010-05-16 13:01:36 +04:00
|
|
|
#define BX_MT_KEY_CTRL 0x01
|
|
|
|
#define BX_MT_KEY_ALT 0x02
|
|
|
|
#define BX_MT_KEY_F10 0x04
|
2010-05-18 19:33:41 +04:00
|
|
|
#define BX_MT_KEY_F12 0x08
|
|
|
|
#define BX_MT_MBUTTON 0x10
|
|
|
|
#define BX_MT_LBUTTON 0x20
|
|
|
|
#define BX_MT_RBUTTON 0x40
|
2010-05-16 13:01:36 +04:00
|
|
|
|
2011-08-01 22:21:25 +04:00
|
|
|
#define BX_GUI_MT_CTRL_MB (BX_MT_KEY_CTRL | BX_MT_MBUTTON)
|
|
|
|
#define BX_GUI_MT_CTRL_LRB (BX_MT_KEY_CTRL | BX_MT_LBUTTON | BX_MT_RBUTTON)
|
|
|
|
#define BX_GUI_MT_CTRL_F10 (BX_MT_KEY_CTRL | BX_MT_KEY_F10)
|
|
|
|
#define BX_GUI_MT_F12 (BX_MT_KEY_F12)
|
|
|
|
#define BX_GUI_MT_CTRL_ALT (BX_MT_KEY_CTRL | BX_MT_KEY_ALT)
|
|
|
|
|
2003-05-18 14:44:26 +04:00
|
|
|
typedef struct {
|
2004-04-09 19:04:54 +04:00
|
|
|
Bit16u start_address;
|
|
|
|
Bit8u cs_start;
|
|
|
|
Bit8u cs_end;
|
|
|
|
Bit16u line_offset;
|
|
|
|
Bit16u line_compare;
|
|
|
|
Bit8u h_panning;
|
|
|
|
Bit8u v_panning;
|
2003-05-11 19:07:54 +04:00
|
|
|
bx_bool line_graphics;
|
2004-04-09 19:04:54 +04:00
|
|
|
bx_bool split_hpanning;
|
2008-01-29 00:52:09 +03:00
|
|
|
Bit8u blink_flags;
|
2012-01-22 16:22:03 +04:00
|
|
|
Bit8u actl_palette[16];
|
2003-05-18 14:44:26 +04:00
|
|
|
} bx_vga_tminfo_t;
|
2003-05-07 23:15:47 +04:00
|
|
|
|
2004-08-15 23:27:15 +04:00
|
|
|
typedef struct {
|
|
|
|
Bit16u bpp, pitch;
|
|
|
|
Bit8u red_shift, green_shift, blue_shift;
|
|
|
|
Bit8u is_indexed, is_little_endian;
|
|
|
|
unsigned long red_mask, green_mask, blue_mask;
|
2012-10-25 19:53:04 +04:00
|
|
|
bx_bool snapshot_mode;
|
2004-08-15 23:27:15 +04:00
|
|
|
} bx_svga_tileinfo_t;
|
|
|
|
|
2003-05-07 23:15:47 +04:00
|
|
|
|
2017-01-03 23:59:59 +03:00
|
|
|
Bit8u reverse_bitorder(Bit8u);
|
|
|
|
|
2002-10-25 01:07:56 +04:00
|
|
|
BOCHSAPI extern class bx_gui_c *bx_gui;
|
2001-04-10 05:04:59 +04:00
|
|
|
|
2005-04-29 23:06:24 +04:00
|
|
|
#if BX_SUPPORT_X86_64
|
|
|
|
#define BOCHS_WINDOW_NAME "Bochs x86-64 emulator, http://bochs.sourceforge.net/"
|
|
|
|
#else
|
|
|
|
#define BOCHS_WINDOW_NAME "Bochs x86 emulator, http://bochs.sourceforge.net/"
|
|
|
|
#endif
|
2002-10-25 01:07:56 +04:00
|
|
|
|
|
|
|
// The bx_gui_c class provides data and behavior that is common to
|
|
|
|
// all guis. Each gui implementation will override the abstract methods.
|
|
|
|
class BOCHSAPI bx_gui_c : public logfunctions {
|
2001-04-10 05:04:59 +04:00
|
|
|
public:
|
merge in BRANCH-io-cleanup.
To see the commit logs for this use either cvsweb or
cvs update -r BRANCH-io-cleanup and then 'cvs log' the various files.
In general this provides a generic interface for logging.
logfunctions:: is a class that is inherited by some classes, and also
. allocated as a standalone global called 'genlog'. All logging uses
. one of the ::info(), ::error(), ::ldebug(), ::panic() methods of this
. class through 'BX_INFO(), BX_ERROR(), BX_DEBUG(), BX_PANIC()' macros
. respectively.
.
. An example usage:
. BX_INFO(("Hello, World!\n"));
iofunctions:: is a class that is allocated once by default, and assigned
as the iofunction of each logfunctions instance. It is this class that
maintains the file descriptor and other output related code, at this
point using vfprintf(). At some future point, someone may choose to
write a gui 'console' for bochs to which messages would be redirected
simply by assigning a different iofunction class to the various logfunctions
objects.
More cleanup is coming, but this works for now. If you want to see alot
of debugging output, in main.cc, change onoff[LOGLEV_DEBUG]=0 to =1.
Comments, bugs, flames, to me: todd@fries.net
2001-05-15 18:49:57 +04:00
|
|
|
bx_gui_c (void);
|
2002-10-25 01:07:56 +04:00
|
|
|
virtual ~bx_gui_c ();
|
|
|
|
// Define the following functions in the module for your particular GUI
|
2011-07-11 21:36:10 +04:00
|
|
|
// (x.cc, win32.cc, ...)
|
2012-03-03 16:41:24 +04:00
|
|
|
virtual void specific_init(int argc, char **argv, unsigned header_bar_y) = 0;
|
2002-10-25 01:07:56 +04:00
|
|
|
virtual void text_update(Bit8u *old_text, Bit8u *new_text,
|
2001-04-10 05:04:59 +04:00
|
|
|
unsigned long cursor_x, unsigned long cursor_y,
|
2012-01-22 16:22:03 +04:00
|
|
|
bx_vga_tminfo_t *tm_info) = 0;
|
2012-10-15 23:43:06 +04:00
|
|
|
virtual void graphics_tile_update(Bit8u *tile, unsigned x, unsigned y) = 0;
|
2002-10-25 01:07:56 +04:00
|
|
|
virtual void handle_events(void) = 0;
|
|
|
|
virtual void flush(void) = 0;
|
|
|
|
virtual void clear_screen(void) = 0;
|
2012-10-14 22:29:44 +04:00
|
|
|
virtual bx_bool palette_change(Bit8u index, Bit8u red, Bit8u green, Bit8u blue) = 0;
|
2003-06-28 12:04:31 +04:00
|
|
|
virtual void dimension_update(unsigned x, unsigned y, unsigned fheight=0, unsigned fwidth=0, unsigned bpp=8) = 0;
|
2002-10-25 01:07:56 +04:00
|
|
|
virtual unsigned create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim) = 0;
|
|
|
|
virtual unsigned headerbar_bitmap(unsigned bmap_id, unsigned alignment, void (*f)(void)) = 0;
|
|
|
|
virtual void replace_bitmap(unsigned hbar_id, unsigned bmap_id) = 0;
|
|
|
|
virtual void show_headerbar(void) = 0;
|
|
|
|
virtual int get_clipboard_text(Bit8u **bytes, Bit32s *nbytes) = 0;
|
|
|
|
virtual int set_clipboard_text(char *snapshot, Bit32u len) = 0;
|
2002-10-25 15:44:41 +04:00
|
|
|
virtual void mouse_enabled_changed_specific (bx_bool val) = 0;
|
2017-01-15 14:44:43 +03:00
|
|
|
virtual void exit(void) = 0;
|
|
|
|
// new graphics API methods (compatibility mode in gui.cc)
|
|
|
|
virtual bx_svga_tileinfo_t *graphics_tile_info(bx_svga_tileinfo_t *info);
|
|
|
|
virtual Bit8u *graphics_tile_get(unsigned x, unsigned y, unsigned *w, unsigned *h);
|
|
|
|
virtual void graphics_tile_update_in_place(unsigned x, unsigned y, unsigned w, unsigned h);
|
|
|
|
// optional gui methods (stubs or default code in gui.cc)
|
2012-01-04 00:11:12 +04:00
|
|
|
virtual void statusbar_setitem_specific(int element, bx_bool active, bx_bool w) {}
|
2006-01-25 20:37:22 +03:00
|
|
|
virtual void set_tooltip(unsigned hbar_id, const char *tip) {}
|
2002-12-06 22:34:32 +03:00
|
|
|
// set_display_mode() changes the mode between the configuration interface
|
|
|
|
// and the simulation. This is primarily intended for display libraries
|
|
|
|
// which have a full-screen mode such as SDL, term, and svgalib. The display
|
|
|
|
// mode is set to DISP_MODE_CONFIG before displaying any configuration menus,
|
|
|
|
// for panics that requires user input, when entering the debugger, etc. It
|
|
|
|
// is set to DISP_MODE_SIM when the Bochs simulation resumes. The
|
|
|
|
// enum is defined in gui/siminterface.h.
|
|
|
|
virtual void set_display_mode (disp_mode_t newmode) { /* default=no action*/ }
|
2002-10-25 01:07:56 +04:00
|
|
|
// These are only needed for the term gui. For all other guis they will
|
|
|
|
// have no effect.
|
|
|
|
// returns 32-bit bitmask in which 1 means the GUI should handle that signal
|
|
|
|
virtual Bit32u get_sighandler_mask () {return 0;}
|
|
|
|
// called when registered signal arrives
|
|
|
|
virtual void sighandler (int sig) {}
|
2002-10-28 02:33:13 +03:00
|
|
|
#if BX_USE_IDLE_HACK
|
|
|
|
// this is called from the CPU model when the HLT instruction is executed.
|
|
|
|
virtual void sim_is_idle(void) {}
|
|
|
|
#endif
|
2005-10-13 20:22:21 +04:00
|
|
|
virtual void show_ips(Bit32u ips_count);
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void beep_on(float frequency);
|
|
|
|
virtual void beep_off();
|
2004-02-22 16:03:02 +03:00
|
|
|
virtual void get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp);
|
2012-06-21 21:33:37 +04:00
|
|
|
virtual void set_mouse_mode_absxy(bx_bool mode) {}
|
2017-01-14 00:37:06 +03:00
|
|
|
#if BX_USE_GUI_CONSOLE
|
|
|
|
virtual void set_console_edit_mode(bx_bool mode) {}
|
|
|
|
#endif
|
2001-04-10 05:04:59 +04:00
|
|
|
|
|
|
|
// The following function(s) are defined already, and your
|
|
|
|
// GUI code calls them
|
|
|
|
static void key_event(Bit32u key);
|
2002-10-25 01:07:56 +04:00
|
|
|
static void set_text_charmap(Bit8u *fbuffer);
|
|
|
|
static void set_text_charbyte(Bit16u address, Bit8u data);
|
2006-01-25 20:37:22 +03:00
|
|
|
static Bit8u get_mouse_headerbar_id();
|
2001-04-10 05:04:59 +04:00
|
|
|
|
2012-01-21 16:15:10 +04:00
|
|
|
void init(int argc, char **argv, unsigned max_xres, unsigned max_yres,
|
|
|
|
unsigned x_tilesize, unsigned y_tilesize);
|
2006-09-18 00:37:28 +04:00
|
|
|
void cleanup(void);
|
2012-10-15 23:43:06 +04:00
|
|
|
void graphics_tile_update_common(Bit8u *tile, unsigned x, unsigned y);
|
2012-10-25 19:53:04 +04:00
|
|
|
bx_svga_tileinfo_t *graphics_tile_info_common(bx_svga_tileinfo_t *info);
|
|
|
|
Bit8u* get_snapshot_buffer(void) {return snapshot_buffer;}
|
2012-10-14 22:29:44 +04:00
|
|
|
bx_bool palette_change_common(Bit8u index, Bit8u red, Bit8u green, Bit8u blue);
|
2006-09-18 00:37:28 +04:00
|
|
|
void update_drive_status_buttons(void);
|
|
|
|
static void mouse_enabled_changed(bx_bool val);
|
2011-12-28 15:51:42 +04:00
|
|
|
int register_statusitem(const char *text, bx_bool auto_off=0);
|
2015-07-13 19:56:06 +03:00
|
|
|
void unregister_statusitem(int id);
|
2012-01-04 00:11:12 +04:00
|
|
|
void statusbar_setitem(int element, bx_bool active, bx_bool w=0);
|
2006-09-18 00:37:28 +04:00
|
|
|
static void init_signal_handlers();
|
2008-09-26 15:05:07 +04:00
|
|
|
static void toggle_mouse_enable(void);
|
2010-05-16 13:01:36 +04:00
|
|
|
bx_bool mouse_toggle_check(Bit32u key, bx_bool pressed);
|
|
|
|
const char* get_toggle_info(void);
|
2014-07-08 18:30:27 +04:00
|
|
|
bx_bool parse_user_shortcut(const char *val);
|
2012-06-24 13:14:43 +04:00
|
|
|
#if BX_DEBUGGER && BX_DEBUGGER_GUI
|
|
|
|
void init_debug_dialog(void);
|
2013-02-13 01:08:35 +04:00
|
|
|
void close_debug_dialog(void);
|
2012-06-24 13:14:43 +04:00
|
|
|
#endif
|
2017-01-13 18:57:36 +03:00
|
|
|
#if BX_USE_GUI_CONSOLE
|
2017-01-01 20:45:06 +03:00
|
|
|
bx_bool has_gui_console(void) {return console.present;}
|
2017-01-02 22:11:23 +03:00
|
|
|
bx_bool console_running(void) {return console.running;}
|
2017-01-01 20:45:06 +03:00
|
|
|
void console_refresh(bx_bool force);
|
|
|
|
void console_key_enq(Bit8u key);
|
|
|
|
int bx_printf(const char *s);
|
|
|
|
char* bx_gets(char *s, int size);
|
2017-01-02 22:11:23 +03:00
|
|
|
#else
|
|
|
|
bx_bool console_running(void) {return 0;}
|
|
|
|
void console_refresh(bx_bool force) {}
|
|
|
|
void console_key_enq(Bit8u key) {}
|
2017-01-01 20:45:06 +03:00
|
|
|
#endif
|
2001-04-10 05:04:59 +04:00
|
|
|
|
2002-10-25 01:07:56 +04:00
|
|
|
protected:
|
2001-04-10 05:04:59 +04:00
|
|
|
// And these are defined and used privately in gui.cc
|
2017-01-14 16:10:20 +03:00
|
|
|
// header bar button handlers
|
2001-04-10 05:04:59 +04:00
|
|
|
static void floppyA_handler(void);
|
|
|
|
static void floppyB_handler(void);
|
2011-06-13 13:32:39 +04:00
|
|
|
static void cdrom1_handler(void);
|
2001-04-10 05:04:59 +04:00
|
|
|
static void reset_handler(void);
|
|
|
|
static void power_handler(void);
|
2002-03-11 18:04:58 +03:00
|
|
|
static void copy_handler(void);
|
|
|
|
static void paste_handler(void);
|
2001-04-10 05:04:59 +04:00
|
|
|
static void snapshot_handler(void);
|
2001-11-10 01:17:33 +03:00
|
|
|
static void config_handler(void);
|
2002-08-09 10:16:43 +04:00
|
|
|
static void userbutton_handler(void);
|
2006-06-07 02:11:09 +04:00
|
|
|
static void save_restore_handler(void);
|
2017-01-14 16:10:20 +03:00
|
|
|
// process clicks on the "classic" Bochs headerbar
|
|
|
|
void headerbar_click(int x);
|
2012-10-15 23:43:06 +04:00
|
|
|
// snapshot helper functions
|
2012-10-14 22:29:44 +04:00
|
|
|
static void make_text_snapshot(char **snapshot, Bit32u *length);
|
2012-10-25 19:53:04 +04:00
|
|
|
static Bit32u set_snapshot_mode(bx_bool mode);
|
2012-10-14 22:29:44 +04:00
|
|
|
// status bar LED timer
|
2011-12-28 15:51:42 +04:00
|
|
|
static void led_timer_handler(void *);
|
|
|
|
void led_timer(void);
|
2017-01-13 18:57:36 +03:00
|
|
|
#if BX_USE_GUI_CONSOLE
|
2017-01-01 20:45:06 +03:00
|
|
|
void console_init(void);
|
|
|
|
void console_cleanup(void);
|
2017-01-02 22:11:23 +03:00
|
|
|
#else
|
|
|
|
void console_cleanup(void) {}
|
2017-01-01 20:45:06 +03:00
|
|
|
#endif
|
2011-12-28 15:51:42 +04:00
|
|
|
|
2012-10-14 22:29:44 +04:00
|
|
|
// header bar buttons
|
2002-10-25 15:44:41 +04:00
|
|
|
bx_bool floppyA_status;
|
|
|
|
bx_bool floppyB_status;
|
2011-06-13 13:32:39 +04:00
|
|
|
bx_bool cdrom1_status;
|
2001-04-10 05:04:59 +04:00
|
|
|
unsigned floppyA_bmap_id, floppyA_eject_bmap_id, floppyA_hbar_id;
|
|
|
|
unsigned floppyB_bmap_id, floppyB_eject_bmap_id, floppyB_hbar_id;
|
2011-06-13 13:32:39 +04:00
|
|
|
unsigned cdrom1_bmap_id, cdrom1_eject_bmap_id, cdrom1_hbar_id;
|
2001-04-10 05:04:59 +04:00
|
|
|
unsigned power_bmap_id, power_hbar_id;
|
|
|
|
unsigned reset_bmap_id, reset_hbar_id;
|
2002-03-11 18:04:58 +03:00
|
|
|
unsigned copy_bmap_id, copy_hbar_id;
|
|
|
|
unsigned paste_bmap_id, paste_hbar_id;
|
2001-04-10 05:04:59 +04:00
|
|
|
unsigned snapshot_bmap_id, snapshot_hbar_id;
|
2001-11-10 01:17:33 +03:00
|
|
|
unsigned config_bmap_id, config_hbar_id;
|
2001-04-10 05:04:59 +04:00
|
|
|
unsigned mouse_bmap_id, nomouse_bmap_id, mouse_hbar_id;
|
2002-08-09 10:16:43 +04:00
|
|
|
unsigned user_bmap_id, user_hbar_id;
|
2006-06-07 02:11:09 +04:00
|
|
|
unsigned save_restore_bmap_id, save_restore_hbar_id;
|
2017-01-14 16:10:20 +03:00
|
|
|
// the "classic" Bochs headerbar
|
|
|
|
unsigned bx_headerbar_entries;
|
|
|
|
struct {
|
|
|
|
unsigned bmap_id;
|
|
|
|
unsigned xdim;
|
|
|
|
unsigned ydim;
|
|
|
|
unsigned xorigin;
|
|
|
|
unsigned alignment;
|
|
|
|
void (*f)(void);
|
|
|
|
} bx_headerbar_entry[BX_MAX_HEADERBAR_ENTRIES];
|
2012-10-14 22:29:44 +04:00
|
|
|
// text charmap
|
2002-09-08 11:56:10 +04:00
|
|
|
unsigned char vga_charmap[0x2000];
|
2002-10-25 15:44:41 +04:00
|
|
|
bx_bool charmap_updated;
|
|
|
|
bx_bool char_changed[256];
|
2012-10-14 22:29:44 +04:00
|
|
|
// status bar items
|
2004-02-07 17:34:35 +03:00
|
|
|
unsigned statusitem_count;
|
2011-12-28 15:51:42 +04:00
|
|
|
int led_timer_index;
|
|
|
|
struct {
|
2015-07-13 19:56:06 +03:00
|
|
|
bx_bool in_use;
|
2011-12-28 15:51:42 +04:00
|
|
|
char text[8];
|
2011-12-29 20:28:58 +04:00
|
|
|
bx_bool active;
|
2011-12-28 15:51:42 +04:00
|
|
|
bx_bool mode; // read/write
|
|
|
|
bx_bool auto_off;
|
|
|
|
Bit8u counter;
|
|
|
|
} statusitem[BX_MAX_STATUSITEMS];
|
2012-10-14 22:29:44 +04:00
|
|
|
// display mode
|
2002-12-06 22:34:32 +03:00
|
|
|
disp_mode_t disp_mode;
|
2012-10-14 22:29:44 +04:00
|
|
|
// new graphics API (with compatibility mode)
|
2004-08-15 23:27:15 +04:00
|
|
|
bx_bool new_gfx_api;
|
|
|
|
Bit16u host_xres;
|
|
|
|
Bit16u host_yres;
|
|
|
|
Bit16u host_pitch;
|
|
|
|
Bit8u host_bpp;
|
2012-10-14 22:29:44 +04:00
|
|
|
Bit8u *framebuffer;
|
|
|
|
// maximum guest display size and tile size
|
2012-01-22 13:08:59 +04:00
|
|
|
unsigned max_xres;
|
|
|
|
unsigned max_yres;
|
2012-01-21 16:15:10 +04:00
|
|
|
unsigned x_tilesize;
|
|
|
|
unsigned y_tilesize;
|
2012-10-14 22:29:44 +04:00
|
|
|
// current guest display settings
|
|
|
|
bx_bool guest_textmode;
|
2017-01-01 20:45:06 +03:00
|
|
|
unsigned guest_fsize;
|
2012-10-14 22:29:44 +04:00
|
|
|
unsigned guest_xres;
|
|
|
|
unsigned guest_yres;
|
|
|
|
unsigned guest_bpp;
|
2012-10-15 23:43:06 +04:00
|
|
|
// graphics snapshot
|
|
|
|
bx_bool snapshot_mode;
|
|
|
|
Bit8u *snapshot_buffer;
|
2012-10-14 22:29:44 +04:00
|
|
|
struct {
|
|
|
|
Bit8u blue;
|
2012-10-15 23:43:06 +04:00
|
|
|
Bit8u green;
|
|
|
|
Bit8u red;
|
2012-10-14 22:29:44 +04:00
|
|
|
Bit8u reserved;
|
|
|
|
} palette[256];
|
|
|
|
// mouse toggle setup
|
2010-05-16 13:01:36 +04:00
|
|
|
Bit8u toggle_method;
|
|
|
|
Bit32u toggle_keystate;
|
|
|
|
char mouse_toggle_text[20];
|
2014-07-08 18:30:27 +04:00
|
|
|
// userbutton shortcut
|
|
|
|
Bit32u user_shortcut[4];
|
|
|
|
int user_shortcut_len;
|
2012-10-14 22:29:44 +04:00
|
|
|
// gui dialog capabilities
|
|
|
|
Bit32u dialog_caps;
|
2017-01-13 18:57:36 +03:00
|
|
|
#if BX_USE_GUI_CONSOLE
|
2017-01-01 20:45:06 +03:00
|
|
|
struct {
|
|
|
|
bx_bool present;
|
|
|
|
bx_bool running;
|
|
|
|
Bit8u *screen;
|
|
|
|
Bit8u *oldscreen;
|
|
|
|
unsigned saved_fsize;
|
|
|
|
unsigned saved_xres;
|
|
|
|
unsigned saved_yres;
|
|
|
|
unsigned saved_bpp;
|
|
|
|
unsigned cursor_x;
|
|
|
|
unsigned cursor_y;
|
|
|
|
bx_vga_tminfo_t tminfo;
|
|
|
|
Bit8u keys[16];
|
|
|
|
Bit8u n_keys;
|
|
|
|
} console;
|
|
|
|
#endif
|
2005-10-21 22:00:17 +04:00
|
|
|
};
|
2001-04-10 05:04:59 +04:00
|
|
|
|
|
|
|
|
2002-10-25 01:07:56 +04:00
|
|
|
// Add this macro in the class declaration of each GUI, to define all the
|
|
|
|
// required virtual methods. Example:
|
2008-02-06 01:57:43 +03:00
|
|
|
//
|
2002-10-25 01:07:56 +04:00
|
|
|
// class bx_rfb_gui_c : public bx_gui_c {
|
|
|
|
// public:
|
|
|
|
// bx_rfb_gui_c (void) {}
|
|
|
|
// DECLARE_GUI_VIRTUAL_METHODS()
|
|
|
|
// };
|
|
|
|
// Then, each method must be defined later in the file.
|
2004-08-15 23:27:15 +04:00
|
|
|
#define DECLARE_GUI_VIRTUAL_METHODS() \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void specific_init(int argc, char **argv, \
|
2012-03-03 16:41:24 +04:00
|
|
|
unsigned header_bar_y); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void text_update(Bit8u *old_text, Bit8u *new_text, \
|
2008-01-26 03:00:31 +03:00
|
|
|
unsigned long cursor_x, unsigned long cursor_y, \
|
2012-03-03 16:41:24 +04:00
|
|
|
bx_vga_tminfo_t *tm_info); \
|
2012-10-15 23:43:06 +04:00
|
|
|
virtual void graphics_tile_update(Bit8u *tile, unsigned x, unsigned y); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void handle_events(void); \
|
|
|
|
virtual void flush(void); \
|
|
|
|
virtual void clear_screen(void); \
|
2012-10-14 22:29:44 +04:00
|
|
|
virtual bx_bool palette_change(Bit8u index, Bit8u red, Bit8u green, \
|
|
|
|
Bit8u blue); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void dimension_update(unsigned x, unsigned y, unsigned fheight=0, \
|
2012-03-03 16:41:24 +04:00
|
|
|
unsigned fwidth=0, unsigned bpp=8); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual unsigned create_bitmap(const unsigned char *bmap, \
|
2012-03-03 16:41:24 +04:00
|
|
|
unsigned xdim, unsigned ydim); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual unsigned headerbar_bitmap(unsigned bmap_id, unsigned alignment, \
|
2012-03-03 16:41:24 +04:00
|
|
|
void (*f)(void)); \
|
2004-02-02 02:48:57 +03:00
|
|
|
virtual void replace_bitmap(unsigned hbar_id, unsigned bmap_id); \
|
|
|
|
virtual void show_headerbar(void); \
|
|
|
|
virtual int get_clipboard_text(Bit8u **bytes, Bit32s *nbytes); \
|
|
|
|
virtual int set_clipboard_text(char *snapshot, Bit32u len); \
|
|
|
|
virtual void mouse_enabled_changed_specific (bx_bool val); \
|
|
|
|
virtual void exit(void); \
|
|
|
|
/* end of DECLARE_GUI_VIRTUAL_METHODS */
|
2002-10-25 01:07:56 +04:00
|
|
|
|
2004-08-15 23:27:15 +04:00
|
|
|
#define DECLARE_GUI_NEW_VIRTUAL_METHODS() \
|
|
|
|
virtual bx_svga_tileinfo_t *graphics_tile_info(bx_svga_tileinfo_t *info); \
|
|
|
|
virtual Bit8u *graphics_tile_get(unsigned x, unsigned y, \
|
2012-03-03 16:41:24 +04:00
|
|
|
unsigned *w, unsigned *h); \
|
2004-08-15 23:27:15 +04:00
|
|
|
virtual void graphics_tile_update_in_place(unsigned x, unsigned y, \
|
|
|
|
unsigned w, unsigned h);
|
|
|
|
/* end of DECLARE_GUI_NEW_VIRTUAL_METHODS */
|
|
|
|
|
2001-04-10 05:04:59 +04:00
|
|
|
#define BX_KEY_PRESSED 0x00000000
|
|
|
|
#define BX_KEY_RELEASED 0x80000000
|
|
|
|
|
2001-12-14 20:56:37 +03:00
|
|
|
#define BX_KEY_UNHANDLED 0x10000000
|
|
|
|
|
2001-06-26 02:57:27 +04:00
|
|
|
#define BX_KEY_CTRL_L 0
|
|
|
|
#define BX_KEY_SHIFT_L 1
|
|
|
|
|
|
|
|
#define BX_KEY_F1 2
|
|
|
|
#define BX_KEY_F2 3
|
|
|
|
#define BX_KEY_F3 4
|
|
|
|
#define BX_KEY_F4 5
|
|
|
|
#define BX_KEY_F5 6
|
|
|
|
#define BX_KEY_F6 7
|
|
|
|
#define BX_KEY_F7 8
|
|
|
|
#define BX_KEY_F8 9
|
|
|
|
#define BX_KEY_F9 10
|
|
|
|
#define BX_KEY_F10 11
|
|
|
|
#define BX_KEY_F11 12
|
|
|
|
#define BX_KEY_F12 13
|
|
|
|
|
|
|
|
#define BX_KEY_CTRL_R 14
|
|
|
|
#define BX_KEY_SHIFT_R 15
|
|
|
|
#define BX_KEY_CAPS_LOCK 16
|
|
|
|
#define BX_KEY_NUM_LOCK 17
|
|
|
|
#define BX_KEY_ALT_L 18
|
|
|
|
#define BX_KEY_ALT_R 19
|
|
|
|
|
|
|
|
#define BX_KEY_A 20
|
|
|
|
#define BX_KEY_B 21
|
|
|
|
#define BX_KEY_C 22
|
|
|
|
#define BX_KEY_D 23
|
|
|
|
#define BX_KEY_E 24
|
|
|
|
#define BX_KEY_F 25
|
|
|
|
#define BX_KEY_G 26
|
|
|
|
#define BX_KEY_H 27
|
|
|
|
#define BX_KEY_I 28
|
|
|
|
#define BX_KEY_J 29
|
|
|
|
#define BX_KEY_K 30
|
|
|
|
#define BX_KEY_L 31
|
|
|
|
#define BX_KEY_M 32
|
|
|
|
#define BX_KEY_N 33
|
|
|
|
#define BX_KEY_O 34
|
|
|
|
#define BX_KEY_P 35
|
|
|
|
#define BX_KEY_Q 36
|
|
|
|
#define BX_KEY_R 37
|
|
|
|
#define BX_KEY_S 38
|
|
|
|
#define BX_KEY_T 39
|
|
|
|
#define BX_KEY_U 40
|
|
|
|
#define BX_KEY_V 41
|
|
|
|
#define BX_KEY_W 42
|
|
|
|
#define BX_KEY_X 43
|
|
|
|
#define BX_KEY_Y 44
|
|
|
|
#define BX_KEY_Z 45
|
|
|
|
|
|
|
|
#define BX_KEY_0 46
|
|
|
|
#define BX_KEY_1 47
|
|
|
|
#define BX_KEY_2 48
|
|
|
|
#define BX_KEY_3 49
|
|
|
|
#define BX_KEY_4 50
|
|
|
|
#define BX_KEY_5 51
|
|
|
|
#define BX_KEY_6 52
|
|
|
|
#define BX_KEY_7 53
|
|
|
|
#define BX_KEY_8 54
|
|
|
|
#define BX_KEY_9 55
|
|
|
|
|
|
|
|
#define BX_KEY_ESC 56
|
|
|
|
|
|
|
|
#define BX_KEY_SPACE 57
|
|
|
|
#define BX_KEY_SINGLE_QUOTE 58
|
2001-04-10 05:04:59 +04:00
|
|
|
#define BX_KEY_COMMA 59
|
|
|
|
#define BX_KEY_PERIOD 60
|
|
|
|
#define BX_KEY_SLASH 61
|
|
|
|
|
2001-06-26 02:57:27 +04:00
|
|
|
#define BX_KEY_SEMICOLON 62
|
|
|
|
#define BX_KEY_EQUALS 63
|
|
|
|
|
|
|
|
#define BX_KEY_LEFT_BRACKET 64
|
|
|
|
#define BX_KEY_BACKSLASH 65
|
|
|
|
#define BX_KEY_RIGHT_BRACKET 66
|
|
|
|
#define BX_KEY_MINUS 67
|
|
|
|
#define BX_KEY_GRAVE 68
|
|
|
|
|
|
|
|
#define BX_KEY_BACKSPACE 69
|
|
|
|
#define BX_KEY_ENTER 70
|
|
|
|
#define BX_KEY_TAB 71
|
|
|
|
|
2001-12-14 20:56:37 +03:00
|
|
|
#define BX_KEY_LEFT_BACKSLASH 72
|
2001-12-22 03:00:33 +03:00
|
|
|
#define BX_KEY_PRINT 73
|
|
|
|
#define BX_KEY_SCRL_LOCK 74
|
|
|
|
#define BX_KEY_PAUSE 75
|
2001-12-14 20:56:37 +03:00
|
|
|
|
2001-06-26 02:57:27 +04:00
|
|
|
#define BX_KEY_INSERT 76
|
|
|
|
#define BX_KEY_DELETE 77
|
|
|
|
#define BX_KEY_HOME 78
|
|
|
|
#define BX_KEY_END 79
|
|
|
|
#define BX_KEY_PAGE_UP 80
|
|
|
|
#define BX_KEY_PAGE_DOWN 81
|
|
|
|
|
|
|
|
#define BX_KEY_KP_ADD 82
|
|
|
|
#define BX_KEY_KP_SUBTRACT 83
|
|
|
|
#define BX_KEY_KP_END 84
|
|
|
|
#define BX_KEY_KP_DOWN 85
|
|
|
|
#define BX_KEY_KP_PAGE_DOWN 86
|
|
|
|
#define BX_KEY_KP_LEFT 87
|
|
|
|
#define BX_KEY_KP_RIGHT 88
|
|
|
|
#define BX_KEY_KP_HOME 89
|
|
|
|
#define BX_KEY_KP_UP 90
|
|
|
|
#define BX_KEY_KP_PAGE_UP 91
|
|
|
|
#define BX_KEY_KP_INSERT 92
|
|
|
|
#define BX_KEY_KP_DELETE 93
|
|
|
|
#define BX_KEY_KP_5 94
|
|
|
|
|
|
|
|
#define BX_KEY_UP 95
|
|
|
|
#define BX_KEY_DOWN 96
|
|
|
|
#define BX_KEY_LEFT 97
|
|
|
|
#define BX_KEY_RIGHT 98
|
|
|
|
|
|
|
|
#define BX_KEY_KP_ENTER 99
|
|
|
|
#define BX_KEY_KP_MULTIPLY 100
|
|
|
|
#define BX_KEY_KP_DIVIDE 101
|
2001-12-19 22:15:12 +03:00
|
|
|
|
2002-03-06 17:04:42 +03:00
|
|
|
#define BX_KEY_WIN_L 102
|
|
|
|
#define BX_KEY_WIN_R 103
|
|
|
|
#define BX_KEY_MENU 104
|
2001-12-22 03:00:33 +03:00
|
|
|
|
2002-03-06 17:04:42 +03:00
|
|
|
#define BX_KEY_ALT_SYSREQ 105
|
|
|
|
#define BX_KEY_CTRL_BREAK 106
|
2001-12-22 03:00:33 +03:00
|
|
|
|
2002-03-06 17:04:42 +03:00
|
|
|
#define BX_KEY_INT_BACK 107
|
|
|
|
#define BX_KEY_INT_FORWARD 108
|
|
|
|
#define BX_KEY_INT_STOP 109
|
|
|
|
#define BX_KEY_INT_MAIL 110
|
|
|
|
#define BX_KEY_INT_SEARCH 111
|
|
|
|
#define BX_KEY_INT_FAV 112
|
|
|
|
#define BX_KEY_INT_HOME 113
|
2001-12-22 03:00:33 +03:00
|
|
|
|
2002-03-06 17:04:42 +03:00
|
|
|
#define BX_KEY_POWER_MYCOMP 114
|
|
|
|
#define BX_KEY_POWER_CALC 115
|
|
|
|
#define BX_KEY_POWER_SLEEP 116
|
|
|
|
#define BX_KEY_POWER_POWER 117
|
|
|
|
#define BX_KEY_POWER_WAKE 118
|
2001-12-22 03:00:33 +03:00
|
|
|
|
2002-03-06 17:04:42 +03:00
|
|
|
#define BX_KEY_NBKEYS 119
|
2008-02-06 01:57:43 +03:00
|
|
|
// If you add BX_KEYs Please update
|
2002-03-06 13:55:44 +03:00
|
|
|
// - BX_KEY_NBKEYS
|
|
|
|
// - the scancodes table in the file iodev/scancodes.cc
|
|
|
|
// - the bx_key_symbol table in the file gui/keymap.cc
|
2002-10-25 01:07:56 +04:00
|
|
|
|
|
|
|
|
|
|
|
/////////////// GUI plugin support
|
|
|
|
|
|
|
|
// Define macro to supply gui plugin code. This macro is called once in GUI to
|
|
|
|
// supply the plugin initialization methods. Since it is nearly identical for
|
|
|
|
// each gui module, the macro is easier to maintain than pasting the same code
|
|
|
|
// in each one.
|
|
|
|
//
|
|
|
|
// Each gui should declare a class pointer called "theGui" which is derived
|
|
|
|
// from bx_gui_c, before calling this macro. For example, the SDL port
|
|
|
|
// says:
|
|
|
|
// static bx_sdl_gui_c *theGui;
|
|
|
|
|
|
|
|
#define IMPLEMENT_GUI_PLUGIN_CODE(gui_name) \
|
2014-06-08 12:40:08 +04:00
|
|
|
int CDECL lib##gui_name##_LTX_plugin_init(plugin_t *plugin, \
|
2002-10-25 01:07:56 +04:00
|
|
|
plugintype_t type, int argc, char *argv[]) { \
|
|
|
|
genlog->info("installing %s module as the Bochs GUI", #gui_name); \
|
|
|
|
theGui = new bx_##gui_name##_gui_c (); \
|
|
|
|
bx_gui = theGui; \
|
|
|
|
return(0); /* Success */ \
|
|
|
|
} \
|
2014-06-08 12:40:08 +04:00
|
|
|
void CDECL lib##gui_name##_LTX_plugin_fini(void) { }
|