From bc7daa397e9570574a969e8617f8dd52e842cf43 Mon Sep 17 00:00:00 2001 From: stephena Date: Thu, 26 May 2011 16:14:46 +0000 Subject: [PATCH] Added ability for the debugger to start up in 'fatal error' mode. This basically shows a messagebox as soon as the debugger starts, describing the error and offering the choice to continue debugging or exiting the ROM entirely. The DPC+ code now catches fatal errors from the Thumb ARM emulation code and shows it as a fatal error in the debugger. This means you no longer need to look at the commandline for this output, and you immediately know that something has gone wrong. Added 'exitrom' debugger parser command, which completely exits from the debugger *and* the ROM, going back to the ROM launcher. Cleaned up the API a little, rearranging some classes and adding references instead of pointers. More work to be done in this area. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2234 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- src/{gui => common}/StringList.hxx | 3 -- src/common/StringParser.hxx | 49 ++++++++++++++++++ src/common/Version.hxx | 2 +- src/debugger/Debugger.cxx | 37 ++++++-------- src/debugger/Debugger.hxx | 14 ++--- src/debugger/DebuggerParser.cxx | 50 +++++++++++------- src/debugger/DebuggerParser.hxx | 3 +- src/debugger/gui/DebuggerDialog.cxx | 48 +++++++++++------ src/debugger/gui/DebuggerDialog.hxx | 37 ++++++++++---- src/emucore/CartDPCPlus.cxx | 3 +- src/emucore/EventHandler.cxx | 3 +- src/emucore/Thumbulator.cxx | 6 ++- src/gui/Dialog.cxx | 5 +- src/gui/MessageBox.cxx | 51 ++++++++++++++----- src/gui/MessageBox.hxx | 9 +++- src/macosx/stella.xcodeproj/project.pbxproj | 16 +++--- .../stella_intel.xcodeproj/project.pbxproj | 12 +++-- 17 files changed, 235 insertions(+), 113 deletions(-) rename src/{gui => common}/StringList.hxx (94%) create mode 100644 src/common/StringParser.hxx diff --git a/src/gui/StringList.hxx b/src/common/StringList.hxx similarity index 94% rename from src/gui/StringList.hxx rename to src/common/StringList.hxx index d15057e5a..9ba0b99f2 100644 --- a/src/gui/StringList.hxx +++ b/src/common/StringList.hxx @@ -15,9 +15,6 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. // // $Id$ -// -// Based on code from ScummVM - Scumm Interpreter -// Copyright (C) 2002-2004 The ScummVM project //============================================================================ #ifndef STRING_LIST_HXX diff --git a/src/common/StringParser.hxx b/src/common/StringParser.hxx new file mode 100644 index 000000000..86a4bf1d2 --- /dev/null +++ b/src/common/StringParser.hxx @@ -0,0 +1,49 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2011 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +// +// $Id$ +//============================================================================ + +#ifndef STRING_PARSER_HXX +#define STRING_PARSER_HXX + +#include "StringList.hxx" +#include "bspf.hxx" + +/** + This class converts a string into a StringList by splitting on a delimiter. + By default, the delimiter is a newline. + + @author Stephen Anthony +*/ +class StringParser +{ + public: + StringParser(const string& str, char delim = '\n') + { + stringstream buf(str); + string line; + while(std::getline(buf, line, delim)) + myStringList.push_back(line); + } + + const StringList& stringList() const { return myStringList; } + + private: + StringList myStringList; +}; + +#endif diff --git a/src/common/Version.hxx b/src/common/Version.hxx index 593850402..4851abe93 100644 --- a/src/common/Version.hxx +++ b/src/common/Version.hxx @@ -22,7 +22,7 @@ #include -#define STELLA_VERSION "3.4_svn1" +#define STELLA_VERSION "3.4_beta1" #define STELLA_BUILD atoi("$Rev$" + 6) #endif diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index aac073294..e3294c738 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -112,15 +112,12 @@ Debugger::Debugger(OSystem* osystem) : DialogContainer(osystem), myConsole(NULL), mySystem(NULL), + myDialog(NULL), myParser(NULL), myCartDebug(NULL), myCpuDebug(NULL), myRiotDebug(NULL), myTiaDebug(NULL), - myTiaInfo(NULL), - myTiaOutput(NULL), - myTiaZoom(NULL), - myRom(NULL), myBreakPoints(NULL), myReadTraps(NULL), myWriteTraps(NULL), @@ -172,19 +169,12 @@ void Debugger::initialize() const GUI::Rect& r = getDialogBounds(); - delete myBaseDialog; - DebuggerDialog *dd = new DebuggerDialog(myOSystem, this, - r.left, r.top, r.width(), r.height()); - myBaseDialog = dd; + delete myBaseDialog; myBaseDialog = myDialog = NULL; + myDialog = new DebuggerDialog(myOSystem, this, + r.left, r.top, r.width(), r.height()); + myBaseDialog = myDialog; - myPrompt = dd->prompt(); - myTiaInfo = dd->tiaInfo(); - myTiaOutput = dd->tiaOutput(); - myTiaZoom = dd->tiaZoom(); - myRom = dd->rom(); - myMessage = dd->message(); - - myRewindManager = new RewindManager(*myOSystem, *dd->rewindButton()); + myRewindManager = new RewindManager(*myOSystem, myDialog->rewindButton()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -235,7 +225,7 @@ bool Debugger::start(const string& message, int address) if(address > -1) buf << valueToString(address); - myMessage->setEditString(buf.str()); + myDialog->message().setEditString(buf.str()); return true; } return false; @@ -247,17 +237,20 @@ bool Debugger::startWithFatalError(const string& message) if(myOSystem->eventHandler().enterDebugMode()) { // This must be done *after* we enter debug mode, - // so the message isn't erased - myMessage->setEditString(message); + // so the dialog is properly shown + myDialog->showFatalMessage(message); return true; } return false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Debugger::quit() +void Debugger::quit(bool exitrom) { - myOSystem->eventHandler().leaveDebugMode(); + if(exitrom) + myOSystem->eventHandler().handleEvent(Event::LauncherMode, 1); + else + myOSystem->eventHandler().leaveDebugMode(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -630,7 +623,7 @@ void Debugger::setStartState() saveOldState(false); // Set the 're-disassemble' flag, but don't do it until the next scheduled time - myRom->invalidate(false); + myDialog->rom().invalidate(false); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 99616625e..71a1055ed 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -42,6 +42,7 @@ class ButtonWidget; #include "Array.hxx" #include "DialogContainer.hxx" +#include "DebuggerDialog.hxx" #include "DebuggerParser.hxx" #include "System.hxx" #include "Rect.hxx" @@ -119,7 +120,7 @@ class Debugger : public DialogContainer Wrapper method for EventHandler::leaveDebugMode() for those classes that don't have access to EventHandler. */ - void quit(); + void quit(bool exitrom); bool addFunction(const string& name, const string& def, Expression* exp, bool builtin = false); @@ -344,7 +345,8 @@ class Debugger : public DialogContainer void reset(); void clearAllBreakPoints(); - PromptWidget *prompt() { return myPrompt; } + PromptWidget& prompt() { return myDialog->prompt(); } + RomWidget& rom() { return myDialog->rom(); }; void saveState(int state); void loadState(int state); @@ -353,22 +355,16 @@ class Debugger : public DialogContainer Console* myConsole; System* mySystem; + DebuggerDialog* myDialog; DebuggerParser* myParser; CartDebug* myCartDebug; CpuDebug* myCpuDebug; RiotDebug* myRiotDebug; TIADebug* myTiaDebug; - TiaInfoWidget* myTiaInfo; - TiaOutputWidget* myTiaOutput; - TiaZoomWidget* myTiaZoom; - RomWidget* myRom; - EditTextWidget* myMessage; - PackedBitArray* myBreakPoints; PackedBitArray* myReadTraps; PackedBitArray* myWriteTraps; - PromptWidget* myPrompt; static Debugger* myStaticDebugger; diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index 1f8c2ccdf..9f1b54e9b 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -699,7 +699,7 @@ void DebuggerParser::executeBreak() else bp = args[0]; debugger->toggleBreakPoint(bp); - debugger->myRom->invalidate(); + debugger->rom().invalidate(); if(debugger->breakPoint(bp)) commandResult << "Set"; @@ -799,7 +799,7 @@ void DebuggerParser::executeClearwatches() // "cls" void DebuggerParser::executeCls() { - debugger->prompt()->clearScreen(); + debugger->prompt().clearScreen(); commandResult << ""; } @@ -822,7 +822,7 @@ void DebuggerParser::executeCode() CartDebug::CODE, args[0], args[1]); commandResult << (result ? "added" : "removed") << " CODE directive on range $" << hex << args[0] << " $" << hex << args[1]; - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -863,7 +863,7 @@ void DebuggerParser::executeData() CartDebug::DATA, args[0], args[1]); commandResult << (result ? "added" : "removed") << " DATA directive on range $" << hex << args[0] << " $" << hex << args[1]; - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -872,7 +872,7 @@ void DebuggerParser::executeDefine() { // TODO: check if label already defined? debugger->cartDebug().addLabel(argStrings[0], args[1]); - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -952,6 +952,13 @@ void DebuggerParser::executeExec() commandResult << exec(file); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// "exitrom" +void DebuggerParser::executeExitRom() +{ + debugger->quit(true); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // "frame" void DebuggerParser::executeFrame() @@ -1002,7 +1009,7 @@ void DebuggerParser::executeGfx() CartDebug::GFX, args[0], args[1]); commandResult << (result ? "added" : "removed") << " GFX directive on range $" << hex << args[0] << " $" << hex << args[1]; - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1040,7 +1047,7 @@ void DebuggerParser::executeJump() if(line >= 0 && address >= 0) { - debugger->myRom->scrollTo(line); + debugger->rom().scrollTo(line); commandResult << "disassembly scrolled to address $" << HEX4 << address; } else @@ -1141,7 +1148,7 @@ void DebuggerParser::executeLoadconfig() else commandResult << debugger->cartDebug().loadConfigFile(); - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1159,7 +1166,7 @@ void DebuggerParser::executeLoadstate() void DebuggerParser::executeLoadsym() { commandResult << debugger->cartDebug().loadSymbolFile(argStrings[0]); - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1198,7 +1205,7 @@ void DebuggerParser::executePGfx() CartDebug::PGFX, args[0], args[1]); commandResult << (result ? "added" : "removed") << " PGFX directive on range $" << hex << args[0] << " $" << hex << args[1]; - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1223,7 +1230,7 @@ void DebuggerParser::executeRam() void DebuggerParser::executeReset() { debugger->reset(); - debugger->myRom->invalidate(); + debugger->rom().invalidate(); commandResult << "reset CPU"; } @@ -1233,7 +1240,7 @@ void DebuggerParser::executeRewind() { if(debugger->rewindState()) { - debugger->myRom->invalidate(); + debugger->rom().invalidate(); commandResult << "rewind by one level"; } else @@ -1266,7 +1273,7 @@ void DebuggerParser::executeRom() // The RomWidget is a special case, since we don't want to re-disassemble // any more than necessary. So we only do it by calling the following // method ... - debugger->myRom->invalidate(); + debugger->rom().invalidate(); commandResult << "changed " << debugger->valueToString( args.size() - 1 ) << " location(s)"; @@ -1291,7 +1298,7 @@ void DebuggerParser::executeRow() CartDebug::ROW, args[0], args[1]); commandResult << (result ? "added" : "removed") << " ROW directive on range $" << hex << args[0] << " $" << hex << args[1]; - debugger->myRom->invalidate(); + debugger->rom().invalidate(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1299,7 +1306,7 @@ void DebuggerParser::executeRow() void DebuggerParser::executeRun() { debugger->saveOldState(); - debugger->quit(); + debugger->quit(false); commandResult << "_EXIT_DEBUGGER"; // See PromptWidget for more info } @@ -1420,7 +1427,7 @@ void DebuggerParser::executeSaverom() // "saveses" void DebuggerParser::executeSaveses() { - if(debugger->prompt()->saveBuffer(argStrings[0])) + if(debugger->prompt().saveBuffer(argStrings[0])) commandResult << "saved session to file " << argStrings[0]; else commandResult << red("I/O error"); @@ -1563,7 +1570,7 @@ void DebuggerParser::executeUndef() { if(debugger->cartDebug().removeLabel(argStrings[0])) { - debugger->myRom->invalidate(); + debugger->rom().invalidate(); commandResult << argStrings[0] + " now undefined"; } else @@ -1823,6 +1830,15 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { &DebuggerParser::executeExec }, + { + "exitrom", + "Exit emulator, return to ROM launcher", + false, + false, + { kARG_END_ARGS }, + &DebuggerParser::executeExitRom + }, + { "frame", "Advance emulation by xx frames (default=1)", diff --git a/src/debugger/DebuggerParser.hxx b/src/debugger/DebuggerParser.hxx index 5d5a83554..e1678018a 100644 --- a/src/debugger/DebuggerParser.hxx +++ b/src/debugger/DebuggerParser.hxx @@ -83,7 +83,7 @@ class DebuggerParser private: enum { - kNumCommands = 69, + kNumCommands = 70, kMAX_ARG_TYPES = 10 }; @@ -157,6 +157,7 @@ class DebuggerParser void executeDisasm(); void executeDump(); void executeExec(); + void executeExitRom(); void executeFrame(); void executeFunction(); void executeGfx(); diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 031290954..23cdb36fb 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -35,26 +35,19 @@ #include "TiaWidget.hxx" #include "DataGridOpsWidget.hxx" #include "EditTextWidget.hxx" +#include "MessageBox.hxx" #include "Rect.hxx" #include "Debugger.hxx" #include "DebuggerParser.hxx" #include "DebuggerDialog.hxx" -enum { - kDDStepCmd = 'DDst', - kDDTraceCmd = 'DDtr', - kDDAdvCmd = 'DDav', - kDDSAdvCmd = 'DDsv', - kDDRewindCmd = 'DDrw', - kDDExitCmd = 'DDex' -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DebuggerDialog::DebuggerDialog(OSystem* osystem, DialogContainer* parent, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h, true), // use base surface - myTab(NULL) + myTab(NULL), + myFatalError(NULL) { addTiaArea(); addTabArea(); @@ -145,7 +138,11 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd, break; case kDDExitCmd: - doExit(); + doExitDebugger(); + break; + + case kDDExitFatalCmd: + doExitRom(); break; default: @@ -153,10 +150,23 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd, } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::showFatalMessage(const string& msg) +{ + const GUI::Rect& r = instance().debugger().getDialogBounds(); + + delete myFatalError; + myFatalError = + new MessageBox(this, instance().consoleFont(), msg, + r.width(), r.height(), kDDExitFatalCmd, + "Exit ROM", "Continue"); + myFatalError->show(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::addTiaArea() { - GUI::Rect r = instance().debugger().getTiaBounds(); + const GUI::Rect& r = instance().debugger().getTiaBounds(); myTiaOutput = new TiaOutputWidget(this, instance().consoleFont(), r.left, r.top, r.width(), r.height()); @@ -165,7 +175,7 @@ void DebuggerDialog::addTiaArea() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::addTabArea() { - GUI::Rect r = instance().debugger().getTabBounds(); + const GUI::Rect& r = instance().debugger().getTabBounds(); const int vBorder = 4; @@ -214,7 +224,7 @@ void DebuggerDialog::addStatusArea() { const GUI::Font& font = instance().consoleFont(); const int lineHeight = font.getLineHeight(); - GUI::Rect r = instance().debugger().getStatusBounds(); + const GUI::Rect& r = instance().debugger().getStatusBounds(); int xpos, ypos; xpos = r.left; ypos = r.top; @@ -237,7 +247,7 @@ void DebuggerDialog::addStatusArea() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::addRomArea() { - GUI::Rect r = instance().debugger().getRomBounds(); + const GUI::Rect& r = instance().debugger().getRomBounds(); int xpos, ypos; xpos = r.left + 10; ypos = 10; @@ -320,7 +330,13 @@ void DebuggerDialog::doRewind() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DebuggerDialog::doExit() +void DebuggerDialog::doExitDebugger() { instance().debugger().parser().run("run"); } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::doExitRom() +{ + instance().debugger().parser().run("exitrom"); +} diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index 865b75b3d..60312dbbd 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -36,6 +36,7 @@ class EditTextWidget; class TiaInfoWidget; class TiaOutputWidget; class TiaZoomWidget; +class MessageBox; #include "Dialog.hxx" @@ -46,19 +47,31 @@ class DebuggerDialog : public Dialog int x, int y, int w, int h); ~DebuggerDialog(); - PromptWidget* prompt() { return myPrompt; } - TiaInfoWidget* tiaInfo() { return myTiaInfo; } - TiaOutputWidget* tiaOutput() { return myTiaOutput; } - TiaZoomWidget* tiaZoom() { return myTiaZoom; } - RomWidget* rom() { return myRom; } - EditTextWidget* message() { return myMessageBox; } - ButtonWidget* rewindButton() { return myRewindButton; } + PromptWidget& prompt() { return *myPrompt; } + TiaInfoWidget& tiaInfo() { return *myTiaInfo; } + TiaOutputWidget& tiaOutput() { return *myTiaOutput; } + TiaZoomWidget& tiaZoom() { return *myTiaZoom; } + RomWidget& rom() { return *myRom; } + EditTextWidget& message() { return *myMessageBox; } + ButtonWidget& rewindButton() { return *myRewindButton; } - virtual void loadConfig(); - virtual void handleKeyDown(int ascii, int keycode, int modifiers); - virtual void handleCommand(CommandSender* sender, int cmd, int data, int id); + void loadConfig(); + void handleKeyDown(int ascii, int keycode, int modifiers); + void handleCommand(CommandSender* sender, int cmd, int data, int id); + + void showFatalMessage(const string& msg); private: + enum { + kDDStepCmd = 'DDst', + kDDTraceCmd = 'DDtr', + kDDAdvCmd = 'DDav', + kDDSAdvCmd = 'DDsv', + kDDRewindCmd = 'DDrw', + kDDExitCmd = 'DDex', + kDDExitFatalCmd = 'DDer' + }; + TabWidget* myTab; PromptWidget* myPrompt; @@ -70,6 +83,7 @@ class DebuggerDialog : public Dialog RomWidget* myRom; EditTextWidget* myMessageBox; ButtonWidget* myRewindButton; + MessageBox* myFatalError; private: void addTiaArea(); @@ -82,7 +96,8 @@ class DebuggerDialog : public Dialog void doScanlineAdvance(); void doAdvance(); void doRewind(); - void doExit(); + void doExitDebugger(); + void doExitRom(); }; #endif diff --git a/src/emucore/CartDPCPlus.cxx b/src/emucore/CartDPCPlus.cxx index d456125da..23c4baad0 100644 --- a/src/emucore/CartDPCPlus.cxx +++ b/src/emucore/CartDPCPlus.cxx @@ -212,9 +212,10 @@ inline void CartridgeDPCPlus::callFunction(uInt8 value) catch(const string& error) { if(!mySystem->autodectMode()) { - cerr << error << endl; #ifdef DEBUGGER_SUPPORT Debugger::debugger().startWithFatalError(error); + #else + cout << error << endl; #endif } } diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 578f40141..e2e46264f 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -1034,7 +1034,8 @@ void EventHandler::handleEvent(Event::Type event, int state) return; case Event::LauncherMode: - if((myState == S_EMULATE || myState == S_CMDMENU) && state) + if((myState == S_EMULATE || myState == S_CMDMENU || + myState == S_DEBUGGER) && state) { myOSystem->settings().saveConfig(); diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 3334e5e39..3d1490d53 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -72,7 +72,8 @@ string Thumbulator::run( void ) throw(const string&) inline int Thumbulator::fatalError(const char* opcode, uInt32 v1, const char* msg) throw(const string&) { - statusMsg << opcode << "(" << HEX8 << v1 << "), " << msg << endl; + statusMsg << "Thumb ARM emulation fatal error: " << endl + << opcode << "(" << HEX8 << v1 << "), " << msg << endl; dump_regs(); throw statusMsg.str(); } @@ -82,7 +83,8 @@ inline int Thumbulator::fatalError(const char* opcode, uInt32 v1, uInt32 v2, const char* msg) throw(const string&) { - statusMsg << opcode << "(" << HEX8 << v1 << "," << v2 << "), " << msg << endl; + statusMsg << "Thumb ARM emulation fatal error: " << endl + << opcode << "(" << HEX8 << v1 << "," << v2 << "), " << msg << endl; dump_regs(); throw statusMsg.str(); } diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index f6f4b8ace..0db90b757 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -584,7 +584,10 @@ Widget* Dialog::findWidget(int x, int y) void Dialog::addOKCancelBGroup(WidgetArray& wid, const GUI::Font& font, const string& okText, const string& cancelText) { - int buttonWidth = font.getStringWidth("Cancel") + 15; + + int buttonWidth = BSPF_max(font.getStringWidth("Cancel"), + BSPF_max(font.getStringWidth(okText), + font.getStringWidth(okText))) + 15; int buttonHeight = font.getLineHeight() + 4; ButtonWidget* b; #ifndef MAC_OSX diff --git a/src/gui/MessageBox.cxx b/src/gui/MessageBox.cxx index e4482c084..a371b373c 100644 --- a/src/gui/MessageBox.cxx +++ b/src/gui/MessageBox.cxx @@ -21,28 +21,60 @@ #include "OSystem.hxx" #include "Version.hxx" #include "Widget.hxx" +#include "StringParser.hxx" #include "MessageBox.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font, - const StringList& text, int max_w, int max_h, int cmd) - : Dialog(&boss->instance(), &boss->parent(), 0, 0, 16, 16), + const StringList& text, int max_w, int max_h, int cmd, + const string& okText, const string& cancelText) + : Dialog(&boss->instance(), &boss->parent(), 0, 0, max_w, max_h), CommandSender(boss), myCmd(cmd) +{ + addText(font, text); + + WidgetArray wid; + addOKCancelBGroup(wid, font, okText, cancelText); + addToFocusList(wid); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font, + const string& text, int max_w, int max_h, int cmd, + const string& okText, const string& cancelText) + : Dialog(&boss->instance(), &boss->parent(), 0, 0, max_w, max_h), + CommandSender(boss), + myCmd(cmd) +{ + StringParser p(text); + addText(font, p.stringList()); + + WidgetArray wid; + addOKCancelBGroup(wid, font, okText, cancelText); + addToFocusList(wid); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +MessageBox::~MessageBox() +{ +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void MessageBox::addText(const GUI::Font& font, const StringList& text) { const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); int xpos, ypos; - WidgetArray wid; // Set real dimensions int str_w = 0; for(uInt32 i = 0; i < text.size(); ++i) str_w = BSPF_max((int)text[i].length(), str_w); - _w = BSPF_min(str_w * fontWidth + 20, max_w); - _h = BSPF_min(((text.size() + 2) * lineHeight + 20), (uInt32)max_h); + _w = BSPF_min(str_w * fontWidth + 20, _w); + _h = BSPF_min(((text.size() + 2) * lineHeight + 20), (uInt32)_h); xpos = 10; ypos = 10; for(uInt32 i = 0; i < text.size(); ++i) @@ -51,15 +83,6 @@ MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font, fontHeight, text[i], kTextAlignLeft); ypos += fontHeight; } - - addOKCancelBGroup(wid, font); - - addToFocusList(wid); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MessageBox::~MessageBox() -{ } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/MessageBox.hxx b/src/gui/MessageBox.hxx index e3ab60dcd..2a05713f5 100644 --- a/src/gui/MessageBox.hxx +++ b/src/gui/MessageBox.hxx @@ -36,14 +36,19 @@ class MessageBox : public Dialog, public CommandSender { public: MessageBox(GuiObject* boss, const GUI::Font& font, const StringList& text, - int max_w, int max_h, int cmd = 0); + int max_w, int max_h, int cmd = 0, + const string& okText = "", const string& cancelText = ""); + MessageBox(GuiObject* boss, const GUI::Font& font, const string& text, + int max_w, int max_h, int cmd = 0, + const string& okText = "", const string& cancelText = ""); virtual ~MessageBox(); /** Place the input dialog onscreen and center it */ void show() { parent().addDialog(this); } private: - virtual void handleCommand(CommandSender* sender, int cmd, int data, int id); + void addText(const GUI::Font& font, const StringList& text); + void handleCommand(CommandSender* sender, int cmd, int data, int id); private: int myCmd; diff --git a/src/macosx/stella.xcodeproj/project.pbxproj b/src/macosx/stella.xcodeproj/project.pbxproj index 1a11608fc..03a7ad310 100644 --- a/src/macosx/stella.xcodeproj/project.pbxproj +++ b/src/macosx/stella.xcodeproj/project.pbxproj @@ -69,7 +69,6 @@ 2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC7084578BF00812C11 /* PopUpWidget.hxx */; }; 2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */; }; 2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */; }; - 2D91741509BA90380026E9FF /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACF084578BF00812C11 /* StringList.hxx */; }; 2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */; }; 2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD3084578BF00812C11 /* VideoDialog.hxx */; }; 2D91741809BA90380026E9FF /* Widget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD5084578BF00812C11 /* Widget.hxx */; }; @@ -251,6 +250,8 @@ DC17E80C1361FDB500397A9E /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = DC17E8081361FDB500397A9E /* pngstruct.h */; }; DC1FC18A0DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC1FC1880DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx */; }; DC1FC18B0DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC1FC1890DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx */; }; + DC20D6F3138EB130002A7428 /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC20D6F1138EB130002A7428 /* StringList.hxx */; }; + DC20D6F4138EB130002A7428 /* StringParser.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC20D6F2138EB130002A7428 /* StringParser.hxx */; }; DC3FE47C11C7D35600C91C72 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = DC3FE46A11C7D35600C91C72 /* png.c */; }; DC3FE47D11C7D35600C91C72 /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FE46B11C7D35600C91C72 /* png.h */; }; DC3FE47E11C7D35600C91C72 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FE46C11C7D35600C91C72 /* pngconf.h */; }; @@ -336,7 +337,6 @@ DCE9CC2B1103812700C86671 /* CartDebug.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE9CC271103812700C86671 /* CartDebug.hxx */; }; DCE9CC2C1103812700C86671 /* DiStella.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE9CC281103812700C86671 /* DiStella.cxx */; }; DCE9CC2D1103812700C86671 /* DiStella.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE9CC291103812700C86671 /* DiStella.hxx */; }; - DCECDAFA10B9DBDC00AF4E1B /* Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCECDAF210B9DBDC00AF4E1B /* Device.cxx */; }; DCECDAFB10B9DBDC00AF4E1B /* Device.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCECDAF310B9DBDC00AF4E1B /* Device.hxx */; }; DCECDAFC10B9DBDC00AF4E1B /* M6502.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCECDAF410B9DBDC00AF4E1B /* M6502.cxx */; }; DCECDAFD10B9DBDC00AF4E1B /* M6502.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCECDAF510B9DBDC00AF4E1B /* M6502.hxx */; }; @@ -547,7 +547,6 @@ 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ProgressDialog.hxx; path = ../gui/ProgressDialog.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEACA084578BF00812C11 /* ScrollBarWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollBarWidget.cxx; path = ../gui/ScrollBarWidget.cxx; sourceTree = SOURCE_ROOT; }; 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ScrollBarWidget.hxx; path = ../gui/ScrollBarWidget.hxx; sourceTree = SOURCE_ROOT; }; - 2DDBEACF084578BF00812C11 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../gui/StringList.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD0084578BF00812C11 /* TabWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TabWidget.cxx; path = ../gui/TabWidget.cxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = TabWidget.hxx; path = ../gui/TabWidget.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD2084578BF00812C11 /* VideoDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VideoDialog.cxx; path = ../gui/VideoDialog.cxx; sourceTree = SOURCE_ROOT; }; @@ -658,6 +657,8 @@ DC17E8081361FDB500397A9E /* pngstruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = ../libpng/pngstruct.h; sourceTree = SOURCE_ROOT; }; DC1FC1880DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SerialPortMACOSX.cxx; sourceTree = ""; }; DC1FC1890DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = SerialPortMACOSX.hxx; sourceTree = ""; }; + DC20D6F1138EB130002A7428 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../common/StringList.hxx; sourceTree = SOURCE_ROOT; }; + DC20D6F2138EB130002A7428 /* StringParser.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringParser.hxx; path = ../common/StringParser.hxx; sourceTree = SOURCE_ROOT; }; DC3FE46A11C7D35600C91C72 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = png.c; path = ../libpng/png.c; sourceTree = SOURCE_ROOT; }; DC3FE46B11C7D35600C91C72 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = png.h; path = ../libpng/png.h; sourceTree = SOURCE_ROOT; }; DC3FE46C11C7D35600C91C72 /* pngconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = ../libpng/pngconf.h; sourceTree = SOURCE_ROOT; }; @@ -744,7 +745,6 @@ DCE9CC271103812700C86671 /* CartDebug.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CartDebug.hxx; path = ../debugger/CartDebug.hxx; sourceTree = SOURCE_ROOT; }; DCE9CC281103812700C86671 /* DiStella.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DiStella.cxx; path = ../debugger/DiStella.cxx; sourceTree = SOURCE_ROOT; }; DCE9CC291103812700C86671 /* DiStella.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DiStella.hxx; path = ../debugger/DiStella.hxx; sourceTree = SOURCE_ROOT; }; - DCECDAF210B9DBDC00AF4E1B /* Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Device.cxx; path = ../emucore/Device.cxx; sourceTree = SOURCE_ROOT; }; DCECDAF310B9DBDC00AF4E1B /* Device.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Device.hxx; path = ../emucore/Device.hxx; sourceTree = SOURCE_ROOT; }; DCECDAF410B9DBDC00AF4E1B /* M6502.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = M6502.cxx; path = ../emucore/M6502.cxx; sourceTree = SOURCE_ROOT; }; DCECDAF510B9DBDC00AF4E1B /* M6502.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = M6502.hxx; path = ../emucore/M6502.hxx; sourceTree = SOURCE_ROOT; }; @@ -946,6 +946,8 @@ 2DDA34020665817D00CDD299 /* SoundSDL.cxx */, 2DDA34030665817D00CDD299 /* SoundSDL.hxx */, DC5D1AA6102C6FC900E59AC1 /* Stack.hxx */, + DC20D6F1138EB130002A7428 /* StringList.hxx */, + DC20D6F2138EB130002A7428 /* StringParser.hxx */, DCF467BC0F9399F500B25D7A /* Version.hxx */, ); name = common; @@ -1041,7 +1043,6 @@ 2DE2DF3A0627AE07006BEC99 /* Control.cxx */, 2DE2DF3B0627AE07006BEC99 /* Control.hxx */, DC932D3F0F278A5200FEFEFC /* DefProps.hxx */, - DCECDAF210B9DBDC00AF4E1B /* Device.cxx */, DCECDAF310B9DBDC00AF4E1B /* Device.hxx */, 2DE2DF3E0627AE07006BEC99 /* Driving.cxx */, 2DE2DF3F0627AE07006BEC99 /* Driving.hxx */, @@ -1189,7 +1190,6 @@ DC5D2C4F0F117CFD004D1660 /* StellaFont.hxx */, DC5D2C500F117CFD004D1660 /* StellaLargeFont.hxx */, DC5D2C510F117CFD004D1660 /* StellaMediumFont.hxx */, - 2DDBEACF084578BF00812C11 /* StringList.hxx */, 2DEF21FA08BC033500B246B4 /* StringListWidget.cxx */, 2DEF21FB08BC033500B246B4 /* StringListWidget.hxx */, 2DDBEAD0084578BF00812C11 /* TabWidget.cxx */, @@ -1358,7 +1358,6 @@ 2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */, 2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */, 2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */, - 2D91741509BA90380026E9FF /* StringList.hxx in Headers */, 2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */, 2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */, 2D91741809BA90380026E9FF /* Widget.hxx in Headers */, @@ -1475,6 +1474,8 @@ DC17E80A1361FDB500397A9E /* pnginfo.h in Headers */, DC17E80B1361FDB500397A9E /* pnglibconf.h in Headers */, DC17E80C1361FDB500397A9E /* pngstruct.h in Headers */, + DC20D6F3138EB130002A7428 /* StringList.hxx in Headers */, + DC20D6F4138EB130002A7428 /* StringParser.hxx in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1705,7 +1706,6 @@ DCF467C40F939A1400B25D7A /* CartEFSC.cxx in Sources */, DCF7B0DD10A762FC007A2870 /* CartF0.cxx in Sources */, DCF7B0DF10A762FC007A2870 /* CartFA.cxx in Sources */, - DCECDAFA10B9DBDC00AF4E1B /* Device.cxx in Sources */, DCECDAFC10B9DBDC00AF4E1B /* M6502.cxx in Sources */, DCECDAFE10B9DBDC00AF4E1B /* NullDev.cxx in Sources */, DCECDB0010B9DBDC00AF4E1B /* System.cxx in Sources */, diff --git a/src/macosx/stella_intel.xcodeproj/project.pbxproj b/src/macosx/stella_intel.xcodeproj/project.pbxproj index cd4b55a08..fce9f9515 100644 --- a/src/macosx/stella_intel.xcodeproj/project.pbxproj +++ b/src/macosx/stella_intel.xcodeproj/project.pbxproj @@ -69,7 +69,6 @@ 2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC7084578BF00812C11 /* PopUpWidget.hxx */; }; 2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */; }; 2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */; }; - 2D91741509BA90380026E9FF /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACF084578BF00812C11 /* StringList.hxx */; }; 2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */; }; 2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD3084578BF00812C11 /* VideoDialog.hxx */; }; 2D91741809BA90380026E9FF /* Widget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD5084578BF00812C11 /* Widget.hxx */; }; @@ -280,6 +279,8 @@ DC6B2BA511037FF200F199A7 /* CartDebug.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6B2BA111037FF200F199A7 /* CartDebug.hxx */; }; DC6B2BA611037FF200F199A7 /* DiStella.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC6B2BA211037FF200F199A7 /* DiStella.cxx */; }; DC6B2BA711037FF200F199A7 /* DiStella.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6B2BA311037FF200F199A7 /* DiStella.hxx */; }; + DC74D6A1138D4D7E00F05C5C /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC74D69F138D4D7E00F05C5C /* StringList.hxx */; }; + DC74D6A2138D4D7E00F05C5C /* StringParser.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */; }; DC8078DB0B4BD5F3005E9305 /* DebuggerExpressions.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8078DA0B4BD5F3005E9305 /* DebuggerExpressions.hxx */; }; DC8078E80B4BD697005E9305 /* FileSnapDialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC8078E40B4BD697005E9305 /* FileSnapDialog.cxx */; }; DC8078E90B4BD697005E9305 /* FileSnapDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8078E50B4BD697005E9305 /* FileSnapDialog.hxx */; }; @@ -543,7 +544,6 @@ 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ProgressDialog.hxx; path = ../gui/ProgressDialog.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEACA084578BF00812C11 /* ScrollBarWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollBarWidget.cxx; path = ../gui/ScrollBarWidget.cxx; sourceTree = SOURCE_ROOT; }; 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ScrollBarWidget.hxx; path = ../gui/ScrollBarWidget.hxx; sourceTree = SOURCE_ROOT; }; - 2DDBEACF084578BF00812C11 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../gui/StringList.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD0084578BF00812C11 /* TabWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TabWidget.cxx; path = ../gui/TabWidget.cxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = TabWidget.hxx; path = ../gui/TabWidget.hxx; sourceTree = SOURCE_ROOT; }; 2DDBEAD2084578BF00812C11 /* VideoDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VideoDialog.cxx; path = ../gui/VideoDialog.cxx; sourceTree = SOURCE_ROOT; }; @@ -684,6 +684,8 @@ DC6B2BA111037FF200F199A7 /* CartDebug.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CartDebug.hxx; path = ../debugger/CartDebug.hxx; sourceTree = SOURCE_ROOT; }; DC6B2BA211037FF200F199A7 /* DiStella.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DiStella.cxx; path = ../debugger/DiStella.cxx; sourceTree = SOURCE_ROOT; }; DC6B2BA311037FF200F199A7 /* DiStella.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DiStella.hxx; path = ../debugger/DiStella.hxx; sourceTree = SOURCE_ROOT; }; + DC74D69F138D4D7E00F05C5C /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../common/StringList.hxx; sourceTree = SOURCE_ROOT; }; + DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringParser.hxx; path = ../common/StringParser.hxx; sourceTree = SOURCE_ROOT; }; DC8078DA0B4BD5F3005E9305 /* DebuggerExpressions.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = DebuggerExpressions.hxx; path = ../debugger/DebuggerExpressions.hxx; sourceTree = SOURCE_ROOT; }; DC8078E40B4BD697005E9305 /* FileSnapDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FileSnapDialog.cxx; path = ../gui/FileSnapDialog.cxx; sourceTree = SOURCE_ROOT; }; DC8078E50B4BD697005E9305 /* FileSnapDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = FileSnapDialog.hxx; path = ../gui/FileSnapDialog.hxx; sourceTree = SOURCE_ROOT; }; @@ -941,6 +943,8 @@ 2DDA34020665817D00CDD299 /* SoundSDL.cxx */, 2DDA34030665817D00CDD299 /* SoundSDL.hxx */, DC5D1AA6102C6FC900E59AC1 /* Stack.hxx */, + DC74D69F138D4D7E00F05C5C /* StringList.hxx */, + DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */, DCF467BC0F9399F500B25D7A /* Version.hxx */, ); name = common; @@ -1183,7 +1187,6 @@ DC5D2C4F0F117CFD004D1660 /* StellaFont.hxx */, DC5D2C500F117CFD004D1660 /* StellaLargeFont.hxx */, DC5D2C510F117CFD004D1660 /* StellaMediumFont.hxx */, - 2DDBEACF084578BF00812C11 /* StringList.hxx */, 2DEF21FA08BC033500B246B4 /* StringListWidget.cxx */, 2DEF21FB08BC033500B246B4 /* StringListWidget.hxx */, 2DDBEAD0084578BF00812C11 /* TabWidget.cxx */, @@ -1352,7 +1355,6 @@ 2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */, 2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */, 2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */, - 2D91741509BA90380026E9FF /* StringList.hxx in Headers */, 2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */, 2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */, 2D91741809BA90380026E9FF /* Widget.hxx in Headers */, @@ -1469,6 +1471,8 @@ DC69670C1361FD0A0036499D /* pnginfo.h in Headers */, DC69670D1361FD0A0036499D /* pnglibconf.h in Headers */, DC69670E1361FD0A0036499D /* pngstruct.h in Headers */, + DC74D6A1138D4D7E00F05C5C /* StringList.hxx in Headers */, + DC74D6A2138D4D7E00F05C5C /* StringParser.hxx in Headers */, ); runOnlyForDeploymentPostprocessing = 0; };