From 8955b88865675f12f207b018fcd0d02f7c0eb45e Mon Sep 17 00:00:00 2001 From: tomch Date: Sun, 17 Jan 2010 18:43:06 +0000 Subject: [PATCH] Merge from Tom: 674-676 Fix cmd-line -d1/d2 switches with relative path (Bug #16632) Fix speaker volume when booting with -d1 switch Fix debugger bugs: - Crash when doing: help * - Crash when doing: run script.txt (Bug #16651) Fix "Harddisk images aren't persisted when in different folders" (Bug #16652) --- AppleWin/source/Applewin.cpp | 40 ++++++++---- AppleWin/source/Common.h | 11 +++- AppleWin/source/Debugger_Help.cpp | 2 +- AppleWin/source/Disk.cpp | 26 ++++---- AppleWin/source/Frame.cpp | 84 ++++++++++++++++++------- AppleWin/source/Harddisk.cpp | 39 +++++------- AppleWin/source/Harddisk.h | 2 +- AppleWin/source/PropertySheetPage.cpp | 7 ++- AppleWin/source/Util_MemoryTextFile.cpp | 9 +-- 9 files changed, 136 insertions(+), 84 deletions(-) diff --git a/AppleWin/source/Applewin.cpp b/AppleWin/source/Applewin.cpp index 5d96cc36..bb433ba2 100644 --- a/AppleWin/source/Applewin.cpp +++ b/AppleWin/source/Applewin.cpp @@ -478,7 +478,7 @@ void LoadConfiguration () } REGLOAD(TEXT("Emulation Speed") ,&g_dwSpeed); - REGLOAD(TEXT("Enhance Disk Speed"),(DWORD *)&enhancedisk); + REGLOAD(TEXT(REGVALUE_ENHANCE_DISK_SPEED),(DWORD *)&enhancedisk); Config_Load_Video(); @@ -522,11 +522,11 @@ void LoadConfiguration () if(REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) HD_SetEnabled(dwTmp ? true : false); - char szHDFilename[MAX_PATH] = {0}; - if(RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_HDD_IMAGE1), 1, szHDFilename, sizeof(szHDFilename))) - HD_InsertDisk2(0, szHDFilename); - if(RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_HDD_IMAGE2), 1, szHDFilename, sizeof(szHDFilename))) - HD_InsertDisk2(1, szHDFilename); + char szHDVPathname[MAX_PATH] = {0}; + if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_1), 1, szHDVPathname, sizeof(szHDVPathname))) + HD_InsertDisk(HARDDISK_1, szHDVPathname); + if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_2), 1, szHDVPathname, sizeof(szHDVPathname))) + HD_InsertDisk(HARDDISK_2, szHDVPathname); if(REGLOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp)) JoySetTrim((short)dwTmp, true); @@ -742,10 +742,29 @@ LPSTR GetNextArg(LPSTR lpCmdLine) //--------------------------------------------------------------------------- -static int DoDiskInsert(int nDrive, LPSTR szFileName) +static int DoDiskInsert(const int nDrive, LPCSTR szFileName) { - ImageError_e Error = DiskInsert(nDrive, szFileName, IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE); - return (Error == eIMAGE_ERROR_NONE) ? 0 : 1; + string strPathName; + + if (szFileName[0] == '\\' || szFileName[1] == ':') + { + // Abs pathname + strPathName = szFileName; + } + else + { + // Rel pathname + char szCWD[_MAX_PATH] = {0}; + if (!GetCurrentDirectory(sizeof(szCWD), szCWD)) + return false; + + strPathName = szCWD; + strPathName.append("\\"); + strPathName.append(szFileName); + } + + ImageError_e Error = DiskInsert(nDrive, strPathName.c_str(), IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE); + return Error == eIMAGE_ERROR_NONE; } //--------------------------------------------------------------------------- @@ -977,8 +996,7 @@ int APIENTRY WinMain (HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int) if(bBoot) { - PostMessage(g_hFrameWindow, WM_KEYDOWN, VK_F1+BTN_RUN, 0); - PostMessage(g_hFrameWindow, WM_KEYUP, VK_F1+BTN_RUN, 0); + PostMessage(g_hFrameWindow, WM_USER_BOOT, 0, 0); bBoot = false; } diff --git a/AppleWin/source/Common.h b/AppleWin/source/Common.h index 6d2f5800..ce04932c 100644 --- a/AppleWin/source/Common.h +++ b/AppleWin/source/Common.h @@ -78,8 +78,6 @@ enum AppMode_e #define REGVALUE_SAVESTATE_FILENAME "Save State Filename" #define REGVALUE_SAVE_STATE_ON_EXIT "Save State On Exit" #define REGVALUE_HDD_ENABLED "Harddisk Enable" -#define REGVALUE_HDD_IMAGE1 "Harddisk Image 1" -#define REGVALUE_HDD_IMAGE2 "Harddisk Image 2" #define REGVALUE_PDL_XTRIM "PDL X-Trim" #define REGVALUE_PDL_YTRIM "PDL Y-Trim" #define REGVALUE_SCROLLLOCK_TOGGLE "ScrollLock Toggle" @@ -100,12 +98,18 @@ enum AppMode_e #define REGVALUE_VIDEO_HALF_SCAN_LINES "Half Scan Lines" #define REGVALUE_VIDEO_MONO_COLOR "Monochrome Color" #define REGVALUE_SERIAL_PORT_NAME "Serial Port Name" +#define REGVALUE_ENHANCE_DISK_SPEED "Enhance Disk Speed" // Preferences -#define REG_PREFS "Preferences" +#define REG_PREFS "Preferences" #define REGVALUE_PREF_START_DIR "Starting Directory" #define REGVALUE_PREF_LAST_DISK_1 "Last Disk Image 1" #define REGVALUE_PREF_LAST_DISK_2 "Last Disk Image 2" +#define REGVALUE_PREF_WINDOW_X_POS "Window X-Position" +#define REGVALUE_PREF_WINDOW_Y_POS "Window Y-Position" +#define REGVALUE_PREF_HDV_START_DIR "HDV Starting Directory" +#define REGVALUE_PREF_LAST_HARDDISK_1 "Last Harddisk Image 1" +#define REGVALUE_PREF_LAST_HARDDISK_2 "Last Harddisk Image 2" #define WM_USER_BENCHMARK WM_USER+1 #define WM_USER_RESTART WM_USER+2 @@ -114,6 +118,7 @@ enum AppMode_e #define VK_SNAPSHOT_560 WM_USER+5 #define VK_SNAPSHOT_280 WM_USER+6 #define WM_USER_TCP_SERIAL WM_USER+7 +#define WM_USER_BOOT WM_USER+8 enum eSOUNDCARDTYPE {SC_UNINIT=0, SC_NONE, SC_MOCKINGBOARD, SC_PHASOR}; // Apple soundcard type diff --git a/AppleWin/source/Debugger_Help.cpp b/AppleWin/source/Debugger_Help.cpp index a86e49f6..148de662 100644 --- a/AppleWin/source/Debugger_Help.cpp +++ b/AppleWin/source/Debugger_Help.cpp @@ -1314,7 +1314,7 @@ Update_t CmdHelpSpecific (int nArgs) sprintf( sText, "%s%-5s%s: Loads symbols from last/default \"filename\"", CHC_STRING, g_aParameters[ PARAM_SAVE ].m_sName, CHC_DEFAULT ); ConsolePrint( sText ); sprintf( sText, "%s%-5s%s: Saves symbol table to \"filename\"" , CHC_STRING, g_aParameters[ PARAM_LOAD ].m_sName, CHC_DEFAULT ); ConsolePrint( sText ); sprintf( sText, "%s%-5s%s: Clears the symbol table" , CHC_STRING, g_aParameters[ PARAM_CLEAR ].m_sName, CHC_DEFAULT ); ConsolePrint( sText ); - sprintf( sText, "%s%-5s%s: Remove symbol" , CHC_STRING, g_aTokens[ TOKEN_EXCLAMATION ] , CHC_DEFAULT ); ConsolePrint( sText ); + sprintf( sText, "%s%-5s%s: Remove symbol" , CHC_STRING, g_aTokens[ TOKEN_EXCLAMATION ].sToken, CHC_DEFAULT ); ConsolePrint( sText ); break; case CMD_SYMBOLS_LIST : Colorize( sText, " Usage: symbol" ); diff --git a/AppleWin/source/Disk.cpp b/AppleWin/source/Disk.cpp index febe15c9..8fa740b1 100644 --- a/AppleWin/source/Disk.cpp +++ b/AppleWin/source/Disk.cpp @@ -99,11 +99,11 @@ void Disk_LoadLastDiskImage(const int iDrive) char sFilePath[ MAX_PATH + 1]; sFilePath[0] = 0; - char *pRegKey = (!iDrive) + char *pRegKey = (iDrive == DRIVE_1) ? REGVALUE_PREF_LAST_DISK_1 : REGVALUE_PREF_LAST_DISK_2; - if( RegLoadString(TEXT(REG_PREFS),pRegKey,1,sFilePath,MAX_PATH) ) + if (RegLoadString(TEXT(REG_PREFS),pRegKey,1,sFilePath,MAX_PATH)) { sFilePath[ MAX_PATH ] = 0; DiskPathFilename[ iDrive ] = sFilePath; @@ -127,12 +127,12 @@ void Disk_SaveLastDiskImage(const int iDrive) { const char *pFileName = DiskPathFilename[iDrive].c_str(); - if(g_bSaveDiskImage) + if (g_bSaveDiskImage) { - if( iDrive == DRIVE_1 ) - RegSaveString(TEXT(REG_PREFS),REGVALUE_PREF_LAST_DISK_1,1,pFileName ); + if (iDrive == DRIVE_1) + RegSaveString(TEXT(REG_PREFS),REGVALUE_PREF_LAST_DISK_1,1,pFileName); else - RegSaveString(TEXT(REG_PREFS),REGVALUE_PREF_LAST_DISK_2,1,pFileName ); + RegSaveString(TEXT(REG_PREFS),REGVALUE_PREF_LAST_DISK_2,1,pFileName); } } @@ -732,12 +732,12 @@ void DiskReset(void) void DiskSelectImage(const int iDrive, LPSTR pszFilename) { TCHAR directory[MAX_PATH] = TEXT(""); - TCHAR filename[MAX_PATH]; + TCHAR filename[MAX_PATH] = TEXT(""); TCHAR title[40]; strcpy(filename, pszFilename); - RegLoadString(TEXT("Preferences"), REGVALUE_PREF_START_DIR, 1, directory, MAX_PATH); + RegLoadString(TEXT(REG_PREFS), REGVALUE_PREF_START_DIR, 1, directory, MAX_PATH); _tcscpy(title, TEXT("Select Disk Image For Drive ")); _tcscat(title, iDrive ? TEXT("2") : TEXT("1")); @@ -746,9 +746,9 @@ void DiskSelectImage(const int iDrive, LPSTR pszFilename) ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = g_hFrameWindow; ofn.hInstance = g_hInstance; - ofn.lpstrFilter = TEXT("All Images\0*.bin;*.do;*.dsk;*.nib;*.po;*.gz;*.zip;*.2mg;*.2img;*.iie;*.apl\0") - TEXT("Disk Images (*.bin,*.do,*.dsk,*.nib,*.po,*.gz,*.zip,*.2mg,*.2img,*.iie)\0*.bin;*.do;*.dsk;*.nib;*.po;*.gz;*.zip;*.2mg;*.2img;*.iie\0") - TEXT("All Files\0*.*\0"); + ofn.lpstrFilter = TEXT("All Images\0*.bin;*.do;*.dsk;*.nib;*.po;*.gz;*.zip;*.2mg;*.2img;*.iie;*.apl\0") + TEXT("Disk Images (*.bin,*.do,*.dsk,*.nib,*.po,*.gz,*.zip,*.2mg,*.2img,*.iie)\0*.bin;*.do;*.dsk;*.nib;*.po;*.gz;*.zip;*.2mg;*.2img;*.iie\0") + TEXT("All Files\0*.*\0"); ofn.lpstrFile = filename; ofn.nMaxFile = MAX_PATH; ofn.lpstrInitialDir = directory; @@ -758,7 +758,7 @@ void DiskSelectImage(const int iDrive, LPSTR pszFilename) if (GetOpenFileName(&ofn)) { if ((!ofn.nFileExtension) || !filename[ofn.nFileExtension]) - _tcscat(filename,TEXT(".DSK")); + _tcscat(filename,TEXT(".dsk")); ImageError_e Error = DiskInsert(iDrive, filename, ofn.Flags & OFN_READONLY, IMAGE_CREATE); if (Error == eIMAGE_ERROR_NONE) @@ -766,9 +766,7 @@ void DiskSelectImage(const int iDrive, LPSTR pszFilename) DiskPathFilename[iDrive] = filename; filename[ofn.nFileOffset] = 0; if (_tcsicmp(directory, filename)) - { RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_START_DIR), 1, filename); - } } else { diff --git a/AppleWin/source/Frame.cpp b/AppleWin/source/Frame.cpp index b8a2c4a3..7cfd83ef 100644 --- a/AppleWin/source/Frame.cpp +++ b/AppleWin/source/Frame.cpp @@ -658,8 +658,8 @@ LRESULT CALLBACK FrameWndProc ( SetNormalMode(); if (!IsIconic(window)) GetWindowRect(window,&framerect); - RegSaveValue(TEXT("Preferences"),TEXT("Window X-Position"),1,framerect.left); - RegSaveValue(TEXT("Preferences"),TEXT("Window Y-Position"),1,framerect.top); + RegSaveValue(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_WINDOW_X_POS), 1, framerect.left); + RegSaveValue(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_WINDOW_Y_POS), 1, framerect.top); FrameReleaseDC(); SetUsingCursor(0); if (helpquit) { @@ -714,10 +714,8 @@ LRESULT CALLBACK FrameWndProc ( { if (!g_bIsFullScreen) DrawButton((HDC)0,BTN_DRIVE1); - SetForegroundWindow(window); - Sleep(500); // Wait for SetForegroundWindow() to take affect (400ms seems OK, so use 500ms to be sure) - SoundCore_TweakVolumes(); - ProcessButtonClick(BTN_RUN); + + PostMessage(window, WM_USER_BOOT, 0, 0); } else { @@ -1333,6 +1331,7 @@ LRESULT CALLBACK FrameWndProc ( break; case WM_USER_TCP_SERIAL: // TCP serial events + { WORD error = WSAGETSELECTERROR(lparam); if (error != 0) { @@ -1374,7 +1373,20 @@ LRESULT CALLBACK FrameWndProc ( } } break; - } + } + + // Message posted by: WM_DDE_EXECUTE & Cmd-line boot + case WM_USER_BOOT: + { + SetForegroundWindow(window); + Sleep(500); // Wait for SetForegroundWindow() to take affect (400ms seems OK, so use 500ms to be sure) + SoundCore_TweakVolumes(); + ProcessButtonClick(BTN_RUN); + break; + } + + } // switch(message) + return DefWindowProc(window,message,wparam,lparam); } @@ -1779,22 +1791,48 @@ void SetUsingCursor (BOOL bNewValue) //=========================================================================== void FrameCreateWindow () { - int width = VIEWPORTCX + VIEWPORTX*2 - + BUTTONCX - + GetSystemMetrics(SM_CXBORDER)*2 - + MAGICX; - int height = VIEWPORTCY + VIEWPORTY*2 - + GetSystemMetrics(SM_CYBORDER) - + GetSystemMetrics(SM_CYCAPTION) - + MAGICY; - int xpos; + const int nWidth = VIEWPORTCX + VIEWPORTX*2 + + BUTTONCX + + GetSystemMetrics(SM_CXBORDER)*2 + + MAGICX; + const int nHeight = VIEWPORTCY + VIEWPORTY*2 + + GetSystemMetrics(SM_CYBORDER) + + GetSystemMetrics(SM_CYCAPTION) + + MAGICY; - if (!RegLoadValue(TEXT("Preferences"),TEXT("Window X-Position"),1,(DWORD *)&xpos)) - xpos = (GetSystemMetrics(SM_CXSCREEN)-width) >> 1; + // - int ypos; - if (!RegLoadValue(TEXT("Preferences"),TEXT("Window Y-Position"),1,(DWORD *)&ypos)) - ypos = (GetSystemMetrics(SM_CYSCREEN)-height) >> 1; + int nXPos = -1; + { + int nXScreen = GetSystemMetrics(SM_CXSCREEN) - nWidth; + + if (RegLoadValue(TEXT("Preferences"), TEXT("Window X-Position"), 1, (DWORD*)&nXPos)) + { + if (nXPos > nXScreen) + nXPos = -1; // Not fully visible, so default to centre position + } + + if (nXPos == -1) + nXPos = nXScreen / 2; + } + + // + + int nYPos = -1; + { + int nYScreen = GetSystemMetrics(SM_CYSCREEN) - nHeight; + + if (RegLoadValue(TEXT("Preferences"), TEXT("Window Y-Position"), 1, (DWORD*)&nYPos)) + { + if (nYPos > nYScreen) + nYPos = -1; // Not fully visible, so default to centre position + } + + if (nYPos == -1) + nYPos = nYScreen / 2; + } + + // switch (g_Apple2Type) { @@ -1813,10 +1851,10 @@ void FrameCreateWindow () g_pAppTitle, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, - xpos,ypos,width,height, + nXPos, nYPos, nWidth, nHeight, HWND_DESKTOP, (HMENU)0, - g_hInstance,NULL ); + g_hInstance, NULL ); InitCommonControls(); diff --git a/AppleWin/source/Harddisk.cpp b/AppleWin/source/Harddisk.cpp index 61d4d6fc..54728470 100644 --- a/AppleWin/source/Harddisk.cpp +++ b/AppleWin/source/Harddisk.cpp @@ -278,6 +278,11 @@ LPCTSTR HD_GetFullName(const int iDrive) return g_HardDisk[iDrive].fullname; } +LPCTSTR HD_GetFullPathName(const int iDrive) +{ + return g_HardDisk[iDrive].Info.szFilename; +} + static LPCTSTR HD_DiskGetBaseName (const int iDrive) // Not used { return g_HardDisk[iDrive].imagename; @@ -319,21 +324,7 @@ VOID HD_Cleanup(void) } } -// pszFilename is not qualified with path -BOOL HD_InsertDisk2(const int iDrive, LPCTSTR pszFilename) -{ - if (*pszFilename == 0x00) - return false; - - char szFullFilename[MAX_PATH]; - - RegLoadString(TEXT("Preferences"), TEXT("HDV Starting Directory"), 1, szFullFilename, MAX_PATH); - strcat(szFullFilename, pszFilename); - - return HD_InsertDisk(iDrive, szFullFilename); -} - -// imagefilename is qualified with path +// pszImageFilename is qualified with path BOOL HD_InsertDisk(const int iDrive, LPCTSTR pszImageFilename) { if (*pszImageFilename == 0x00) @@ -342,12 +333,12 @@ BOOL HD_InsertDisk(const int iDrive, LPCTSTR pszImageFilename) if (g_HardDisk[iDrive].hd_imageloaded) HD_CleanupDrive(iDrive); - BOOL result = HD_Load_Image(iDrive, pszImageFilename); + BOOL bResult = HD_Load_Image(iDrive, pszImageFilename); - if (result) + if (bResult) GetImageTitle(pszImageFilename, &g_HardDisk[iDrive]); - return result; + return bResult; } void HD_Select(const int iDrive) @@ -356,10 +347,10 @@ void HD_Select(const int iDrive) TCHAR filename[MAX_PATH] = TEXT(""); TCHAR title[40]; - RegLoadString(TEXT("Preferences"), TEXT("HDV Starting Directory"), 1, directory, MAX_PATH); - _tcscpy(title,TEXT("Select HDV Image For HDD ")); - _tcscat(title,iDrive ? TEXT("2") : TEXT("1")); - + RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_HDV_START_DIR), 1, directory, MAX_PATH); + _tcscpy(title, TEXT("Select HDV Image For HDD ")); + _tcscat(title, iDrive ? TEXT("2") : TEXT("1")); + OPENFILENAME ofn; ZeroMemory(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); @@ -381,8 +372,8 @@ void HD_Select(const int iDrive) if (HD_InsertDisk(iDrive, filename)) { filename[ofn.nFileOffset] = 0; - if (_tcsicmp(directory,filename)) - RegSaveString(TEXT("Preferences"),TEXT("HDV Starting Directory"),1,filename); + if (_tcsicmp(directory, filename)) + RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_HDV_START_DIR), 1, filename); } else { diff --git a/AppleWin/source/Harddisk.h b/AppleWin/source/Harddisk.h index cd7f445a..6b7a2ff6 100644 --- a/AppleWin/source/Harddisk.h +++ b/AppleWin/source/Harddisk.h @@ -10,9 +10,9 @@ enum HardDrive_e bool HD_CardIsEnabled(void); void HD_SetEnabled(const bool bEnabled); LPCTSTR HD_GetFullName(const int iDrive); +LPCTSTR HD_GetFullPathName(const int iDrive); VOID HD_Load_Rom(const LPBYTE pCxRomPeripheral, const UINT uSlot); VOID HD_Cleanup(void); -BOOL HD_InsertDisk2(const int iDrive, LPCTSTR pszFilename); BOOL HD_InsertDisk(const int iDrive, LPCTSTR pszImageFilename); void HD_Select(const int iDrive); void HD_Unplug(const int iDrive); diff --git a/AppleWin/source/PropertySheetPage.cpp b/AppleWin/source/PropertySheetPage.cpp index 685326f0..fcdd4de6 100644 --- a/AppleWin/source/PropertySheetPage.cpp +++ b/AppleWin/source/PropertySheetPage.cpp @@ -923,10 +923,11 @@ static void DiskDlg_OK(HWND window, UINT afterclose) bool bHDDIsEnabled = IsDlgButtonChecked(window, IDC_HDD_ENABLE) ? true : false; HD_SetEnabled(bHDDIsEnabled); - REGSAVE(TEXT("Enhance Disk Speed"),newdisktype); + REGSAVE(TEXT(REGVALUE_ENHANCE_DISK_SPEED),newdisktype); REGSAVE(TEXT(REGVALUE_HDD_ENABLED), bHDDIsEnabled ? 1 : 0); - RegSaveString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE1), 1, HD_GetFullName(0)); - RegSaveString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE2), 1, HD_GetFullName(1)); + + RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_1), 1, HD_GetFullPathName(HARDDISK_1)); + RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_2), 1, HD_GetFullPathName(HARDDISK_2)); // diff --git a/AppleWin/source/Util_MemoryTextFile.cpp b/AppleWin/source/Util_MemoryTextFile.cpp index 6acef246..3d06cbc0 100644 --- a/AppleWin/source/Util_MemoryTextFile.cpp +++ b/AppleWin/source/Util_MemoryTextFile.cpp @@ -58,15 +58,16 @@ void MemoryTextFile_t::GetLinePointers() return; m_vLines.erase( m_vLines.begin(), m_vLines.end() ); - char *pBegin = & m_vBuffer.at( 0 ); - char *pLast = & m_vBuffer[ m_vBuffer.size() ]; + char *pBegin = & m_vBuffer[ 0 ]; + char *pLast = & m_vBuffer[ m_vBuffer.size()-1 ]; char *pEnd = NULL; char *pStartNextLine; - while (pBegin < pLast) + while (pBegin <= pLast) { - m_vLines.push_back( pBegin ); + if ( *pBegin ) // Only keep non-empty lines + m_vLines.push_back( pBegin ); pEnd = const_cast( SkipUntilEOL( pBegin ));