- fix [ 625696 ] text config menu: default can be wrong.

New behaviour is:
  . No command line arg (user want to load or create a new conf file)
    -> no .bochsrc is loaded
    -> defaults to "2. Read options from..."
  . command line arg -q (user want to quick start from .bochsrc)
    -> .bochsrc is loaded
      -> if found Run the simulation
      -> if not found defaults to "2. Read options from..."
  . command line arg -f (user want to edit a conf file)
    -> conf file is loaded
      -> if found defaults to "3. Edit options"
      -> if not found defaults to "2. Read options from..."
  . command line arg -qf (user want to quick start from a conf file)
    -> conf file is loaded
      -> if found Run the simulation
      -> if not found defaults to "2. Read options from..."
  . After selection of "2. Read options from..."
    -> defaults to "5. Begin simulation"
- fix "enable-control-panel" behaviour in configure.in.
- check if a romimage was supplied in the conf file.
  If not, print a hint about a missing/corrupt conf file.

  I hope I did not break anything, notably the Carbon gui
This commit is contained in:
Christophe Bothamy 2002-11-09 14:12:10 +00:00
parent 52e703d8e8
commit 81eca54b51
7 changed files with 82 additions and 41 deletions

9
bochs/configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Id: configure.in,v 1.159 2002/11/01 17:53:47 bdenney Exp . # From configure.in Id: configure.in,v 1.160 2002/11/08 21:29:16 cbothamy Exp .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.53. # Generated by GNU Autoconf 2.53.
# #
@ -17439,7 +17439,7 @@ echo "${ECHO_T}yes" >&6
fi; fi;
# continue to support --enable-control-panel and make it do the same # continue to support --enable-control-panel and make it do the same, but with no default
# as before. # as before.
echo "$as_me:$LINENO: checking for control panel" >&5 echo "$as_me:$LINENO: checking for control panel" >&5
echo $ECHO_N "checking for control panel... $ECHO_C" >&6 echo $ECHO_N "checking for control panel... $ECHO_C" >&6
@ -17457,9 +17457,8 @@ echo "${ECHO_T}no" >&6
fi fi
else else
echo "$as_me:$LINENO: result: yes" >&5 echo "$as_me:$LINENO: result: same as config-interface setting" >&5
echo "${ECHO_T}yes" >&6 echo "${ECHO_T}same as config-interface setting" >&6
use_config_interface=1
fi; fi;

View File

