diff --git a/AppleWinExpress2008.vcproj b/AppleWinExpress2008.vcproj
index c5d8019b..6e5405a4 100644
--- a/AppleWinExpress2008.vcproj
+++ b/AppleWinExpress2008.vcproj
@@ -389,6 +389,14 @@
RelativePath=".\source\Debugger\Debugger_Types.h"
>
+
+
+
+
diff --git a/AppleWinExpress2019.vcxproj b/AppleWinExpress2019.vcxproj
index 1264320a..aedf8904 100644
--- a/AppleWinExpress2019.vcxproj
+++ b/AppleWinExpress2019.vcxproj
@@ -69,6 +69,7 @@
+
@@ -156,6 +157,7 @@
+
diff --git a/AppleWinExpress2019.vcxproj.filters b/AppleWinExpress2019.vcxproj.filters
index 4e5b5f10..1a783af0 100644
--- a/AppleWinExpress2019.vcxproj.filters
+++ b/AppleWinExpress2019.vcxproj.filters
@@ -226,6 +226,9 @@
Source Files\Debugger
+
+ Source Files\Debugger
+
@@ -534,6 +537,9 @@
Source Files\Debugger
+
+ Source Files\Debugger
+
diff --git a/source/Debugger/Debug.cpp b/source/Debugger/Debug.cpp
index 1f350eaa..5741ae24 100644
--- a/source/Debugger/Debug.cpp
+++ b/source/Debugger/Debug.cpp
@@ -33,6 +33,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "Debug.h"
#include "DebugDefs.h"
+#include "Debugger_Win32.h"
#include "../Windows/AppleWin.h"
#include "../Core.h"
@@ -44,7 +45,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "../Memory.h"
#include "../NTSC.h"
#include "../SoundCore.h" // SoundCore_SetFade()
-#include "../Windows/Win32Frame.h"
// #define DEBUG_COMMAND_HELP 1
// #define DEBUG_ASM_HASH 1
@@ -340,9 +340,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// Drawing
static void _CmdColorGet ( const int iScheme, const int iColor );
-// Font
- static void _UpdateWindowFontHeights (int nFontHeight);
-
// Source Level Debugging
static bool BufferAssemblyListing ( const std::string & pFileName );
static bool ParseAssemblyListing ( bool bBytesToMemory, bool bAddSymbols );
@@ -663,7 +660,7 @@ Update_t CmdBookmarkLoad (int nArgs)
// strcat( sMiniFileName, ".aws" ); // HACK: MAGIC STRING
// _tcscpy(sFileName, g_sCurrentDir); //
-// _tcscat(sFileName, sMiniFileName);
+// strcat(sFileName, sMiniFileName);
}
return UPDATE_CONSOLE_DISPLAY;
@@ -2622,327 +2619,6 @@ Update_t CmdConfigDisasm( int nArgs )
return UPDATE_CONSOLE_DISPLAY | UPDATE_DISASM;
}
-// Config - Font __________________________________________________________________________________
-
-
-//===========================================================================
-Update_t CmdConfigFontLoad( int nArgs )
-{
- return UPDATE_CONSOLE_DISPLAY;
-}
-
-
-//===========================================================================
-Update_t CmdConfigFontSave( int nArgs )
-{
- return UPDATE_CONSOLE_DISPLAY;
-}
-
-
-//===========================================================================
-Update_t CmdConfigFontMode( int nArgs )
-{
- if (nArgs != 2)
- return Help_Arg_1( CMD_CONFIG_FONT );
-
- int nMode = g_aArgs[ 2 ].nValue;
-
- if ((nMode < 0) || (nMode >= NUM_FONT_SPACING))
- return Help_Arg_1( CMD_CONFIG_FONT );
-
- g_iFontSpacing = nMode;
- _UpdateWindowFontHeights( g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight );
-
- return UPDATE_CONSOLE_DISPLAY | UPDATE_DISASM;
-}
-
-
-//===========================================================================
-Update_t CmdConfigFont (int nArgs)
-{
- int iArg;
-
- if (! nArgs)
- return CmdConfigGetFont( nArgs );
- else
- if (nArgs <= 2) // nArgs
- {
- iArg = 1;
-
- // FONT * is undocumented, like VERSION *
- if ((! _tcscmp( g_aArgs[ iArg ].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName )) ||
- (! _tcscmp( g_aArgs[ iArg ].sArg, g_aParameters[ PARAM_MEM_SEARCH_WILD ].m_sName )) )
- {
- TCHAR sText[ CONSOLE_WIDTH ];
- ConsoleBufferPushFormat( sText, "Lines: %d Font Px: %d Line Px: %d"
- , g_nDisasmDisplayLines
- , g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight
- , g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight );
- ConsoleBufferToDisplay();
- return UPDATE_CONSOLE_DISPLAY;
- }
-
- int iFound;
- int nFound;
-
- nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_GENERAL_BEGIN, _PARAM_GENERAL_END );
- if (nFound)
- {
- switch( iFound )
- {
- case PARAM_LOAD:
- return CmdConfigFontLoad( nArgs );
- break;
- case PARAM_SAVE:
- return CmdConfigFontSave( nArgs );
- break;
- // TODO: FONT SIZE #
- // TODO: AA {ON|OFF}
- default:
- break;
- }
- }
-
- nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_FONT_BEGIN, _PARAM_FONT_END );
- if (nFound)
- {
- if (iFound == PARAM_FONT_MODE)
- return CmdConfigFontMode( nArgs );
- }
-
- return CmdConfigSetFont( nArgs );
- }
-
- return Help_Arg_1( CMD_CONFIG_FONT );
-}
-
-
-// Only for FONT_DISASM_DEFAULT !
-//===========================================================================
-void _UpdateWindowFontHeights( int nFontHeight )
-{
- if (nFontHeight)
- {
- int nConsoleTopY = GetConsoleTopPixels( g_nConsoleDisplayLines );
-
- int nHeight = 0;
-
- if (g_iFontSpacing == FONT_SPACING_CLASSIC)
- {
- nHeight = nFontHeight + 1;
- g_nDisasmDisplayLines = nConsoleTopY / nHeight;
- }
- else
- if (g_iFontSpacing == FONT_SPACING_CLEAN)
- {
- nHeight = nFontHeight;
- g_nDisasmDisplayLines = nConsoleTopY / nHeight;
- }
- else
- if (g_iFontSpacing == FONT_SPACING_COMPRESSED)
- {
- nHeight = nFontHeight - 1;
- g_nDisasmDisplayLines = (nConsoleTopY + nHeight) / nHeight; // Ceil()
- }
-
- g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight = nHeight;
-
-// int nHeightOptimal = (nHeight0 + nHeight1) / 2;
-// int nLinesOptimal = nConsoleTopY / nHeightOptimal;
-// g_nDisasmDisplayLines = nLinesOptimal;
-
- WindowUpdateSizes();
- }
-}
-
-//===========================================================================
-bool _CmdConfigFont ( int iFont, LPCSTR pFontName, int iPitchFamily, int nFontHeight )
-{
- bool bStatus = false;
- HFONT hFont = (HFONT) 0;
- FontConfig_t *pFont = NULL;
-
- if (iFont < NUM_FONTS)
- pFont = & g_aFontConfig[ iFont ];
- else
- return bStatus;
-
- if (pFontName)
- {
-// int nFontHeight = g_nFontHeight - 1;
-
- int bAntiAlias = (nFontHeight < 14) ? DEFAULT_QUALITY : ANTIALIASED_QUALITY;
-
- // Try allow new font
- hFont = CreateFont(
- nFontHeight
- , 0 // Width
- , 0 // Escapement
- , 0 // Orientatin
- , FW_MEDIUM // Weight
- , 0 // Italic
- , 0 // Underline
- , 0 // Strike Out
- , DEFAULT_CHARSET // OEM_CHARSET
- , OUT_DEFAULT_PRECIS
- , CLIP_DEFAULT_PRECIS
- , bAntiAlias // ANTIALIASED_QUALITY // DEFAULT_QUALITY
- , iPitchFamily // HACK: MAGIC #: 4
- , pFontName );
-
- if (hFont)
- {
- if (iFont == FONT_DISASM_DEFAULT)
- _UpdateWindowFontHeights( nFontHeight );
-
- _tcsncpy( pFont->_sFontName, pFontName, MAX_FONT_NAME-1 );
- pFont->_sFontName[ MAX_FONT_NAME-1 ] = 0;
-
- Win32Frame& win32Frame = Win32Frame::GetWin32Frame();
-
- HDC hDC = win32Frame.FrameGetDC();
-
- TEXTMETRIC tm;
- GetTextMetrics(hDC, &tm);
-
- SIZE size;
- TCHAR sText[] = "W";
- int nLen = 1;
-
- int nFontWidthAvg;
- int nFontWidthMax;
-
-// if (! (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)) // Windows has this bitflag reversed!
-// { // Proportional font?
-// bool bStop = true;
-// }
-
- // GetCharWidth32() doesn't work with TrueType Fonts
- if (GetTextExtentPoint32( hDC, sText, nLen, &size ))
- {
- nFontWidthAvg = tm.tmAveCharWidth;
- nFontWidthMax = size.cx;
- }
- else
- {
- // Font Name Avg Max "W"
- // Arial 7 8 11
- // Courier 5 32 11
- // Courier New 7 14
- nFontWidthAvg = tm.tmAveCharWidth;
- nFontWidthMax = tm.tmMaxCharWidth;
- }
-
- if (! nFontWidthAvg)
- {
- nFontWidthAvg = 7;
- nFontWidthMax = 7;
- }
-
- win32Frame.FrameReleaseDC();
-
-// DeleteObject( g_hFontDisasm );
-// g_hFontDisasm = hFont;
- pFont->_hFont = hFont;
-
- pFont->_nFontWidthAvg = nFontWidthAvg;
- pFont->_nFontWidthMax = nFontWidthMax;
- pFont->_nFontHeight = nFontHeight;
-
- bStatus = true;
- }
- }
- return bStatus;
-}
-
-
-//===========================================================================
-Update_t CmdConfigSetFont (int nArgs)
-{
-#if OLD_FONT
- HFONT hFont = (HFONT) 0;
- TCHAR *pFontName = NULL;
- int nHeight = g_nFontHeight;
- int iFontTarget = FONT_DISASM_DEFAULT;
- int iFontPitch = FIXED_PITCH | FF_MODERN;
-// int iFontMode =
- bool bHaveTarget = false;
- bool bHaveFont = false;
-
- if (! nArgs)
- { // reset to defaut font
- pFontName = g_sFontNameDefault;
- }
- else
- if (nArgs <= 3)
- {
- int iArg = 1;
- pFontName = g_aArgs[1].sArg;
-
- // [DISASM|INFO|CONSOLE] "FontName" [#]
- // "FontName" can be either arg 1 or 2
-
- int iFound;
- int nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_WINDOW_BEGIN, _PARAM_WINDOW_END );
- if (nFound)
- {
- switch( iFound )
- {
- case PARAM_DISASM : iFontTarget = FONT_DISASM_DEFAULT; iFontPitch = FIXED_PITCH | FF_MODERN ; bHaveTarget = true; break;
- case PARAM_INFO : iFontTarget = FONT_INFO ; iFontPitch = FIXED_PITCH | FF_MODERN ; bHaveTarget = true; break;
- case PARAM_CONSOLE: iFontTarget = FONT_CONSOLE ; iFontPitch = DEFAULT_PITCH | FF_DECORATIVE; bHaveTarget = true; break;
- default:
- if (g_aArgs[2].bType != TOKEN_QUOTE_DOUBLE)
- return Help_Arg_1( CMD_CONFIG_FONT );
- break;
- }
- if (bHaveTarget)
- {
- pFontName = g_aArgs[2].sArg;
- }
- }
- else
- if (nArgs == 2)
- {
- nHeight = atoi(g_aArgs[2].sArg );
- if ((nHeight < 6) || (nHeight > 36))
- nHeight = g_nFontHeight;
- }
- }
- else
- {
- return Help_Arg_1( CMD_CONFIG_FONT );
- }
-
- if (! _CmdConfigFont( iFontTarget, pFontName, iFontPitch, nHeight ))
- {
- }
-#endif
- return UPDATE_ALL;
-}
-
-//===========================================================================
-Update_t CmdConfigGetFont (int nArgs)
-{
- if (! nArgs)
- {
- for (int iFont = 0; iFont < NUM_FONTS; iFont++ )
- {
- TCHAR sText[ CONSOLE_WIDTH ] = TEXT("");
- ConsoleBufferPushFormat( sText, " Font: %-20s A:%2d M:%2d",
-// g_sFontNameCustom, g_nFontWidthAvg, g_nFontWidthMax );
- g_aFontConfig[ iFont ]._sFontName,
- g_aFontConfig[ iFont ]._nFontWidthAvg,
- g_aFontConfig[ iFont ]._nFontWidthMax );
- }
- return ConsoleUpdate();
- }
-
- return UPDATE_CONSOLE_DISPLAY;
-}
-
-
-
// Cursor _________________________________________________________________________________________
//===========================================================================
@@ -4002,7 +3678,6 @@ Update_t CmdConfigSetDebugDir (int nArgs)
if ( nArgs == 0 )
return CmdConfigGetDebugDir(0);
-#if _WIN32
// http://msdn.microsoft.com/en-us/library/aa365530(VS.85).aspx
// TODO: Support paths prefixed with "\\?\" (for long/unicode pathnames)
@@ -4034,9 +3709,6 @@ Update_t CmdConfigSetDebugDir (int nArgs)
if ( SetCurrentImageDir( sPath ) )
nArgs = 0; // intentional fall into
-#else
- #error "Need chdir() implemented"
-#endif
return CmdConfigGetDebugDir(0); // Show the new PWD
}
@@ -4117,7 +3789,7 @@ Update_t CmdMemoryLoad (int nArgs)
{
_tcscpy( g_sMemoryLoadSaveFileName, g_aArgs[ 1 ].sArg );
}
- _tcscat( sLoadSaveFilePath, g_sMemoryLoadSaveFileName );
+ strcat( sLoadSaveFilePath, g_sMemoryLoadSaveFileName );
FILE *hFile = fopen( sLoadSaveFilePath, "rb" );
if (hFile)
@@ -4496,7 +4168,7 @@ Update_t CmdMemorySave (int nArgs)
{
_tcscpy( g_sMemoryLoadSaveFileName, g_aArgs[ 1 ].sArg );
}
- _tcscat( sLoadSaveFilePath, g_sMemoryLoadSaveFileName );
+ strcat( sLoadSaveFilePath, g_sMemoryLoadSaveFileName );
// if (nArgs == 2)
{
@@ -4844,20 +4516,6 @@ size_t Util_GetTextScreen ( char* &pText_ )
return g_nTextScreen;
}
-void Util_CopyTextToClipboard ( const size_t nSize, const char *pText )
-{
- HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, nSize + 1 );
- memcpy( GlobalLock(hMem), pText, nSize + 1 );
- GlobalUnlock( hMem );
-
- OpenClipboard(0);
- EmptyClipboard();
- SetClipboardData( CF_TEXT, hMem );
- CloseClipboard();
-
- // GlobalFree() ??
-}
-
//===========================================================================
Update_t CmdNTSC (int nArgs)
{
@@ -6020,19 +5678,19 @@ Update_t CmdOutputCalc (int nArgs)
nAddress, nBit, nAddress, c );
if (bParen)
- _tcscat( sText, TEXT("(") );
+ strcat( sText, TEXT("(") );
if (bHi & bLo)
- _tcscat( sText, TEXT("High Ctrl") );
+ strcat( sText, TEXT("High Ctrl") );
else
if (bHi)
- _tcscat( sText, TEXT("High") );
+ strcat( sText, TEXT("High") );
else
if (bLo)
- _tcscat( sText, TEXT("Ctrl") );
+ strcat( sText, TEXT("Ctrl") );
if (bParen)
- _tcscat( sText, TEXT(")") );
+ strcat( sText, TEXT(")") );
ConsoleBufferPush( sText );
@@ -6322,7 +5980,7 @@ Update_t CmdOutputRun (int nArgs)
// if (g_aArgs[1].bType & TYPE_QUOTED_2)
sMiniFileName = pFileName.substr(0, MIN(pFileName.size(), CONSOLE_WIDTH));
-// _tcscat( sMiniFileName, ".aws" ); // HACK: MAGIC STRING
+// strcat( sMiniFileName, ".aws" ); // HACK: MAGIC STRING
if (pFileName[0] == '\\' || pFileName[1] == ':') // NB. Any prefix quote has already been stripped
{
@@ -8625,12 +8283,8 @@ void DebugStopStepping(void)
void DebugDestroy ()
{
DebugEnd();
+ FontsDestroy();
- for (int iFont = 0; iFont < NUM_FONTS; iFont++ )
- {
- DeleteObject( g_aFontConfig[ iFont ]._hFont );
- g_aFontConfig[ iFont ]._hFont = NULL;
- }
// DeleteObject(g_hFontDisasm );
// DeleteObject(g_hFontDebugger);
// DeleteObject(g_hFontWebDings);
@@ -8748,24 +8402,7 @@ void DebugInitialize ()
int nArgs = _Arg_1( g_sFontNameDefault );
#endif
- for (int iFont = 0; iFont < NUM_FONTS; iFont++ )
- {
- g_aFontConfig[ iFont ]._hFont = NULL;
-#if USE_APPLE_FONT
- g_aFontConfig[ iFont ]._nFontHeight = CONSOLE_FONT_HEIGHT;
- g_aFontConfig[ iFont ]._nFontWidthAvg = CONSOLE_FONT_WIDTH;
- g_aFontConfig[ iFont ]._nFontWidthMax = CONSOLE_FONT_WIDTH;
- g_aFontConfig[ iFont ]._nLineHeight = CONSOLE_FONT_HEIGHT;
-#endif
- }
-
-#if OLD_FONT
- _CmdConfigFont( FONT_INFO , g_sFontNameInfo , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET
- _CmdConfigFont( FONT_CONSOLE , g_sFontNameConsole, FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET
- _CmdConfigFont( FONT_DISASM_DEFAULT, g_sFontNameDisasm , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // OEM_CHARSET
- _CmdConfigFont( FONT_DISASM_BRANCH , g_sFontNameBranch , DEFAULT_PITCH | FF_DECORATIVE, g_nFontHeight+3); // DEFAULT_CHARSET
-#endif
- _UpdateWindowFontHeights( g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight );
+ FontsInitialize();
int iColor;
@@ -8920,65 +8557,7 @@ void DebuggerInputConsoleChar( TCHAR ch )
else
if (ch == 0x16) // HACK: Ctrl-V. WTF!?
{
- // Support Clipboard (paste)
- if (!IsClipboardFormatAvailable(CF_TEXT))
- return;
-
- if (!OpenClipboard(GetFrame().g_hFrameWindow ))
- return;
-
- HGLOBAL hClipboard;
- LPTSTR pData;
-
- hClipboard = GetClipboardData(CF_TEXT);
- if (hClipboard != NULL)
- {
- pData = (char*) GlobalLock(hClipboard);
- if (pData != NULL)
- {
- LPTSTR pSrc = pData;
- char c;
-
- while (true)
- {
- c = *pSrc++;
-
- if (! c)
- break;
-
- if (c == CHAR_CR)
- {
-#if WIN32
- // Eat char
-#endif
-#if MACOSX
- #pragma error( "TODO: Mac port - handle CR/LF")
-#endif
- }
- else
- if (c == CHAR_LF)
- {
-#if WIN32
- DebuggerProcessCommand( true );
-#endif
-#if MACOSX
- #pragma error( "TODO: Mac port - handle CR/LF")
-#endif
- }
- else
- {
- // If we didn't want verbatim, we could do:
- // DebuggerInputConsoleChar( c );
- if ((c >= CHAR_SPACE) && (c <= 126)) // HACK MAGIC # 32 -> ' ', # 126
- ConsoleInputChar( c );
- }
- }
- GlobalUnlock(hClipboard);
- }
- }
- CloseClipboard();
-
- UpdateDisplay( UPDATE_CONSOLE_DISPLAY );
+ ProcessClipboardCommands();
}
}
@@ -9504,136 +9083,6 @@ void DebuggerCursorNext()
//}
-//===========================================================================
-void DebuggerMouseClick( int x, int y )
-{
- if (g_nAppMode != MODE_DEBUG)
- return;
-
- KeybUpdateCtrlShiftStatus();
- int iAltCtrlShift = 0;
- iAltCtrlShift |= KeybGetAltStatus() ? 1<<0 : 0;
- iAltCtrlShift |= KeybGetCtrlStatus() ? 1<<1 : 0;
- iAltCtrlShift |= KeybGetShiftStatus() ? 1<<2 : 0;
-
- // GH#462 disasm click #
- if (iAltCtrlShift != g_bConfigDisasmClick)
- return;
-
- Win32Frame& win32Frame = Win32Frame::GetWin32Frame();
-
- int nFontWidth = g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontWidthAvg * win32Frame.GetViewportScale();
- int nFontHeight = g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight * win32Frame.GetViewportScale();
-
- // do picking
-
- const int nOffsetX = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetX() : win32Frame.Get3DBorderWidth();
- const int nOffsetY = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetY() : win32Frame.Get3DBorderHeight();
-
- const int nOffsetInScreenX = x - nOffsetX;
- const int nOffsetInScreenY = y - nOffsetY;
-
- if (nOffsetInScreenX < 0 || nOffsetInScreenY < 0)
- return;
-
- int cx = nOffsetInScreenX / nFontWidth;
- int cy = nOffsetInScreenY / nFontHeight;
-
-#if _DEBUG
- char sText[ CONSOLE_WIDTH ];
- sprintf( sText, "x:%d y:%d cx:%d cy:%d", x, y, cx, cy );
- ConsoleDisplayPush( sText );
- DebugDisplay();
-#endif
-
- if (g_iWindowThis == WINDOW_CODE)
- {
- // Display_AssemblyLine -- need Tabs
-
- if( g_bConfigDisasmAddressView )
- {
- // HACK: hard-coded from DrawDisassemblyLine::aTabs[] !!!
- if( cx < 4) // ####
- {
- g_bConfigDisasmAddressView ^= true;
- DebugDisplay();
- }
- else
- if (cx == 4) // :
- {
- g_bConfigDisasmAddressColon ^= true;
- DebugDisplay();
- }
- else // AD 00 00
- if ((cx > 4) && (cx <= 13))
- {
- g_bConfigDisasmOpcodesView ^= true;
- DebugDisplay();
- }
-
- } else
- {
- if( cx == 0 ) // :
- {
- // Three-way state
- // "addr:"
- // ":"
- // " "
- g_bConfigDisasmAddressColon ^= true;
- if( g_bConfigDisasmAddressColon )
- {
- g_bConfigDisasmAddressView ^= true;
- }
- DebugDisplay();
- }
- else
- if ((cx > 0) & (cx <= 13))
- {
- g_bConfigDisasmOpcodesView ^= true;
- DebugDisplay();
- }
- }
- // Click on PC inside reg window?
- if ((cx >= 51) && (cx <= 60))
- {
- if (cy == 3)
- {
- CmdCursorJumpPC( CURSOR_ALIGN_CENTER );
- DebugDisplay();
- }
- else
- if (cy == 4 || cy == 5)
- {
- int iFlag = -1;
- int nFlag = _6502_NUM_FLAGS;
-
- while( nFlag --> 0 )
- {
- // TODO: magic number instead of DrawFlags() DISPLAY_FLAG_COLUMN, rect.left += ((2 + _6502_NUM_FLAGS) * nSpacerWidth);
- // BP_SRC_FLAG_C is 6, cx 60 --> 0
- // ...
- // BP_SRC_FLAG_N is 13, cx 53 --> 7
- if (cx == (53 + nFlag))
- {
- iFlag = 7 - nFlag;
- break;
- }
- }
-
- if (iFlag >= 0)
- {
- regs.ps ^= (1 << iFlag);
- DebugDisplay();
- }
- }
- else // Click on stack
- if( cy > 3)
- {
- }
- }
- }
-}
-
//===========================================================================
bool IsDebugSteppingAtFullSpeed(void)
{
diff --git a/source/Debugger/Debug.h b/source/Debugger/Debug.h
index ef5a89c5..0558b90b 100644
--- a/source/Debugger/Debug.h
+++ b/source/Debugger/Debug.h
@@ -84,6 +84,8 @@
extern const int WINDOW_DATA_BYTES_PER_LINE;
+ extern int g_nDisasmDisplayLines;
+
// Config - Disassembly
extern bool g_bConfigDisasmAddressView ;
extern int g_bConfigDisasmClick ; // GH#462
@@ -135,6 +137,8 @@
// Prototypes _______________________________________________________________
+ void WindowUpdateSizes();
+
// Bookmarks
int Bookmark_Find( const WORD nAddress );
diff --git a/source/Debugger/Debugger_Color.cpp b/source/Debugger/Debugger_Color.cpp
index 4effa6a8..2ef90c11 100644
--- a/source/Debugger/Debugger_Color.cpp
+++ b/source/Debugger/Debugger_Color.cpp
@@ -202,13 +202,13 @@ static void _SetupColorRamp(const int iPrimary, int & iColor_)
g_aColorPalette[iColor_] = nColor;
#if DEBUG_COLOR_RAMP
wsprintf(sText, TEXT("RGB(%3d,%3d,%3d), "), nR, nG, nB);
- _tcscat(sRamp, sText);
+ strcat(sRamp, sText);
#endif
iColor_++;
}
#if DEBUG_COLOR_RAMP
wsprintf(sText, TEXT(" // %d%d%d\n"), bB, bG, bR);
- _tcscat(sRamp, sText);
+ strcat(sRamp, sText);
OutputDebugString(sRamp);
sRamp[0] = 0;
#endif
diff --git a/source/Debugger/Debugger_Display.h b/source/Debugger/Debugger_Display.h
index c728834e..f3f3c2f2 100644
--- a/source/Debugger/Debugger_Display.h
+++ b/source/Debugger/Debugger_Display.h
@@ -34,6 +34,9 @@
void FillBackground(long left, long top, long right, long bottom);
+ // Display ____________________________________________________________________
+ void UpdateDisplay(Update_t bUpdate);
+
int PrintText ( const char * pText, RECT & rRect );
int PrintTextCursorX( const char * pText, RECT & rRect );
int PrintTextCursorY( const char * pText, RECT & rRect );
diff --git a/source/Debugger/Debugger_Help.cpp b/source/Debugger/Debugger_Help.cpp
index 433fe931..953b9657 100644
--- a/source/Debugger/Debugger_Help.cpp
+++ b/source/Debugger/Debugger_Help.cpp
@@ -261,18 +261,18 @@ void Help_Operators()
ConsolePrintFormat( sText," Operators: (%sBreakpoint%s)" , CHC_USAGE, CHC_DEFAULT );
_tcscpy( sText, " " );
- _tcscat( sText, CHC_USAGE );
+ strcat( sText, CHC_USAGE );
int iBreakOp = 0;
for( iBreakOp = 0; iBreakOp < NUM_BREAKPOINT_OPERATORS; iBreakOp++ )
{
if ((iBreakOp >= PARAM_BP_LESS_EQUAL) &&
(iBreakOp <= PARAM_BP_GREATER_EQUAL))
{
- _tcscat( sText, g_aBreakpointSymbols[ iBreakOp ] );
- _tcscat( sText, " " );
+ strcat( sText, g_aBreakpointSymbols[ iBreakOp ] );
+ strcat( sText, " " );
}
}
- _tcscat( sText, CHC_DEFAULT );
+ strcat( sText, CHC_DEFAULT );
ConsolePrint( sText );
}
diff --git a/source/Debugger/Debugger_Win32.cpp b/source/Debugger/Debugger_Win32.cpp
new file mode 100644
index 00000000..ef0dc450
--- /dev/null
+++ b/source/Debugger/Debugger_Win32.cpp
@@ -0,0 +1,583 @@
+/*
+AppleWin : An Apple //e emulator for Windows
+
+Copyright (C) 1994-1996, Michael O'Brien
+Copyright (C) 1999-2001, Oliver Schmidt
+Copyright (C) 2002-2005, Tom Charlesworth
+Copyright (C) 2006-2014, Tom Charlesworth, Michael Pohoreski
+
+AppleWin is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+AppleWin 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with AppleWin; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+/* Description: Debugger
+ *
+ * Author: Copyright (C) 2006-2010 Michael Pohoreski
+ */
+
+ // disable warning C4786: symbol greater than 255 character:
+ //#pragma warning(disable: 4786)
+
+#include "StdAfx.h"
+
+#include "Debugger_Win32.h"
+#include "Debug.h"
+
+#include "../Windows/Win32Frame.h"
+#include "../Interface.h"
+#include "../Keyboard.h"
+#include "../Core.h"
+#include "../CPU.h"
+
+// Config - Font __________________________________________________________________________________
+// Font
+
+//===========================================================================
+static Update_t CmdConfigFontLoad(int nArgs)
+{
+ return UPDATE_CONSOLE_DISPLAY;
+}
+
+//===========================================================================
+static Update_t CmdConfigFontSave(int nArgs)
+{
+ return UPDATE_CONSOLE_DISPLAY;
+}
+
+// Only for FONT_DISASM_DEFAULT !
+static void _UpdateWindowFontHeights(int nFontHeight)
+{
+ if (nFontHeight)
+ {
+ int nConsoleTopY = GetConsoleTopPixels(g_nConsoleDisplayLines);
+
+ int nHeight = 0;
+
+ if (g_iFontSpacing == FONT_SPACING_CLASSIC)
+ {
+ nHeight = nFontHeight + 1;
+ g_nDisasmDisplayLines = nConsoleTopY / nHeight;
+ }
+ else
+ if (g_iFontSpacing == FONT_SPACING_CLEAN)
+ {
+ nHeight = nFontHeight;
+ g_nDisasmDisplayLines = nConsoleTopY / nHeight;
+ }
+ else
+ if (g_iFontSpacing == FONT_SPACING_COMPRESSED)
+ {
+ nHeight = nFontHeight - 1;
+ g_nDisasmDisplayLines = (nConsoleTopY + nHeight) / nHeight; // Ceil()
+ }
+
+ g_aFontConfig[FONT_DISASM_DEFAULT]._nLineHeight = nHeight;
+
+ // int nHeightOptimal = (nHeight0 + nHeight1) / 2;
+ // int nLinesOptimal = nConsoleTopY / nHeightOptimal;
+ // g_nDisasmDisplayLines = nLinesOptimal;
+
+ WindowUpdateSizes();
+ }
+}
+
+//===========================================================================
+static Update_t CmdConfigFontMode(int nArgs)
+{
+ if (nArgs != 2)
+ return Help_Arg_1(CMD_CONFIG_FONT);
+
+ int nMode = g_aArgs[2].nValue;
+
+ if ((nMode < 0) || (nMode >= NUM_FONT_SPACING))
+ return Help_Arg_1(CMD_CONFIG_FONT);
+
+ g_iFontSpacing = nMode;
+ _UpdateWindowFontHeights(g_aFontConfig[FONT_DISASM_DEFAULT]._nFontHeight);
+
+ return UPDATE_CONSOLE_DISPLAY | UPDATE_DISASM;
+}
+
+//===========================================================================
+bool _CmdConfigFont(int iFont, LPCSTR pFontName, int iPitchFamily, int nFontHeight)
+{
+ bool bStatus = false;
+ HFONT hFont = (HFONT)0;
+ FontConfig_t* pFont = NULL;
+
+ if (iFont < NUM_FONTS)
+ pFont = &g_aFontConfig[iFont];
+ else
+ return bStatus;
+
+ if (pFontName)
+ {
+ // int nFontHeight = g_nFontHeight - 1;
+
+ int bAntiAlias = (nFontHeight < 14) ? DEFAULT_QUALITY : ANTIALIASED_QUALITY;
+
+ // Try allow new font
+ hFont = CreateFont(
+ nFontHeight
+ , 0 // Width
+ , 0 // Escapement
+ , 0 // Orientatin
+ , FW_MEDIUM // Weight
+ , 0 // Italic
+ , 0 // Underline
+ , 0 // Strike Out
+ , DEFAULT_CHARSET // OEM_CHARSET
+ , OUT_DEFAULT_PRECIS
+ , CLIP_DEFAULT_PRECIS
+ , bAntiAlias // ANTIALIASED_QUALITY // DEFAULT_QUALITY
+ , iPitchFamily // HACK: MAGIC #: 4
+ , pFontName);
+
+ if (hFont)
+ {
+ if (iFont == FONT_DISASM_DEFAULT)
+ _UpdateWindowFontHeights(nFontHeight);
+
+ _tcsncpy(pFont->_sFontName, pFontName, MAX_FONT_NAME - 1);
+ pFont->_sFontName[MAX_FONT_NAME - 1] = 0;
+
+ Win32Frame& win32Frame = Win32Frame::GetWin32Frame();
+
+ HDC hDC = win32Frame.FrameGetDC();
+
+ TEXTMETRIC tm;
+ GetTextMetrics(hDC, &tm);
+
+ SIZE size;
+ TCHAR sText[] = "W";
+ int nLen = 1;
+
+ int nFontWidthAvg;
+ int nFontWidthMax;
+
+ // if (! (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)) // Windows has this bitflag reversed!
+ // { // Proportional font?
+ // bool bStop = true;
+ // }
+
+ // GetCharWidth32() doesn't work with TrueType Fonts
+ if (GetTextExtentPoint32(hDC, sText, nLen, &size))
+ {
+ nFontWidthAvg = tm.tmAveCharWidth;
+ nFontWidthMax = size.cx;
+ }
+ else
+ {
+ // Font Name Avg Max "W"
+ // Arial 7 8 11
+ // Courier 5 32 11
+ // Courier New 7 14
+ nFontWidthAvg = tm.tmAveCharWidth;
+ nFontWidthMax = tm.tmMaxCharWidth;
+ }
+
+ if (!nFontWidthAvg)
+ {
+ nFontWidthAvg = 7;
+ nFontWidthMax = 7;
+ }
+
+ win32Frame.FrameReleaseDC();
+
+ // DeleteObject( g_hFontDisasm );
+ // g_hFontDisasm = hFont;
+ pFont->_hFont = hFont;
+
+ pFont->_nFontWidthAvg = nFontWidthAvg;
+ pFont->_nFontWidthMax = nFontWidthMax;
+ pFont->_nFontHeight = nFontHeight;
+
+ bStatus = true;
+ }
+ }
+ return bStatus;
+}
+
+void FontsInitialize()
+{
+ for (int iFont = 0; iFont < NUM_FONTS; iFont++ )
+ {
+ g_aFontConfig[ iFont ]._hFont = NULL;
+#if USE_APPLE_FONT
+ g_aFontConfig[ iFont ]._nFontHeight = CONSOLE_FONT_HEIGHT;
+ g_aFontConfig[ iFont ]._nFontWidthAvg = CONSOLE_FONT_WIDTH;
+ g_aFontConfig[ iFont ]._nFontWidthMax = CONSOLE_FONT_WIDTH;
+ g_aFontConfig[ iFont ]._nLineHeight = CONSOLE_FONT_HEIGHT;
+#endif
+ }
+
+#if OLD_FONT
+ _CmdConfigFont( FONT_INFO , g_sFontNameInfo , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET
+ _CmdConfigFont( FONT_CONSOLE , g_sFontNameConsole, FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET
+ _CmdConfigFont( FONT_DISASM_DEFAULT, g_sFontNameDisasm , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // OEM_CHARSET
+ _CmdConfigFont( FONT_DISASM_BRANCH , g_sFontNameBranch , DEFAULT_PITCH | FF_DECORATIVE, g_nFontHeight+3); // DEFAULT_CHARSET
+#endif
+ _UpdateWindowFontHeights( g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight );
+}
+
+void FontsDestroy()
+{
+ for (int iFont = 0; iFont < NUM_FONTS; iFont++)
+ {
+ DeleteObject(g_aFontConfig[iFont]._hFont);
+ g_aFontConfig[iFont]._hFont = NULL;
+ }
+}
+
+//===========================================================================
+Update_t CmdConfigGetFont(int nArgs)
+{
+ if (!nArgs)
+ {
+ for (int iFont = 0; iFont < NUM_FONTS; iFont++)
+ {
+ TCHAR sText[CONSOLE_WIDTH] = TEXT("");
+ ConsoleBufferPushFormat(sText, " Font: %-20s A:%2d M:%2d",
+ // g_sFontNameCustom, g_nFontWidthAvg, g_nFontWidthMax );
+ g_aFontConfig[iFont]._sFontName,
+ g_aFontConfig[iFont]._nFontWidthAvg,
+ g_aFontConfig[iFont]._nFontWidthMax);
+ }
+ return ConsoleUpdate();
+ }
+
+ return UPDATE_CONSOLE_DISPLAY;
+}
+
+//===========================================================================
+Update_t CmdConfigFont(int nArgs)
+{
+ int iArg;
+
+ if (!nArgs)
+ return CmdConfigGetFont(nArgs);
+ else
+ if (nArgs <= 2) // nArgs
+ {
+ iArg = 1;
+
+ // FONT * is undocumented, like VERSION *
+ if ((!_tcscmp(g_aArgs[iArg].sArg, g_aParameters[PARAM_WILDSTAR].m_sName)) ||
+ (!_tcscmp(g_aArgs[iArg].sArg, g_aParameters[PARAM_MEM_SEARCH_WILD].m_sName)))
+ {
+ TCHAR sText[CONSOLE_WIDTH];
+ ConsoleBufferPushFormat(sText, "Lines: %d Font Px: %d Line Px: %d"
+ , g_nDisasmDisplayLines
+ , g_aFontConfig[FONT_DISASM_DEFAULT]._nFontHeight
+ , g_aFontConfig[FONT_DISASM_DEFAULT]._nLineHeight);
+ ConsoleBufferToDisplay();
+ return UPDATE_CONSOLE_DISPLAY;
+ }
+
+ int iFound;
+ int nFound;
+
+ nFound = FindParam(g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_GENERAL_BEGIN, _PARAM_GENERAL_END);
+ if (nFound)
+ {
+ switch (iFound)
+ {
+ case PARAM_LOAD:
+ return CmdConfigFontLoad(nArgs);
+ break;
+ case PARAM_SAVE:
+ return CmdConfigFontSave(nArgs);
+ break;
+ // TODO: FONT SIZE #
+ // TODO: AA {ON|OFF}
+ default:
+ break;
+ }
+ }
+
+ nFound = FindParam(g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_FONT_BEGIN, _PARAM_FONT_END);
+ if (nFound)
+ {
+ if (iFound == PARAM_FONT_MODE)
+ return CmdConfigFontMode(nArgs);
+ }
+
+ return CmdConfigSetFont(nArgs);
+ }
+
+ return Help_Arg_1(CMD_CONFIG_FONT);
+}
+
+//===========================================================================
+void DebuggerMouseClick(int x, int y)
+{
+ if (g_nAppMode != MODE_DEBUG)
+ return;
+
+ KeybUpdateCtrlShiftStatus();
+ int iAltCtrlShift = 0;
+ iAltCtrlShift |= KeybGetAltStatus() ? 1 << 0 : 0;
+ iAltCtrlShift |= KeybGetCtrlStatus() ? 1 << 1 : 0;
+ iAltCtrlShift |= KeybGetShiftStatus() ? 1 << 2 : 0;
+
+ // GH#462 disasm click #
+ if (iAltCtrlShift != g_bConfigDisasmClick)
+ return;
+
+ Win32Frame& win32Frame = Win32Frame::GetWin32Frame();
+
+ int nFontWidth = g_aFontConfig[FONT_DISASM_DEFAULT]._nFontWidthAvg * win32Frame.GetViewportScale();
+ int nFontHeight = g_aFontConfig[FONT_DISASM_DEFAULT]._nLineHeight * win32Frame.GetViewportScale();
+
+ // do picking
+
+ const int nOffsetX = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetX() : win32Frame.Get3DBorderWidth();
+ const int nOffsetY = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetY() : win32Frame.Get3DBorderHeight();
+
+ const int nOffsetInScreenX = x - nOffsetX;
+ const int nOffsetInScreenY = y - nOffsetY;
+
+ if (nOffsetInScreenX < 0 || nOffsetInScreenY < 0)
+ return;
+
+ int cx = nOffsetInScreenX / nFontWidth;
+ int cy = nOffsetInScreenY / nFontHeight;
+
+#if _DEBUG
+ char sText[CONSOLE_WIDTH];
+ sprintf(sText, "x:%d y:%d cx:%d cy:%d", x, y, cx, cy);
+ ConsoleDisplayPush(sText);
+ DebugDisplay();
+#endif
+
+ if (g_iWindowThis == WINDOW_CODE)
+ {
+ // Display_AssemblyLine -- need Tabs
+
+ if (g_bConfigDisasmAddressView)
+ {
+ // HACK: hard-coded from DrawDisassemblyLine::aTabs[] !!!
+ if (cx < 4) // ####
+ {
+ g_bConfigDisasmAddressView ^= true;
+ DebugDisplay();
+ }
+ else
+ if (cx == 4) // :
+ {
+ g_bConfigDisasmAddressColon ^= true;
+ DebugDisplay();
+ }
+ else // AD 00 00
+ if ((cx > 4) && (cx <= 13))
+ {
+ g_bConfigDisasmOpcodesView ^= true;
+ DebugDisplay();
+ }
+
+ }
+ else
+ {
+ if (cx == 0) // :
+ {
+ // Three-way state
+ // "addr:"
+ // ":"
+ // " "
+ g_bConfigDisasmAddressColon ^= true;
+ if (g_bConfigDisasmAddressColon)
+ {
+ g_bConfigDisasmAddressView ^= true;
+ }
+ DebugDisplay();
+ }
+ else
+ if ((cx > 0) & (cx <= 13))
+ {
+ g_bConfigDisasmOpcodesView ^= true;
+ DebugDisplay();
+ }
+ }
+ // Click on PC inside reg window?
+ if ((cx >= 51) && (cx <= 60))
+ {
+ if (cy == 3)
+ {
+ CmdCursorJumpPC(CURSOR_ALIGN_CENTER);
+ DebugDisplay();
+ }
+ else
+ if (cy == 4 || cy == 5)
+ {
+ int iFlag = -1;
+ int nFlag = _6502_NUM_FLAGS;
+
+ while (nFlag-- > 0)
+ {
+ // TODO: magic number instead of DrawFlags() DISPLAY_FLAG_COLUMN, rect.left += ((2 + _6502_NUM_FLAGS) * nSpacerWidth);
+ // BP_SRC_FLAG_C is 6, cx 60 --> 0
+ // ...
+ // BP_SRC_FLAG_N is 13, cx 53 --> 7
+ if (cx == (53 + nFlag))
+ {
+ iFlag = 7 - nFlag;
+ break;
+ }
+ }
+
+ if (iFlag >= 0)
+ {
+ regs.ps ^= (1 << iFlag);
+ DebugDisplay();
+ }
+ }
+ else // Click on stack
+ if (cy > 3)
+ {
+ }
+ }
+ }
+}
+
+//===========================================================================
+Update_t CmdConfigSetFont(int nArgs)
+{
+#if OLD_FONT
+ HFONT hFont = (HFONT)0;
+ TCHAR* pFontName = NULL;
+ int nHeight = g_nFontHeight;
+ int iFontTarget = FONT_DISASM_DEFAULT;
+ int iFontPitch = FIXED_PITCH | FF_MODERN;
+ // int iFontMode =
+ bool bHaveTarget = false;
+ bool bHaveFont = false;
+
+ if (!nArgs)
+ { // reset to defaut font
+ pFontName = g_sFontNameDefault;
+ }
+ else
+ if (nArgs <= 3)
+ {
+ int iArg = 1;
+ pFontName = g_aArgs[1].sArg;
+
+ // [DISASM|INFO|CONSOLE] "FontName" [#]
+ // "FontName" can be either arg 1 or 2
+
+ int iFound;
+ int nFound = FindParam(g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_WINDOW_BEGIN, _PARAM_WINDOW_END);
+ if (nFound)
+ {
+ switch (iFound)
+ {
+ case PARAM_DISASM: iFontTarget = FONT_DISASM_DEFAULT; iFontPitch = FIXED_PITCH | FF_MODERN; bHaveTarget = true; break;
+ case PARAM_INFO: iFontTarget = FONT_INFO; iFontPitch = FIXED_PITCH | FF_MODERN; bHaveTarget = true; break;
+ case PARAM_CONSOLE: iFontTarget = FONT_CONSOLE; iFontPitch = DEFAULT_PITCH | FF_DECORATIVE; bHaveTarget = true; break;
+ default:
+ if (g_aArgs[2].bType != TOKEN_QUOTE_DOUBLE)
+ return Help_Arg_1(CMD_CONFIG_FONT);
+ break;
+ }
+ if (bHaveTarget)
+ {
+ pFontName = g_aArgs[2].sArg;
+ }
+ }
+ else
+ if (nArgs == 2)
+ {
+ nHeight = atoi(g_aArgs[2].sArg);
+ if ((nHeight < 6) || (nHeight > 36))
+ nHeight = g_nFontHeight;
+ }
+ }
+ else
+ {
+ return Help_Arg_1(CMD_CONFIG_FONT);
+ }
+
+ if (!_CmdConfigFont(iFontTarget, pFontName, iFontPitch, nHeight))
+ {
+ }
+#endif
+ return UPDATE_ALL;
+}
+
+void Util_CopyTextToClipboard(const size_t nSize, const char* pText)
+{
+ HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, nSize + 1);
+ memcpy(GlobalLock(hMem), pText, nSize + 1);
+ GlobalUnlock(hMem);
+
+ OpenClipboard(0);
+ EmptyClipboard();
+ SetClipboardData(CF_TEXT, hMem);
+ CloseClipboard();
+
+ // GlobalFree() ??
+}
+
+void ProcessClipboardCommands()
+{
+ // Support Clipboard (paste)
+ if (!IsClipboardFormatAvailable(CF_TEXT))
+ return;
+
+ if (!OpenClipboard(GetFrame().g_hFrameWindow))
+ return;
+
+ HGLOBAL hClipboard;
+ LPTSTR pData;
+
+ hClipboard = GetClipboardData(CF_TEXT);
+ if (hClipboard != NULL)
+ {
+ pData = (char*)GlobalLock(hClipboard);
+ if (pData != NULL)
+ {
+ LPTSTR pSrc = pData;
+ char c;
+
+ while (true)
+ {
+ c = *pSrc++;
+
+ if (!c)
+ break;
+
+ if (c == CHAR_CR)
+ {
+ // Eat char
+ }
+ else
+ if (c == CHAR_LF)
+ {
+ DebuggerProcessCommand(true);
+ }
+ else
+ {
+ // If we didn't want verbatim, we could do:
+ // DebuggerInputConsoleChar( c );
+ if ((c >= CHAR_SPACE) && (c <= 126)) // HACK MAGIC # 32 -> ' ', # 126
+ ConsoleInputChar(c);
+ }
+ }
+ GlobalUnlock(hClipboard);
+ }
+ }
+ CloseClipboard();
+
+ UpdateDisplay(UPDATE_CONSOLE_DISPLAY);
+}
diff --git a/source/Debugger/Debugger_Win32.h b/source/Debugger/Debugger_Win32.h
new file mode 100644
index 00000000..a942567d
--- /dev/null
+++ b/source/Debugger/Debugger_Win32.h
@@ -0,0 +1,33 @@
+/*
+AppleWin : An Apple //e emulator for Windows
+
+Copyright (C) 1994-1996, Michael O'Brien
+Copyright (C) 1999-2001, Oliver Schmidt
+Copyright (C) 2002-2005, Tom Charlesworth
+Copyright (C) 2006-2014, Tom Charlesworth, Michael Pohoreski
+
+AppleWin is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+AppleWin 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with AppleWin; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+/* Description: Debugger
+ *
+ * Author: Copyright (C) 2006-2010 Michael Pohoreski
+ */
+
+#pragma once
+
+void FontsDestroy();
+void FontsInitialize();
+void ProcessClipboardCommands();
diff --git a/source/Windows/AppleWin.cpp b/source/Windows/AppleWin.cpp
index 13bbc3ba..e297b256 100644
--- a/source/Windows/AppleWin.cpp
+++ b/source/Windows/AppleWin.cpp
@@ -361,8 +361,8 @@ void RegisterExtensions(void)
TCHAR icon[MAX_PATH];
wsprintf(icon,TEXT("%s,1"),(LPCTSTR)command);
- _tcscat(command,TEXT(" \"%1\"")); // Append "%1"
-// _tcscat(command,TEXT("-d1 %1\"")); // Append "%1"
+ strcat(command,TEXT(" \"%1\"")); // Append "%1"
+// strcat(command,TEXT("-d1 %1\"")); // Append "%1"
// sprintf(command, "\"%s\" \"-d1 %%1\"", szCommandTmp); // Wrap path & filename in quotes & null terminate
// NB. Registry access to HKLM typically results in ErrorCode 5(ACCESS DENIED), as UAC requires elevated permissions (Run as administrator).