@ -2,7 +2,7 @@ dnl // Process this file with autoconf to produce a configure script.
AC_PREREQ(2.50) AC_PREREQ(2.50)
AC_INIT(bochs.h) AC_INIT(bochs.h)
AC_REVISION([[$Id: configure.in,v 1.160 2002-11-08 21:29:16 cbothamy Exp $]]) AC_REVISION([[$Id: configure.in,v 1.161 2002-11-09 14:12:09 cbothamy Exp $]])
AC_CONFIG_HEADER(config.h) AC_CONFIG_HEADER(config.h)
AC_CONFIG_HEADER(ltdlconf.h) AC_CONFIG_HEADER(ltdlconf.h)
@ -326,21 +326,20 @@ AC_ARG_ENABLE(config-interface,
] ]
) )
# continue to support --enable-control-panel and make it do the same # continue to support --enable-control-panel and make it do the same, but with no default
# as before. # as before.
AC_MSG_CHECKING(for control panel) AC_MSG_CHECKING(for control panel)
AC_ARG_ENABLE(control-panel, AC_ARG_ENABLE(control-panel,
[ --enable-control-panel Deprecated. Use --enable-config-interface.], [ --enable-control-panel Deprecated. Use --enable-config-interface.],
[if test "$enableval" = yes; then [if test "$enableval" = yes; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes, overrides config-interface setting)
use_config_interface=1 use_config_interface=1
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no, overrides config-interface setting)
use_config_interface=0 use_config_interface=0
fi], fi],
[ [
AC_MSG_RESULT(yes) AC_MSG_RESULT(same as config-interface setting)
use_config_interface=1
] ]
) )

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: siminterface.cc,v 1.82 2002-11-08 13:18:05 vruppert Exp $ // $Id: siminterface.cc,v 1.83 2002-11-09 14:12:10 cbothamy Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// See siminterface.h for description of the siminterface concept. // See siminterface.h for description of the siminterface concept.
@ -396,6 +396,8 @@ bx_real_sim_c::get_cdrom_options (int level, bx_atadevice_options *out, int *whe
return 0; return 0;
} }
char *bochs_start_names[] = { "quick", "load", "edit", "run" };
int n_bochs_start_names = 3;
char *floppy_type_names[] = { "none", "1.2M", "1.44M", "2.88M", "720K", "360K", NULL }; char *floppy_type_names[] = { "none", "1.2M", "1.44M", "2.88M", "720K", "360K", NULL };
int floppy_type_n_sectors[] = { -1, 80*2*15, 80*2*18, 80*2*36, 80*2*9, 40*2*9 }; int floppy_type_n_sectors[] = { -1, 80*2*15, 80*2*18, 80*2*36, 80*2*9, 40*2*9 };
int n_floppy_type_names = 6; int n_floppy_type_names = 6;

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: siminterface.h,v 1.83 2002-11-01 15:19:43 bdenney Exp $ // $Id: siminterface.h,v 1.84 2002-11-09 14:12:10 cbothamy Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Before I can describe what this file is for, I have to make the // Before I can describe what this file is for, I have to make the
@ -119,7 +119,7 @@ typedef enum {
// list if parameter id values. The actual values are not important; // list if parameter id values. The actual values are not important;
// it's only important that they all be different from each other. // it's only important that they all be different from each other.
typedef enum { typedef enum {
BXP_NULL = 101, BXP_NULL = 301,
BXP_IPS, BXP_IPS,
BXP_REALTIME_PIT, BXP_REALTIME_PIT,
BXP_VGA_UPDATE_INTERVAL, BXP_VGA_UPDATE_INTERVAL,
@ -325,7 +325,7 @@ typedef enum {
BXP_KEYBOARD, BXP_KEYBOARD,
BXP_USER_SHORTCUT, BXP_USER_SHORTCUT,
BXP_ASK_FOR_PATHNAME, // for general file selection dialog BXP_ASK_FOR_PATHNAME, // for general file selection dialog
BXP_QUICK_START, // read bochsrc and start simulation immediately BXP_BOCHS_START, // How Bochs starts
// experiment: add params for CPU registers // experiment: add params for CPU registers
BXP_CPU_PARAMETERS, BXP_CPU_PARAMETERS,
BXP_CPU_EAX, BXP_CPU_EAX,
@ -1055,6 +1055,11 @@ public:
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
#define BX_QUICK_START 0 // read bochsrc and start simulation immediately
#define BX_LOAD_START 1 // default action load conf file
#define BX_EDIT_START 2 // default action edit conf file
#define BX_RUN_START 3 // default action start execution
#define BX_FLOPPY_NONE 10 // floppy not present #define BX_FLOPPY_NONE 10 // floppy not present
#define BX_FLOPPY_1_2 11 // 1.2M 5.25" #define BX_FLOPPY_1_2 11 // 1.2M 5.25"
#define BX_FLOPPY_1_44 12 // 1.44M 3.5" #define BX_FLOPPY_1_44 12 // 1.44M 3.5"
@ -1079,6 +1084,8 @@ public:
#define BX_ATA_TRANSLATION_AUTO 4 #define BX_ATA_TRANSLATION_AUTO 4
#define BX_ATA_TRANSLATION_LAST 4 #define BX_ATA_TRANSLATION_LAST 4
extern char *bochs_start_names[];
extern int n_bochs_start_names;
extern char *floppy_type_names[]; extern char *floppy_type_names[];
extern int floppy_type_n_sectors[]; extern int floppy_type_n_sectors[];
extern int n_floppy_type_names; extern int n_floppy_type_names;

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: textconfig.cc,v 1.2 2002-11-01 15:19:47 bdenney Exp $ // $Id: textconfig.cc,v 1.3 2002-11-09 14:12:10 cbothamy Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// This is code for a text-mode configuration interfac. Note that this file // This is code for a text-mode configuration interfac. Note that this file
@ -413,8 +413,16 @@ int bx_config_interface (int menu)
} }
case BX_CI_START_MENU: case BX_CI_START_MENU:
{ {
static int read_rc = 0; Bit32u default_choice;
Bit32u default_choice = 5; switch (SIM->get_param_enum(BXP_BOCHS_START)->get ()) {
case BX_LOAD_START:
default_choice = 2; break;
case BX_EDIT_START:
default_choice = 3; break;
default:
default_choice = 5; break;
}
if (ask_uint (startup_menu_prompt, 1, 6, default_choice, &choice, 10) < 0) return -1; if (ask_uint (startup_menu_prompt, 1, 6, default_choice, &choice, 10) < 0) return -1;
switch (choice) { switch (choice) {
case 1: case 1:
@ -425,9 +433,12 @@ int bx_config_interface (int menu)
// original state. // original state.
SIM->reset_all_param (); SIM->reset_all_param ();
if (bx_read_rc (NULL) >= 0) if (bx_read_rc (NULL) >= 0)
read_rc=1; SIM->get_param_enum(BXP_BOCHS_START)->set(BX_RUN_START);
break; break;
case 3: bx_config_interface (BX_CI_START_OPTS); break; case 3:
bx_config_interface (BX_CI_START_OPTS);
SIM->get_param_enum(BXP_BOCHS_START)->set(BX_RUN_START);
break;
case 4: bx_write_rc (NULL); break; case 4: bx_write_rc (NULL); break;
case 5: bx_config_interface (BX_CI_START_SIMULATION); break; case 5: bx_config_interface (BX_CI_START_SIMULATION); break;
case 6: SIM->quit_sim (1); return -1; case 6: SIM->quit_sim (1); return -1;
@ -952,7 +963,7 @@ static int ci_callback (void *userdata, ci_command_t command)
case CI_START: case CI_START:
//fprintf (stderr, "textconfig.cc: start\n"); //fprintf (stderr, "textconfig.cc: start\n");
bx_config_interface_init (); bx_config_interface_init ();
if (SIM->get_param_bool(BXP_QUICK_START)->get ()) if (SIM->get_param_enum(BXP_BOCHS_START)->get () == BX_QUICK_START)
bx_config_interface (BX_CI_START_SIMULATION); bx_config_interface (BX_CI_START_SIMULATION);
else else
bx_config_interface (BX_CI_START_MENU); bx_config_interface (BX_CI_START_MENU);

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// $Id: wxmain.cc,v 1.75 2002-11-01 15:28:41 bdenney Exp $ // $Id: wxmain.cc,v 1.76 2002-11-09 14:12:10 cbothamy Exp $
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// //
// wxmain.cc implements the wxWindows frame, toolbar, menus, and dialogs. // wxmain.cc implements the wxWindows frame, toolbar, menus, and dialogs.
@ -234,7 +234,7 @@ bool MyApp::OnInit()
SetTopWindow( frame ); SetTopWindow( frame );
wxTheClipboard->UsePrimarySelection (true); wxTheClipboard->UsePrimarySelection (true);
// if quickstart is enabled, kick off the simulation // if quickstart is enabled, kick off the simulation
if (SIM->get_param_bool(BXP_QUICK_START)->get ()) { if (SIM->get_param_enum(BXP_BOCHS_START)->get () == BX_QUICK_START) {
wxCommandEvent unusedEvent; wxCommandEvent unusedEvent;
frame->OnStartSim (unusedEvent); frame->OnStartSim (unusedEvent);
} }

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: main.cc,v 1.174 2002-11-01 17:53:49 bdenney Exp $ // $Id: main.cc,v 1.175 2002-11-09 14:12:09 cbothamy Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2002 MandrakeSoft S.A. // Copyright (C) 2002 MandrakeSoft S.A.
@ -335,10 +335,12 @@ void bx_init_options ()
memset (&bx_options, 0, sizeof(bx_options)); memset (&bx_options, 0, sizeof(bx_options));
// quick start option, set by command line arg // quick start option, set by command line arg
new bx_param_bool_c (BXP_QUICK_START, new bx_param_enum_c (BXP_BOCHS_START,
"Quick start", "Bochs start types",
"Quick start option: if true, read the bochsrc and start simulation immediately", "Bochs start types",
0); bochs_start_names,
BX_RUN_START,
BX_QUICK_START);
// floppya // floppya
bx_options.floppya.Opath = new bx_param_filename_c (BXP_FLOPPYA_PATH, bx_options.floppya.Opath = new bx_param_filename_c (BXP_FLOPPYA_PATH,
@ -1486,6 +1488,7 @@ print_usage ()
int int
bx_init_main (int argc, char *argv[]) bx_init_main (int argc, char *argv[])
{ {
bx_bool no_arg = 1;
// To deal with initialization order problems inherent in C++, use the macros // To deal with initialization order problems inherent in C++, use the macros
// SAFE_GET_IOFUNC and SAFE_GET_GENLOG to retrieve "io" and "genlog" in all // SAFE_GET_IOFUNC and SAFE_GET_GENLOG to retrieve "io" and "genlog" in all
// constructors or functions called by constructors. The macros test for // constructors or functions called by constructors. The macros test for
@ -1504,10 +1507,7 @@ bx_init_main (int argc, char *argv[])
if (!BX_WITH_WX) bx_print_header (); if (!BX_WITH_WX) bx_print_header ();
#if !BX_USE_CONFIG_INTERFACE SIM->get_param_enum(BXP_BOCHS_START)->set (BX_RUN_START);
// this allows people to get quick start behavior by default
SIM->get_param_bool(BXP_QUICK_START)->set (1);
#endif
// interpret the args that start with -, like -q, -f, etc. // interpret the args that start with -, like -q, -f, etc.
int arg = 1; int arg = 1;
@ -1518,14 +1518,18 @@ bx_init_main (int argc, char *argv[])
SIM->quit_sim (0); SIM->quit_sim (0);
} }
else if (!strcmp ("-q", argv[arg])) { else if (!strcmp ("-q", argv[arg])) {
SIM->get_param_bool(BXP_QUICK_START)->set (1); no_arg = 0;
SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
} }
else if (!strcmp ("-f", argv[arg])) { else if (!strcmp ("-f", argv[arg])) {
no_arg = 0;
SIM->get_param_enum(BXP_BOCHS_START)->set (BX_EDIT_START);
if (++arg >= argc) BX_PANIC(("-f must be followed by a filename")); if (++arg >= argc) BX_PANIC(("-f must be followed by a filename"));
else bochsrc_filename = argv[arg]; else bochsrc_filename = argv[arg];
} }
else if (!strcmp ("-qf", argv[arg])) { else if (!strcmp ("-qf", argv[arg])) {
SIM->get_param_bool(BXP_QUICK_START)->set (1); no_arg = 0;
SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
if (++arg >= argc) BX_PANIC(("-qf must be followed by a filename")); if (++arg >= argc) BX_PANIC(("-qf must be followed by a filename"));
else bochsrc_filename = argv[arg]; else bochsrc_filename = argv[arg];
} }
@ -1539,7 +1543,8 @@ bx_init_main (int argc, char *argv[])
arg = argc; // ignore all other args. arg = argc; // ignore all other args.
setupWorkingDirectory (argv[0]); setupWorkingDirectory (argv[0]);
// there is no stdin/stdout so disable the text-based config interface. // there is no stdin/stdout so disable the text-based config interface.
SIM->get_param_bool(BXP_QUICK_START)->set (1); SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
no_arg = 0;
char cwd[MAXPATHLEN]; char cwd[MAXPATHLEN];
getwd (cwd); getwd (cwd);
BX_INFO (("Now my working directory is %s", cwd)); BX_INFO (("Now my working directory is %s", cwd));
@ -1572,7 +1577,8 @@ bx_init_main (int argc, char *argv[])
if(!isatty(STDIN_FILENO)) if(!isatty(STDIN_FILENO))
{ {
// there is no stdin/stdout so disable the text-based config interface. // there is no stdin/stdout so disable the text-based config interface.
SIM->get_param_bool(BXP_QUICK_START)->set (1); SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
no_arg = 0;
} }
BX_INFO (("fixing default lib location ...")); BX_INFO (("fixing default lib location ..."));
// locate the lib directory within the application bundle. // locate the lib directory within the application bundle.
@ -1594,17 +1600,29 @@ bx_init_main (int argc, char *argv[])
CFRelease(libDir); CFRelease(libDir);
} }
#endif #endif
#if !BX_USE_CONFIG_INTERFACE
// this allows people to get quick start behavior by default
SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
#endif
int norcfile = 1; int norcfile = 1;
/* always parse configuration file and command line arguments */ /* always parse configuration file and command line arguments */
if (bochsrc_filename == NULL) bochsrc_filename = bx_find_bochsrc (); if (!no_arg) {
if (bochsrc_filename) if (bochsrc_filename == NULL) bochsrc_filename = bx_find_bochsrc ();
norcfile = bx_read_configuration (bochsrc_filename); if (bochsrc_filename)
norcfile = bx_read_configuration (bochsrc_filename);
}
#if BX_USE_CONFIG_INTERFACE
if (norcfile) { if (norcfile) {
// No configuration was loaded, so the current settings are unusable. // No configuration was loaded, so the current settings are unusable.
// Switch off quick start so that we will drop into the configuration // Switch off quick start so that we will drop into the configuration
// interface. // interface.
SIM->get_param_bool(BXP_QUICK_START)->set (0); SIM->get_param_enum(BXP_BOCHS_START)->set (BX_LOAD_START);
} }
#endif
// parse the rest of the command line. This is done after reading the // parse the rest of the command line. This is done after reading the
// configuration file so that the command line arguments can override // configuration file so that the command line arguments can override
// the settings from the file. // the settings from the file.
@ -1793,7 +1811,7 @@ bx_init_hardware()
{ {
// all configuration has been read, now initialize everything. // all configuration has been read, now initialize everything.
if (SIM->get_param_bool(BXP_QUICK_START)->get ()) { if (SIM->get_param_enum(BXP_BOCHS_START)->get ()==BX_QUICK_START) {
for (int level=0; level<N_LOGLEV; level++) { for (int level=0; level<N_LOGLEV; level++) {
int action = SIM->get_default_log_action (level); int action = SIM->get_default_log_action (level);
#if !BX_USE_CONFIG_INTERFACE #if !BX_USE_CONFIG_INTERFACE
@ -1817,6 +1835,11 @@ bx_init_hardware()
bx_generic_apic_c::reset_all_ids (); bx_generic_apic_c::reset_all_ids ();
#endif #endif
// Check if there is a romimage
if (strcmp(bx_options.rom.Opath->getptr (),"") == 0) {
BX_ERROR(("No romimage to load. Is your bochsrc file loaded/valid ?"));
}
#if BX_SMP_PROCESSORS==1 #if BX_SMP_PROCESSORS==1
BX_MEM(0)->init_memory(bx_options.memory.Osize->get () * 1024*1024); BX_MEM(0)->init_memory(bx_options.memory.Osize->get () * 1024*1024);