Win32: Switch to a UNICODE build. This took quite a bit of fixing.

This commit is contained in:
Henrik Rydgard 2013-08-26 19:00:16 +02:00
parent fdaff2af98
commit 55aa3d13c7
63 changed files with 572 additions and 517 deletions

View file

@ -27,22 +27,22 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -28,6 +28,7 @@
#endif
#include "thread/threadutil.h"
#include "util/text/utf8.h"
#include "Common.h"
#include "LogManager.h" // Common
#include "ConsoleListener.h" // Common
@ -89,7 +90,9 @@ void ConsoleListener::Open(bool Hidden, int Width, int Height, const char *Title
// Save the window handle that AllocConsole() created
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// Set the console window title
SetConsoleTitle(Title);
SetConsoleTitle(ConvertUTF8ToWString(Title).c_str());
SetConsoleCP(CP_UTF8);
// Set letter space
LetterSpace(Width, LOG_MAX_DISPLAY_LINES);
//MoveWindow(GetConsoleWindow(), 200,200, 800,800, true);
@ -415,6 +418,7 @@ void ConsoleListener::WriteToConsole(LogTypes::LOG_LEVELS Level, const char *Tex
*/
DWORD cCharsWritten;
WORD Color;
static wchar_t tempBuf[2048];
switch (Level)
{
@ -441,12 +445,16 @@ void ConsoleListener::WriteToConsole(LogTypes::LOG_LEVELS Level, const char *Tex
{
// First 10 chars white
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
WriteConsole(hConsole, Text, 10, &cCharsWritten, NULL);
int wlen = MultiByteToWideChar(CP_UTF8, 0, Text, (int)Len, NULL, NULL);
MultiByteToWideChar(CP_UTF8, 0, Text, (int)Len, tempBuf, wlen);
WriteConsole(hConsole, tempBuf, 10, &cCharsWritten, NULL);
Text += 10;
Len -= 10;
}
SetConsoleTextAttribute(hConsole, Color);
WriteConsole(hConsole, Text, (DWORD)Len, &cCharsWritten, NULL);
int wlen = MultiByteToWideChar(CP_UTF8, 0, Text, (int)Len, NULL, NULL);
MultiByteToWideChar(CP_UTF8, 0, Text, (int)Len, tempBuf, wlen);
WriteConsole(hConsole, tempBuf, (DWORD)Len, &cCharsWritten, NULL);
}
#endif
@ -476,7 +484,7 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
static const int MAX_BYTES = 1024 * 16;
std::vector<std::array<CHAR, MAX_BYTES>> Str;
std::vector<std::array<wchar_t, MAX_BYTES>> Str;
std::vector<std::array<WORD, MAX_BYTES>> Attr;
// ReadConsoleOutputAttribute seems to have a limit at this level

View file

@ -17,6 +17,8 @@
#include "CommonWindows.h"
#include <stdio.h>
#include "ExtendedTrace.h"
#include <string>
using namespace std;
#include <tchar.h>
@ -320,7 +322,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
GetSourceInfoFromAddress( (ULONG)callStack.AddrPC.Offset, srcInfo );
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
etfprint(file, wstring(L" ") + srcInfo + L" : " + symInfo + L"\n");
for( ULONG index = 0; ; index++ )
{
@ -343,7 +345,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
etfprint(file, wstring(L" ") + srcInfo + L" : " + symInfo + L"\n");
}
@ -351,22 +353,6 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
ResumeThread( hThread );
}
#ifndef UNICODE
void StackTrace( HANDLE hThread, wchar_t const*lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp )
{
// TODO: remove when Common builds as unicode
size_t origsize = wcslen(lpszMessage) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];
wcstombs_s(&convertedChars, nstring, origsize, lpszMessage, _TRUNCATE);
StackTrace(hThread, nstring, file, eip, esp, ebp );
}
#endif
void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp )
{
STACKFRAME callStack;
@ -397,7 +383,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWO
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
etfprint(file, wstring(L" ") + srcInfo + L" : " + symInfo + L"\n");
for( ULONG index = 0; ; index++ )
{
@ -420,8 +406,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWO
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
etfprint(file, wstring(L" ") + srcInfo + L" : " + symInfo + L"\n");
}
if ( hThread != GetCurrentThread() )
@ -443,4 +428,9 @@ void etfprint(FILE *file, const std::string &text) {
fwrite(text.data(), 1, len, file);
}
void etfprint(FILE *file, const std::wstring &text) {
size_t len = text.length();
fwrite(text.data(), sizeof(wchar_t), len, file);
}
#endif //WIN32

View file

@ -39,6 +39,7 @@ void StackTrace( HANDLE hThread, wchar_t const* lpszMessage, FILE *file, DWORD e
// functions by Masken
void etfprintf(FILE *file, const char *format, ...);
void etfprint(FILE *file, const std::string &text);
void etfprint(FILE *file, const std::wstring &text);
#define UEFBUFSIZE 2048
extern char g_uefbuf[UEFBUFSIZE];

View file

@ -32,6 +32,7 @@
#include "FileSearch.h"
#include "StringUtils.h"
#include "util/text/utf8.h"
CFileSearch::CFileSearch(const CFileSearch::XStringVector& _rSearchStrings, const CFileSearch::XStringVector& _rDirectories)
@ -53,7 +54,8 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
BuildCompleteFilename(GCMSearchPath, _strPath, _searchString);
#ifdef _WIN32
WIN32_FIND_DATA findData;
HANDLE FindFirst = FindFirstFile(GCMSearchPath.c_str(), &findData);
std::wstring searchPathW = ConvertUTF8ToWString(GCMSearchPath);
HANDLE FindFirst = FindFirstFile(searchPathW.c_str(), &findData);
if (FindFirst != INVALID_HANDLE_VALUE)
{
@ -64,7 +66,7 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
if (findData.cFileName[0] != '.')
{
std::string strFilename;
BuildCompleteFilename(strFilename, _strPath, findData.cFileName);
BuildCompleteFilename(strFilename, _strPath, ConvertWStringToUTF8(findData.cFileName));
m_FileNames.push_back(strFilename);
}

View file

@ -41,6 +41,8 @@
#include <CoreFoundation/CFBundle.h>
#endif
#include "util/text/utf8.h"
#include <fstream>
#include <sys/stat.h>
@ -154,7 +156,7 @@ bool Delete(const std::string &filename)
}
#ifdef _WIN32
if (!DeleteFile(filename.c_str()))
if (!DeleteFile(ConvertUTF8ToWString(filename).c_str()))
{
WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s",
filename.c_str(), GetLastErrorMsg());
@ -176,7 +178,7 @@ bool CreateDir(const std::string &path)
{
INFO_LOG(COMMON, "CreateDir: directory %s", path.c_str());
#ifdef _WIN32
if (::CreateDirectory(path.c_str(), NULL))
if (::CreateDirectory(ConvertUTF8ToWString(path).c_str(), NULL))
return true;
DWORD error = GetLastError();
if (error == ERROR_ALREADY_EXISTS)
@ -267,7 +269,7 @@ bool DeleteDir(const std::string &filename)
}
#ifdef _WIN32
if (::RemoveDirectory(filename.c_str()))
if (::RemoveDirectory(ConvertUTF8ToWString(filename).c_str()))
return true;
#else
if (rmdir(filename.c_str()) == 0)
@ -296,7 +298,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
INFO_LOG(COMMON, "Copy: %s --> %s",
srcFilename.c_str(), destFilename.c_str());
#ifdef _WIN32
if (CopyFile(srcFilename.c_str(), destFilename.c_str(), FALSE))
if (CopyFile(ConvertUTF8ToWString(srcFilename).c_str(), ConvertUTF8ToWString(destFilename).c_str(), FALSE))
return true;
ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s",
@ -461,80 +463,6 @@ bool CreateEmptyFile(const std::string &filename)
return true;
}
// Scans the directory tree gets, starting from _Directory and adds the
// results into parentEntry. Returns the number of files+directories found
u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
{
INFO_LOG(COMMON, "ScanDirectoryTree: directory %s", directory.c_str());
// How many files + directories we found
u32 foundEntries = 0;
#ifdef _WIN32
// Find the first file in the directory.
WIN32_FIND_DATA ffd;
HANDLE hFind = FindFirstFile((directory + "\\*").c_str(), &ffd);
if (hFind == INVALID_HANDLE_VALUE)
{
FindClose(hFind);
return foundEntries;
}
// windows loop
do
{
FSTEntry entry;
const std::string virtualName(ffd.cFileName);
#else
struct dirent_large { struct dirent entry; char padding[FILENAME_MAX+1]; };
struct dirent_large diren;
struct dirent *result = NULL;
DIR *dirp = opendir(directory.c_str());
if (!dirp)
return 0;
// non windows loop
while (!readdir_r(dirp, (dirent*)&diren, &result) && result)
{
FSTEntry entry;
const std::string virtualName(result->d_name);
#endif
// check for "." and ".."
if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
((virtualName[0] == '.') && (virtualName[1] == '.') &&
(virtualName[2] == '\0')))
continue;
entry.virtualName = virtualName;
entry.physicalName = directory;
entry.physicalName += DIR_SEP + entry.virtualName;
if (IsDirectory(entry.physicalName.c_str()))
{
entry.isDirectory = true;
// is a directory, lets go inside
entry.size = ScanDirectoryTree(entry.physicalName, entry);
foundEntries += (u32)entry.size;
}
else
{ // is a file
entry.isDirectory = false;
entry.size = GetSize(entry.physicalName.c_str());
}
++foundEntries;
// Push into the tree
parentEntry.children.push_back(entry);
#ifdef _WIN32
} while (FindNextFile(hFind, &ffd) != 0);
FindClose(hFind);
#else
}
closedir(dirp);
#endif
// Return number of entries found.
return foundEntries;
}
// Deletes the given directory and anything under it. Returns true on success.
bool DeleteDirRecursively(const std::string &directory)
{
@ -542,7 +470,7 @@ bool DeleteDirRecursively(const std::string &directory)
#ifdef _WIN32
// Find the first file in the directory.
WIN32_FIND_DATA ffd;
HANDLE hFind = FindFirstFile((directory + "\\*").c_str(), &ffd);
HANDLE hFind = FindFirstFile(ConvertUTF8ToWString(directory + "\\*").c_str(), &ffd);
if (hFind == INVALID_HANDLE_VALUE)
{
@ -553,7 +481,7 @@ bool DeleteDirRecursively(const std::string &directory)
// windows loop
do
{
const std::string virtualName = ffd.cFileName;
const std::string virtualName = ConvertWStringToUTF8(ffd.cFileName);
#else
struct dirent dirent, *result = NULL;
DIR *dirp = opendir(directory.c_str());

View file

@ -99,10 +99,6 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename);
// creates an empty file filename, returns true on success
bool CreateEmptyFile(const std::string &filename);
// Scans the directory tree gets, starting from _Directory and adds the
// results into parentEntry. Returns the number of files+directories found
u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry);
// deletes the given directory and anything under it. Returns true on success.
bool DeleteDirRecursively(const std::string &directory);

View file

@ -35,7 +35,7 @@ const char* GetLastErrorMsg()
#ifdef _WIN32
static __declspec(thread) char err_str[buff_size] = {};
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
err_str, buff_size, NULL);
#else

View file

@ -20,6 +20,7 @@
#include "Common.h" // Local
#include "StringUtils.h"
#include "util/text/utf8.h"
bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, int Style);
static MsgAlertHandler msg_handler = DefaultMsgHandler;
@ -106,15 +107,18 @@ bool MsgAlert(bool yes_no, int Style, const char* format, ...)
bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, int Style)
{
#ifdef _WIN32
int STYLE = MB_ICONINFORMATION;
if (Style == QUESTION) STYLE = MB_ICONQUESTION;
if (Style == WARNING) STYLE = MB_ICONWARNING;
return IDYES == MessageBox(0, text, caption, STYLE | (yes_no ? MB_YESNO : MB_OK));
int STYLE = MB_ICONINFORMATION;
if (Style == QUESTION) STYLE = MB_ICONQUESTION;
if (Style == WARNING) STYLE = MB_ICONWARNING;
std::wstring wtext = ConvertUTF8ToWString(text);
std::wstring wcaption = ConvertUTF8ToWString(caption);
return IDYES == MessageBox(0, wtext.c_str(), wcaption.c_str(), STYLE | (yes_no ? MB_YESNO : MB_OK));
#else
printf("%s\n", text);
return true;
printf("%s\n", text);
return true;
#endif
}

View file

@ -26,24 +26,24 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -43,7 +43,7 @@ public:
virtual const char *getDescription(unsigned int address) {return "";}
virtual const char *findSymbolForAddress(unsigned int address) { return NULL; };
virtual bool getSymbolValue(char* symbol, u32& dest) { return false; };
virtual bool initExpression(char* exp, PostfixExpression& dest) { return false; };
virtual bool initExpression(const char* exp, PostfixExpression& dest) { return false; };
virtual bool parseExpression(PostfixExpression& exp, u32& dest) { return false; };

View file

@ -21,6 +21,7 @@
#include "ISOFileSystem.h"
#include "Core/HLE/sceKernel.h"
#include "file/zip_read.h"
#include "util/text/utf8.h"
#ifdef _WIN32
#include "Common/CommonWindows.h"
@ -184,7 +185,7 @@ bool DirectoryFileHandle::Open(std::string& basePath, std::string& fileName, Fil
openmode = OPEN_EXISTING;
}
//Let's do it!
hFile = CreateFile(fullName.c_str(), desired, sharemode, 0, openmode, 0, 0);
hFile = CreateFile(ConvertUTF8ToWString(fullName).c_str(), desired, sharemode, 0, openmode, 0, 0);
bool success = hFile != INVALID_HANDLE_VALUE;
#else
// Convert flags in access parameter to fopen access mode
@ -392,7 +393,7 @@ int DirectoryFileSystem::RenameFile(const std::string &from, const std::string &
const char * fullToC = fullTo.c_str();
#ifdef _WIN32
bool retValue = (MoveFile(fullFrom.c_str(), fullToC) == TRUE);
bool retValue = (MoveFile(ConvertUTF8ToWString(fullFrom).c_str(), ConvertUTF8ToWString(fullToC).c_str()) == TRUE);
#else
bool retValue = (0 == rename(fullFrom.c_str(), fullToC));
#endif
@ -586,7 +587,7 @@ std::vector<PSPFileInfo> DirectoryFileSystem::GetDirListing(std::string path) {
std::string w32path = GetLocalPath(path) + "\\*.*";
hFind = FindFirstFile(w32path.c_str(), &findData);
hFind = FindFirstFile(ConvertUTF8ToWString(w32path).c_str(), &findData);
if (hFind == INVALID_HANDLE_VALUE) {
return myVector; //the empty list
@ -603,11 +604,11 @@ std::vector<PSPFileInfo> DirectoryFileSystem::GetDirListing(std::string path) {
entry.access = entry.type == FILETYPE_NORMAL ? 0666 : 0777;
// TODO: is this just for .. or all subdirectories? Need to add a directory to the test
// to find out. Also why so different than the old test results?
if (!strcmp(findData.cFileName, "..") )
if (!wcscmp(findData.cFileName, L"..") )
entry.size = 4096;
else
entry.size = findData.nFileSizeLow | ((u64)findData.nFileSizeHigh<<32);
entry.name = findData.cFileName;
entry.name = ConvertWStringToUTF8(findData.cFileName);
tmFromFiletime(entry.atime, findData.ftLastAccessTime);
tmFromFiletime(entry.ctime, findData.ftCreationTime);
tmFromFiletime(entry.mtime, findData.ftLastWriteTime);

View file

@ -22,6 +22,7 @@
#include "Core/FileSystems/ISOFileSystem.h"
#include "Core/HLE/sceKernel.h"
#include "file/zip_read.h"
#include "util/text/utf8.h"
#ifdef _WIN32
#include "Common/CommonWindows.h"
@ -599,14 +600,14 @@ std::vector<PSPFileInfo> VirtualDiscFileSystem::GetDirListing(std::string path)
std::string w32path = GetLocalPath(path) + "\\*.*";
hFind = FindFirstFile(w32path.c_str(), &findData);
hFind = FindFirstFile(ConvertUTF8ToWString(w32path).c_str(), &findData);
if (hFind == INVALID_HANDLE_VALUE) {
return myVector; //the empty list
}
for (BOOL retval = 1; retval; retval = FindNextFile(hFind, &findData)) {
if (!strcmp(findData.cFileName, "..") || !strcmp(findData.cFileName, ".")) {
if (!wcscmp(findData.cFileName, L"..") || !wcscmp(findData.cFileName, L".")) {
continue;
}
@ -619,7 +620,7 @@ std::vector<PSPFileInfo> VirtualDiscFileSystem::GetDirListing(std::string path)
entry.access = FILEACCESS_READ;
entry.size = findData.nFileSizeLow | ((u64)findData.nFileSizeHigh<<32);
entry.name = findData.cFileName;
entry.name = ConvertWStringToUTF8(findData.cFileName);
tmFromFiletime(entry.atime, findData.ftLastAccessTime);
tmFromFiletime(entry.ctime, findData.ftCreationTime);
tmFromFiletime(entry.mtime, findData.ftLastWriteTime);
@ -728,7 +729,7 @@ void VirtualDiscFileSystem::HandlerLogger(void *arg, HandlerHandle handle, LogTy
VirtualDiscFileSystem::Handler::Handler(const char *filename, VirtualDiscFileSystem *const sys) {
#ifdef _WIN32
#define dlopen(name, ignore) (void *)LoadLibrary(name)
#define dlopen(name, ignore) (void *)LoadLibrary(ConvertUTF8ToWString(name).c_str())
#define dlsym(mod, name) GetProcAddress((HMODULE)mod, name)
#define dlclose(mod) FreeLibrary((HMODULE)mod)
#endif

View file

@ -21,16 +21,14 @@
struct InputState;
class PMixer
{
class PMixer {
public:
PMixer() {}
virtual ~PMixer() {}
virtual int Mix(short *stereoout, int numSamples) {memset(stereoout,0,numSamples*2*sizeof(short)); return numSamples;}
};
class Host
{
class Host {
public:
virtual ~Host() {}
//virtual void StartThread()
@ -64,6 +62,8 @@ public:
virtual void SendGPUWait(u32 cmd, u32 addr, void* data) {}
virtual void SetGPUStep(bool value, int flag = 0, int data = 0) {}
virtual void NextGPUStep() {}
virtual bool CanCreateShortcut() {return false;}
virtual bool CreateDesktopShortcut(std::string argumentPath, std::string title) {return false;}
#ifdef _WIN32
// Implement this on your platform to grab text input from the user for whatever purpose.

View file

@ -30,7 +30,7 @@ void SplitLine(const char* Line, char* Name, char* Arguments)
*Arguments = 0;
}
bool MipsAssembleOpcode(char* line, DebugInterface* cpu, u32 address, u32& dest)
bool MipsAssembleOpcode(const char* line, DebugInterface* cpu, u32 address, u32& dest)
{
char name[64],args[256];
SplitLine(line,name,args);
@ -51,7 +51,7 @@ bool MipsAssembleOpcode(char* line, DebugInterface* cpu, u32 address, u32& dest)
return true;
}
int MipsGetRegister(char* source, int& RetLen)
int MipsGetRegister(const char* source, int& RetLen)
{
for (int z = 0; MipsRegister[z].name != NULL; z++)
{
@ -69,7 +69,7 @@ int MipsGetRegister(char* source, int& RetLen)
return -1;
}
int MipsGetFloatRegister(char* source, int& RetLen)
int MipsGetFloatRegister(const char* source, int& RetLen)
{
for (int z = 0; MipsFloatRegister[z].name != NULL; z++)
{
@ -87,7 +87,7 @@ int MipsGetFloatRegister(char* source, int& RetLen)
return -1;
}
bool MipsCheckImmediate(char* Source, char* Dest, int& RetLen)
bool MipsCheckImmediate(const char* Source, char* Dest, int& RetLen)
{
int BufferPos = 0;
int l;

View file

@ -6,7 +6,7 @@
namespace MIPSAsm
{
bool MipsAssembleOpcode(char* line, DebugInterface* cpu, u32 address, u32& dest);
bool MipsAssembleOpcode(const char* line, DebugInterface* cpu, u32 address, u32& dest);
typedef enum eMipsImmediateType { MIPS_NOIMMEDIATE, MIPS_IMMEDIATE5,
MIPS_IMMEDIATE16, MIPS_IMMEDIATE20, MIPS_IMMEDIATE26 };

View file

@ -171,7 +171,7 @@ bool MIPSDebugInterface::getSymbolValue(char* symbol, u32& dest)
return symbolMap.getSymbolValue(symbol,dest);
}
bool MIPSDebugInterface::initExpression(char* exp, PostfixExpression& dest)
bool MIPSDebugInterface::initExpression(const char* exp, PostfixExpression& dest)
{
MipsExpressionFunctions funcs(this);
return initPostfixExpression(exp,&funcs,dest);

View file

@ -42,7 +42,7 @@ public:
virtual const char *getDescription(unsigned int address);
virtual const char *findSymbolForAddress(unsigned int address);
virtual bool getSymbolValue(char* symbol, u32& dest);
virtual bool initExpression(char* exp, PostfixExpression& dest);
virtual bool initExpression(const char* exp, PostfixExpression& dest);
virtual bool parseExpression(PostfixExpression& exp, u32& dest);
//overridden functions

View file

@ -22,6 +22,7 @@
#include "native/thread/thread.h"
#include "native/thread/threadutil.h"
#include "native/base/mutex.h"
#include "util/text/utf8.h"
#include "Core/MemMap.h"
@ -324,13 +325,16 @@ CoreParameter &PSP_CoreParameter() {
void GetSysDirectories(std::string &memstickpath, std::string &flash0path) {
#ifdef _WIN32
char path_buffer[_MAX_PATH], drive[_MAX_DRIVE] ,dir[_MAX_DIR], file[_MAX_FNAME], ext[_MAX_EXT];
wchar_t path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE] ,dir[_MAX_DIR], file[_MAX_FNAME], ext[_MAX_EXT];
char memstickpath_buf[_MAX_PATH];
char flash0path_buf[_MAX_PATH];
GetModuleFileName(NULL,path_buffer,sizeof(path_buffer));
GetModuleFileName(NULL, path_buffer, sizeof(path_buffer));
_splitpath_s(path_buffer, drive, dir, file, ext );
std::string path = ConvertWStringToUTF8(path_buffer);
_splitpath_s(path.c_str(), drive, dir, file, ext );
// Mount a couple of filesystems
sprintf(memstickpath_buf, "%s%smemstick\\", drive, dir);

View file

@ -25,6 +25,8 @@
#include <map>
#include "base/logging.h"
#include "math/lin/matrix4x4.h"
#include "Core/Reporting.h"
@ -38,7 +40,7 @@
Shader::Shader(const char *code, uint32_t shaderType, bool useHWTransform) : failed_(false), useHWTransform_(useHWTransform) {
source_ = code;
#ifdef SHADERLOG
OutputDebugString(code);
OutputDebugStringUTF8(code);
#endif
shader = glCreateShader(shaderType);
glShaderSource(shader, 1, &code, 0);
@ -56,7 +58,7 @@ Shader::Shader(const char *code, uint32_t shaderType, bool useHWTransform) : fai
ERROR_LOG(G3D, "Shader source:\n%s\n", (const char *)code);
Reporting::ReportMessage("Error in shader compilation: info: %s / code: %s", infoLog, (const char *)code);
#ifdef SHADERLOG
OutputDebugString(infoLog);
OutputDebugStringUTF8(infoLog);
#endif
failed_ = true;
shader = 0;
@ -89,9 +91,9 @@ LinkedShader::LinkedShader(Shader *vs, Shader *fs, bool useHWTransform)
ERROR_LOG(G3D, "VS:\n%s", vs->source().c_str());
ERROR_LOG(G3D, "FS:\n%s", fs->source().c_str());
#ifdef SHADERLOG
OutputDebugString(buf);
OutputDebugString(vs->source().c_str());
OutputDebugString(fs->source().c_str());
OutputDebugStringUTF8(buf);
OutputDebugStringUTF8(vs->source().c_str());
OutputDebugStringUTF8(fs->source().c_str());
#endif
delete [] buf; // we're dead!
}

View file

@ -26,26 +26,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -29,6 +29,7 @@
#include "UI/GameInfoCache.h"
#include "UI/MiscScreens.h"
#include "UI/MainScreen.h"
#include "Core/Host.h"
void GameScreen::CreateViews() {
GameInfo *info = g_gameInfoCache.GetInfo(gamePath_, true);
@ -66,6 +67,9 @@ void GameScreen::CreateViews() {
rightColumnItems->Add(new Choice(ga->T("Game Settings")))->OnClick.Handle(this, &GameScreen::OnGameSettings);
rightColumnItems->Add(new Choice(ga->T("Delete Save Data")))->OnClick.Handle(this, &GameScreen::OnDeleteSaveData);
rightColumnItems->Add(new Choice(ga->T("Delete Game")))->OnClick.Handle(this, &GameScreen::OnDeleteGame);
if (host->CanCreateShortcut()) {
rightColumnItems->Add(new Choice(ga->T("Create Shortcut")))->OnClick.Handle(this, &GameScreen::OnCreateShortcut);
}
UI::SetFocusedView(play);
}
@ -185,3 +189,10 @@ void GameScreen::CallbackDeleteGame(bool yes) {
}
}
UI::EventReturn GameScreen::OnCreateShortcut(UI::EventParams &e) {
GameInfo *info = g_gameInfoCache.GetInfo(gamePath_, false);
if (info) {
host->CreateDesktopShortcut(gamePath_, info->title);
}
return UI::EVENT_DONE;
}

View file

@ -22,7 +22,9 @@
// Game screen: Allows you to start a game, delete saves, delete the game,
// set game specific settings, etc.
// Uses GameInfoCache heavily to implement the functionality.
// Should possibly merge this with the PauseScreen.
class GameScreen : public UIDialogScreen {
public:
@ -43,6 +45,7 @@ private:
UI::EventReturn OnDeleteSaveData(UI::EventParams &e);
UI::EventReturn OnDeleteGame(UI::EventParams &e);
UI::EventReturn OnSwitchBack(UI::EventParams &e);
UI::EventReturn OnCreateShortcut(UI::EventParams &e);
std::string gamePath_;

View file

@ -59,27 +59,27 @@
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -28,9 +28,7 @@
<ClCompile Include="ControlMappingScreen.cpp">
<Filter>Screens</Filter>
</ClCompile>
<ClCompile Include="CwCheatScreen.cpp">
<Filter>Screens</Filter>
</ClCompile>
<ClCompile Include="CwCheatScreen.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="GameInfoCache.h" />
@ -59,9 +57,7 @@
<ClInclude Include="ControlMappingScreen.h">
<Filter>Screens</Filter>
</ClInclude>
<ClInclude Include="CwCheatScreen.h">
<Filter>Screens</Filter>
</ClInclude>
<ClInclude Include="CwCheatScreen.h" />
</ItemGroup>
<ItemGroup>
<Filter Include="Screens">

View file

@ -96,7 +96,7 @@ namespace DSound
{
char temp[8];
sprintf(temp,"%i\n",hr);
OutputDebugString(temp);
OutputDebugStringUTF8(temp);
}*/
return false;
}

View file

@ -30,13 +30,13 @@ INT_PTR CALLBACK BreakpointWindow::dlgFunc(HWND hwnd, UINT iMsg, WPARAM wParam,
if (bp->address != -1)
{
sprintf(str,"0x%08X",bp->address);
SetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_ADDRESS),str);
SetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_ADDRESS),str);
}
sprintf(str,"0x%08X",bp->size);
SetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_SIZE),str);
SetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_SIZE),str);
SetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_CONDITION),bp->condition);
SetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_CONDITION),bp->condition);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
@ -120,49 +120,49 @@ bool BreakpointWindow::fetchDialogData(HWND hwnd)
onChange = SendMessage(GetDlgItem(hwnd,IDC_BREAKPOINT_ONCHANGE),BM_GETCHECK,0,0) != 0;
// parse address
GetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_ADDRESS),str,256);
GetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_ADDRESS),str,256);
if (cpu->initExpression(str,exp) == false)
{
sprintf(errorMessage,"Invalid expression \"%s\".",str);
MessageBox(hwnd,errorMessage,"Error",MB_OK);
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
return false;
}
if (cpu->parseExpression(exp,address) == false)
{
sprintf(errorMessage,"Invalid expression \"%s\".",str);
MessageBox(hwnd,errorMessage,"Error",MB_OK);
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
return false;
}
if (memory)
{
// parse size
GetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_SIZE),str,256);
GetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_SIZE),str,256);
if (cpu->initExpression(str,exp) == false)
{
sprintf(errorMessage,"Invalid expression \"%s\".",str);
MessageBox(hwnd,errorMessage,"Error",MB_OK);
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
return false;
}
if (cpu->parseExpression(exp,size) == false)
{
sprintf(errorMessage,"Invalid expression \"%s\".",str);
MessageBox(hwnd,errorMessage,"Error",MB_OK);
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
return false;
}
}
// condition
GetWindowText(GetDlgItem(hwnd,IDC_BREAKPOINT_CONDITION),condition,128);
GetWindowTextA(GetDlgItem(hwnd,IDC_BREAKPOINT_CONDITION),condition,128);
compiledCondition.clear();
if (condition[0] != 0)
{
if (cpu->initExpression(condition,compiledCondition) == false)
{
sprintf(errorMessage,"Invalid expression \"%s\".",str);
MessageBox(hwnd,errorMessage,"Error",MB_OK);
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
return false;
}
}

View file

@ -18,6 +18,9 @@
#include "Windows/main.h"
#include "Common/CommonWindows.h"
#include "util/text/utf8.h"
#include <CommDlg.h>
#include <tchar.h>
#include <set>
@ -156,9 +159,9 @@ CtrlDisAsmView::CtrlDisAsmView(HWND _wnd)
rowHeight = g_Config.iFontHeight+2;
font = CreateFont(rowHeight-2,charWidth,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,
"Lucida Console");
L"Lucida Console");
boldfont = CreateFont(rowHeight-2,charWidth,0,0,FW_DEMIBOLD,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,
"Lucida Console");
L"Lucida Console");
curAddress=0;
instructionSize=4;
showHex=false;
@ -169,7 +172,7 @@ CtrlDisAsmView::CtrlDisAsmView(HWND _wnd)
matchAddress = -1;
searching = false;
searchQuery[0] = 0;
searchQuery = "";
windowStart = curAddress;
whiteBackground = false;
displaySymbols = true;
@ -291,26 +294,25 @@ void CtrlDisAsmView::parseDisasm(const char* disasm, char* opcode, char* argumen
void CtrlDisAsmView::assembleOpcode(u32 address, std::string defaultText)
{
char op[256];
u32 encoded;
if (Core_IsStepping() == false)
{
MessageBox(wnd,"Cannot change code while the core is running!","Error",MB_OK);
if (Core_IsStepping() == false) {
MessageBox(wnd,L"Cannot change code while the core is running!",L"Error",MB_OK);
return;
}
std::string op;
bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,L"Assemble opcode",defaultText, op, false);
if (!result)
return;
bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op,false);
if (result == false) return;
result = MIPSAsm::MipsAssembleOpcode(op,debugger,address,encoded);
result = MIPSAsm::MipsAssembleOpcode(op.c_str(),debugger,address,encoded);
if (result == true)
{
Memory::Write_U32(encoded,address);
MIPSComp::jit->ClearCacheAt(address);
redraw();
} else {
MessageBox(wnd,"Couldn''t assemble.","Error",MB_OK);
MessageBox(wnd,L"Couldn't assemble.",L"Error",MB_OK);
}
}
@ -341,8 +343,8 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
HPEN oldPen=(HPEN)SelectObject(hdc,nullPen);
HBRUSH oldBrush=(HBRUSH)SelectObject(hdc,nullBrush);
HFONT oldFont = (HFONT)SelectObject(hdc,(HGDIOBJ)font);
HICON breakPoint = (HICON)LoadIcon(GetModuleHandle(0),(LPCSTR)IDI_STOP);
HICON breakPointDisable = (HICON)LoadIcon(GetModuleHandle(0),(LPCSTR)IDI_STOPDISABLE);
HICON breakPoint = (HICON)LoadIcon(GetModuleHandle(0),(LPCWSTR)IDI_STOP);
HICON breakPointDisable = (HICON)LoadIcon(GetModuleHandle(0),(LPCWSTR)IDI_STOPDISABLE);
for (int i = 0; i < visibleRows+2; i++)
{
@ -396,11 +398,11 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
char addressText[64];
getDisasmAddressText(address,addressText,true);
TextOut(hdc,pixelPositions.addressStart,rowY1+2,addressText,(int)strlen(addressText));
TextOutA(hdc,pixelPositions.addressStart,rowY1+2,addressText,(int)strlen(addressText));
if (address == debugger->getPC())
{
TextOutW(hdc,pixelPositions.opcodeStart-8,rowY1,L"",1);
TextOut(hdc,pixelPositions.opcodeStart-8,rowY1,L"",1);
}
// display opcode
@ -415,10 +417,10 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
}
int length = (int) strlen(arguments);
if (length != 0) TextOut(hdc,pixelPositions.argumentsStart,rowY1+2,arguments,length);
if (length != 0) TextOutA(hdc,pixelPositions.argumentsStart,rowY1+2,arguments,length);
SelectObject(hdc,boldfont);
TextOut(hdc,pixelPositions.opcodeStart,rowY1+2,opcode,(int)strlen(opcode));
TextOutA(hdc,pixelPositions.opcodeStart,rowY1+2,opcode,(int)strlen(opcode));
SelectObject(hdc,font);
if (info.isBranch && info.isConditional)
@ -460,7 +462,7 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
SelectObject(hdc,oldBrush);
// copy bitmap to the actual hdc
BitBlt(actualHdc,0,0,rect.right,rect.bottom,hdc,0,0,SRCCOPY);
BitBlt(actualHdc, 0, 0, rect.right, rect.bottom, hdc, 0, 0, SRCCOPY);
DeleteObject(hBM);
DeleteDC(hdc);
@ -666,7 +668,7 @@ void CtrlDisAsmView::toggleBreakpoint()
} else if (CBreakPoints::GetBreakPointCondition(curAddress) != NULL)
{
// don't just delete a breakpoint with a custom condition
int ret = MessageBox(wnd,"This breakpoint has a custom condition.\nDo you want to remove it?","Confirmation",MB_YESNO);
int ret = MessageBox(wnd,L"This breakpoint has a custom condition.\nDo you want to remove it?",L"Confirmation",MB_YESNO);
if (ret != IDYES) return;
CBreakPoints::RemoveBreakPoint(curAddress);
} else {
@ -793,18 +795,18 @@ void CtrlDisAsmView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
if (sym != -1)
{
char name[256];
char newname[256];
std::string newname;
strncpy_s(name, symbolMap.GetSymbolName(sym),_TRUNCATE);
if (InputBox_GetString(MainWindow::GetHInstance(), MainWindow::GetHWND(), "New function name", name, newname))
if (InputBox_GetString(MainWindow::GetHInstance(), MainWindow::GetHWND(), L"New function name", name, newname))
{
symbolMap.SetSymbolName(sym,newname);
symbolMap.SetSymbolName(sym, newname.c_str());
redraw();
SendMessage(GetParent(wnd),WM_DEB_MAPLOADED,0,0);
}
}
else
{
MessageBox(MainWindow::GetHWND(),"No symbol selected",0,0);
MessageBox(MainWindow::GetHWND(), L"No symbol selected",0,0);
}
}
break;
@ -904,7 +906,7 @@ void CtrlDisAsmView::search(bool continueSearch)
if (continueSearch == false || searchQuery[0] == 0)
{
if (InputBox_GetString(MainWindow::GetHInstance(),MainWindow::GetHWND(),"Search for:","",searchQuery) == false
if (InputBox_GetString(MainWindow::GetHInstance(),MainWindow::GetHWND(),L"Search for:","",searchQuery) == false
|| searchQuery[0] == 0)
{
SetFocus(wnd);
@ -924,9 +926,8 @@ void CtrlDisAsmView::search(bool continueSearch)
// limit address to sensible ranges
if (searchAddress < 0x04000000) searchAddress = 0x04000000;
if (searchAddress >= 0x04200000 && searchAddress < 0x08000000) searchAddress = 0x08000000;
if (searchAddress >= 0x0A000000)
{
MessageBox(wnd,"Not found","Search",MB_OK);
if (searchAddress >= 0x0A000000) {
MessageBox(wnd,L"Not found",L"Search",MB_OK);
return;
}
@ -951,7 +952,7 @@ void CtrlDisAsmView::search(bool continueSearch)
merged[mergePos] = 0;
// match!
if (strstr(merged,searchQuery) != NULL)
if (strstr(merged, searchQuery.c_str()) != NULL)
{
matchAddress = searchAddress;
searching = false;
@ -970,20 +971,20 @@ void CtrlDisAsmView::search(bool continueSearch)
if (searchAddress >= 0x04200000 && searchAddress < 0x08000000) searchAddress = 0x08000000;
}
MessageBox(wnd,"Not found","Search",MB_OK);
MessageBox(wnd,L"Not found",L"Search",MB_OK);
searching = false;
}
void CtrlDisAsmView::disassembleToFile()
{
char fileName[MAX_PATH];
wchar_t fileName[MAX_PATH];
u32 size;
// get size
if (executeExpressionWindow(wnd,debugger,size) == false) return;
if (size == 0 || size > 10*1024*1024)
{
MessageBox(wnd,"Invalid size!","Error",MB_OK);
MessageBox(wnd,L"Invalid size!",L"Error",MB_OK);
return;
}
@ -995,7 +996,7 @@ void CtrlDisAsmView::disassembleToFile()
ofn.lpstrFile = fileName ;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof( fileName );
ofn.lpstrFilter = "All files";
ofn.lpstrFilter = L"All files";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0 ;
@ -1004,10 +1005,9 @@ void CtrlDisAsmView::disassembleToFile()
if (GetSaveFileName(&ofn) == false) return;
FILE* output = fopen(fileName,"w");
if (output == NULL)
{
MessageBox(wnd,"Could not open file!","Error",MB_OK);
FILE* output = fopen(ConvertWStringToUTF8(fileName).c_str(),"w");
if (output == NULL) {
MessageBox(wnd,L"Could not open file!",L"Error",MB_OK);
return;
}
@ -1059,14 +1059,14 @@ void CtrlDisAsmView::disassembleToFile()
}
fclose(output);
MessageBox(wnd,"Finished!","Done",MB_OK);
MessageBox(wnd,L"Finished!",L"Done",MB_OK);
}
void CtrlDisAsmView::getOpcodeText(u32 address, char* dest)
{
char opcode[64],arguments[256];
char opcode[64];
char arguments[256];
const char *dis = debugger->disasm(address, instructionSize);
parseDisasm(dis,opcode,arguments);
sprintf(dest,"%s %s",opcode,arguments);
}

View file

@ -64,7 +64,7 @@ class CtrlDisAsmView
std::vector<u32> jumpStack;
bool controlHeld;
char searchQuery[256];
std::string searchQuery;
int matchAddress;
bool searching;
bool dontRedraw;

View file

@ -16,7 +16,7 @@
#include "DebuggerShared.h"
#include "CtrlMemView.h"
TCHAR CtrlMemView::szClassName[] = _T("CtrlMemView");
wchar_t CtrlMemView::szClassName[] = L"CtrlMemView";
extern HMENU g_hPopupMenus;
CtrlMemView::CtrlMemView(HWND _wnd)
@ -31,10 +31,10 @@ CtrlMemView::CtrlMemView(HWND _wnd)
font =
CreateFont(rowHeight,charWidth,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Lucida Console");
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,L"Lucida Console");
underlineFont =
CreateFont(rowHeight,charWidth,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Lucida Console");
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,L"Lucida Console");
curAddress=0;
mode=MV_NORMAL;
debugger = 0;
@ -197,7 +197,7 @@ void CtrlMemView::onPaint(WPARAM wParam, LPARAM lParam)
sprintf(temp,"%08X",address);
SetTextColor(hdc,0x600000);
TextOut(hdc,addressStart,rowY,temp,(int)strlen(temp));
TextOutA(hdc,addressStart,rowY,temp,(int)strlen(temp));
SetTextColor(hdc,0x000000);
if (debugger->isAlive())
@ -240,14 +240,14 @@ void CtrlMemView::onPaint(WPARAM wParam, LPARAM lParam)
SetTextColor(hdc,0);
SetBkColor(hdc,0xC0C0C0);
}
TextOut(hdc,hexStart+j*3*charWidth,rowY,&temp[0],1);
TextOutA(hdc,hexStart+j*3*charWidth,rowY,&temp[0],1);
if (hasFocus && !asciiSelected)
{
if (selectedNibble == 1) SelectObject(hdc,(HGDIOBJ)underlineFont);
else SelectObject(hdc,(HGDIOBJ)font);
}
TextOut(hdc,hexStart+j*3*charWidth+charWidth,rowY,&temp[1],1);
TextOutA(hdc,hexStart+j*3*charWidth+charWidth,rowY,&temp[1],1);
if (hasFocus && asciiSelected)
{
@ -258,13 +258,13 @@ void CtrlMemView::onPaint(WPARAM wParam, LPARAM lParam)
SetBkColor(hdc,0xC0C0C0);
SelectObject(hdc,(HGDIOBJ)font);
}
TextOut(hdc,asciiStart+j*(charWidth+2),rowY,(char*)&c,1);
TextOutA(hdc,asciiStart+j*(charWidth+2),rowY,(char*)&c,1);
SetTextColor(hdc,oldTextColor);
SetBkColor(hdc,oldBkColor);
} else {
TextOut(hdc,hexStart+j*3*charWidth,rowY,temp,2);
TextOut(hdc,asciiStart+j*(charWidth+2),rowY,(char*)&c,1);
TextOutA(hdc,hexStart+j*3*charWidth,rowY,temp,2);
TextOutA(hdc,asciiStart+j*(charWidth+2),rowY,(char*)&c,1);
}
}
}
@ -458,7 +458,7 @@ void CtrlMemView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
if (!Core_IsStepping()) // If emulator isn't paused
{
MessageBox(wnd,"You have to pause the emulator first","Sorry",0);
MessageBox(wnd,L"You have to pause the emulator first",0,0);
break;
}
else

View file

@ -49,7 +49,7 @@ class CtrlMemView
int visibleRows;
bool hasFocus;
static TCHAR szClassName[];
static wchar_t szClassName[];
DebugInterface *debugger;
MemViewMode mode;
void updateStatusBarText();

View file

@ -3,8 +3,9 @@
#include <math.h>
#include <tchar.h>
#include "util/text/utf8.h"
#include "../resource.h"
#include "../../Core/MemMap.h"
#include "Core/MemMap.h"
#include "../W32Util/Misc.h"
#include "../InputBox.h"
@ -133,7 +134,7 @@ CtrlRegisterList::CtrlRegisterList(HWND _wnd)
rowHeight=g_Config.iFontHeight;
font = CreateFont(rowHeight,g_Config.iFontWidth,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH,"Lucida Console");
DEFAULT_QUALITY,DEFAULT_PITCH,L"Lucida Console");
selecting=false;
selection=0;
category=0;
@ -201,8 +202,8 @@ void CtrlRegisterList::onPaint(WPARAM wParam, LPARAM lParam)
SelectObject(hdc,i==category?currentPen:nullPen);
SelectObject(hdc,i==category?pcBrush:nullBrush);
Rectangle(hdc,width*i/nc,0,width*(i+1)/nc,rowHeight);
const TCHAR *name = cpu->GetCategoryName(i);
TextOut(hdc,width*i/nc,1,name,(int)strlen(name));
const char *name = cpu->GetCategoryName(i);
TextOutA(hdc,width*i/nc,1,name,(int)strlen(name));
}
int numRows=rect.bottom/rowHeight;
@ -259,7 +260,7 @@ void CtrlRegisterList::onPaint(WPARAM wParam, LPARAM lParam)
char temp[256];
int temp_len = sprintf(temp,"%s",cpu->GetRegName(category,i));
SetTextColor(hdc,0x600000);
TextOut(hdc,17,rowY1,temp,temp_len);
TextOutA(hdc,17,rowY1,temp,temp_len);
SetTextColor(hdc,0x000000);
cpu->PrintRegValue(category,i,temp);
@ -267,7 +268,7 @@ void CtrlRegisterList::onPaint(WPARAM wParam, LPARAM lParam)
SetTextColor(hdc, 0x0000FF);
else
SetTextColor(hdc,0x004000);
TextOut(hdc,77,rowY1,temp,(int)strlen(temp));
TextOutA(hdc,77,rowY1,temp,(int)strlen(temp));
} else if (category == 0 && i < REGISTERS_END)
{
char temp[256];
@ -291,13 +292,13 @@ void CtrlRegisterList::onPaint(WPARAM wParam, LPARAM lParam)
}
SetTextColor(hdc,0x600000);
TextOut(hdc,17,rowY1,temp,len);
TextOutA(hdc,17,rowY1,temp,len);
len = sprintf(temp,"%08X",value);
if (changedCat0Regs[i])
SetTextColor(hdc, 0x0000FF);
else
SetTextColor(hdc,0x004000);
TextOut(hdc,77,rowY1,temp,(int)strlen(temp));
TextOutA(hdc,77,rowY1,temp,(int)strlen(temp));
}
/*
@ -385,7 +386,7 @@ void CtrlRegisterList::copyRegisterValue()
{
if (!Core_IsStepping())
{
MessageBox(wnd,"Can't copy register values while the core is running.","Error",MB_OK);
MessageBox(wnd,L"Can't copy register values while the core is running.",L"Error",MB_OK);
return;
}
@ -423,7 +424,7 @@ void CtrlRegisterList::editRegisterValue()
{
if (!Core_IsStepping())
{
MessageBox(wnd,"Can't change registers while the core is running.","Error",MB_OK);
MessageBox(wnd,L"Can't change registers while the core is running.",L"Error",MB_OK);
return;
}
@ -454,10 +455,10 @@ void CtrlRegisterList::editRegisterValue()
char temp[256];
sprintf(temp,"%08X",val);
if (InputBox_GetString(GetModuleHandle(NULL),wnd,"Set new value",temp,temp))
{
if (parseExpression(temp,cpu,val) == false)
{
std::string value = temp;
if (InputBox_GetString(GetModuleHandle(NULL),wnd,L"Set new value",value,value)) {
if (parseExpression(value.c_str(),cpu,val) == false) {
displayExpressionError(wnd);
} else {
switch (reg)

View file

@ -1,7 +1,9 @@
#include "util/text/utf8.h"
#include "DebuggerShared.h"
#include "../InputBox.h"
bool parseExpression(char* exp, DebugInterface* cpu, u32& dest)
bool parseExpression(const char* exp, DebugInterface* cpu, u32& dest)
{
PostfixExpression postfix;
if (cpu->initExpression(exp,postfix) == false) return false;
@ -10,18 +12,18 @@ bool parseExpression(char* exp, DebugInterface* cpu, u32& dest)
void displayExpressionError(HWND hwnd)
{
MessageBox(hwnd,getExpressionError(),"Invalid expression",MB_OK);
MessageBox(hwnd,ConvertUTF8ToWString(getExpressionError()).c_str(),L"Invalid expression",MB_OK);
}
bool executeExpressionWindow(HWND hwnd, DebugInterface* cpu, u32& dest)
{
char expression[1024];
if (InputBox_GetString(GetModuleHandle(NULL), hwnd, "Expression", "",expression) == false)
std::string expression;
if (InputBox_GetString(GetModuleHandle(NULL), hwnd, L"Expression", "",expression) == false)
{
return false;
}
if (parseExpression(expression,cpu,dest) == false)
if (parseExpression(expression.c_str(), cpu, dest) == false)
{
displayExpressionError(hwnd);
return false;

View file

@ -16,4 +16,4 @@ enum { WM_DEB_GOTOWPARAM = WM_USER+2,
bool executeExpressionWindow(HWND hwnd, DebugInterface* cpu, u32& dest);
void displayExpressionError(HWND hwnd);
bool parseExpression(char* exp, DebugInterface* cpu, u32& dest);
bool parseExpression(const char* exp, DebugInterface* cpu, u32& dest);

View file

@ -26,6 +26,7 @@
#include "Core/MIPS/MIPSAnalyst.h"
#include "base/stringutil.h"
#include "util/text/utf8.h"
#ifdef THEMES
#include "Windows/XPTheme.h"
@ -74,7 +75,7 @@ CDisasm::CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *_cpu) : Di
cpu = _cpu;
lastTicks = CoreTiming::GetTicks();
SetWindowText(m_hDlg,_cpu->GetName());
SetWindowText(m_hDlg, ConvertUTF8ToWString(_cpu->GetName()).c_str());
#ifdef THEMES
//if (WTL::CTheme::IsThemingSupported())
//EnableThemeDialogTexture(m_hDlg ,ETDT_ENABLETAB);
@ -109,12 +110,12 @@ CDisasm::CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *_cpu) : Di
ZeroMemory (&tcItem,sizeof (tcItem));
tcItem.mask = TCIF_TEXT;
tcItem.dwState = 0;
tcItem.pszText = "Regs";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Regs";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
tcItem.iImage = 0;
int result1 = TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "Funcs";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Funcs";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
int result2 = TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
ShowWindow(GetDlgItem(m_hDlg, IDC_REGLIST), SW_NORMAL);
ShowWindow(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST), SW_HIDE);
@ -149,7 +150,7 @@ CDisasm::CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *_cpu) : Di
changeSubWindow(SUBWIN_FIRST);
// init status bar
statusBarWnd = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", m_hDlg, IDC_DISASMSTATUSBAR);
statusBarWnd = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"", m_hDlg, IDC_DISASMSTATUSBAR);
if (g_Config.bDisplayStatusBar == false)
{
ShowWindow(statusBarWnd,SW_HIDE);
@ -621,12 +622,12 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
}
case WM_DEB_GOTOADDRESSEDIT:
{
char szBuffer[256];
wchar_t szBuffer[256];
CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg,IDC_DISASMVIEW));
GetWindowText(GetDlgItem(m_hDlg,IDC_ADDRESS),szBuffer,256);
u32 addr;
if (parseExpression(szBuffer,cpu,addr) == false)
if (parseExpression(ConvertWStringToUTF8(szBuffer).c_str(),cpu,addr) == false)
{
displayExpressionError(GetDlgItem(m_hDlg,IDC_ADDRESS));
} else {
@ -649,7 +650,7 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
changeSubWindow(SUBWIN_NEXT);
break;
case WM_DEB_SETSTATUSBARTEXT:
SendMessage(statusBarWnd,WM_SETTEXT,0,lParam);
SendMessage(statusBarWnd,WM_SETTEXT,0,(LPARAM)ConvertUTF8ToWString((const char *)lParam).c_str());
break;
case WM_DEB_GOTOHEXEDIT:
{
@ -710,7 +711,7 @@ void CDisasm::updateThreadLabel(bool clear)
sprintf(label,"Thread: %s",threadList->getCurrentThreadName());
}
SetDlgItemText(m_hDlg, IDC_THREADNAME,label);
SetDlgItemText(m_hDlg, IDC_THREADNAME, ConvertUTF8ToWString(label).c_str());
}
void CDisasm::UpdateSize(WORD width, WORD height)
@ -782,7 +783,7 @@ void CDisasm::SetDebugMode(bool _bDebug)
stackTraceView->loadStackTrace();
updateThreadLabel(false);
SetDlgItemText(m_hDlg, IDC_STOPGO, "Go");
SetDlgItemText(m_hDlg, IDC_STOPGO, L"Go");
EnableWindow( GetDlgItem(hDlg, IDC_STEP), TRUE);
EnableWindow( GetDlgItem(hDlg, IDC_STEPOVER), TRUE);
EnableWindow( GetDlgItem(hDlg, IDC_STEPHLE), TRUE);
@ -802,7 +803,7 @@ void CDisasm::SetDebugMode(bool _bDebug)
{
updateThreadLabel(true);
SetDlgItemText(m_hDlg, IDC_STOPGO, "Stop");
SetDlgItemText(m_hDlg, IDC_STOPGO, L"Stop");
EnableWindow( GetDlgItem(hDlg, IDC_STEP), FALSE);
EnableWindow( GetDlgItem(hDlg, IDC_STEPOVER), FALSE);
EnableWindow( GetDlgItem(hDlg, IDC_STEPHLE), FALSE);
@ -847,8 +848,8 @@ void CDisasm::UpdateDialog(bool _bComplete)
CtrlRegisterList *rl = CtrlRegisterList::getFrom(GetDlgItem(m_hDlg,IDC_REGLIST));
rl->redraw();
// Update Debug Counter
char tempTicks[24];
sprintf(tempTicks, "%lld", CoreTiming::GetTicks()-lastTicks);
wchar_t tempTicks[24];
wsprintf(tempTicks, L"%lld", CoreTiming::GetTicks()-lastTicks);
SetDlgItemText(m_hDlg, IDC_DEBUG_COUNT, tempTicks);
// Update Register Dialog

View file

@ -8,10 +8,11 @@
#include "Windows/main.h"
#include "BreakpointWindow.h"
#include "../../Core/HLE/sceKernelThread.h"
#include "util/text/utf8.h"
typedef struct
{
char* name;
wchar_t *name;
float size;
} ListViewColumn;
@ -20,31 +21,31 @@ enum { BPL_TYPE, BPL_OFFSET, BPL_SIZELABEL, BPL_OPCODE, BPL_CONDITION, BPL_HITS,
enum { SF_ENTRY, SF_ENTRYNAME, SF_CURPC, SF_CUROPCODE, SF_CURSP, SF_FRAMESIZE, SF_COLUMNCOUNT };
ListViewColumn threadColumns[TL_COLUMNCOUNT] = {
{ "Name", 0.20f },
{ "PC", 0.15f },
{ "Entry Point", 0.15f },
{ "Priority", 0.15f },
{ "State", 0.15f },
{ "Wait type", 0.20f }
{ L"Name", 0.20f },
{ L"PC", 0.15f },
{ L"Entry Point", 0.15f },
{ L"Priority", 0.15f },
{ L"State", 0.15f },
{ L"Wait type", 0.20f }
};
ListViewColumn breakpointColumns[BPL_COLUMNCOUNT] = {
{ "Type", 0.12f },
{ "Offset", 0.12f },
{ "Size/Label", 0.18f },
{ "Opcode", 0.28f },
{ "Condition", 0.17f },
{ "Hits", 0.05f },
{ "Enabled", 0.08f }
{ L"Type", 0.12f },
{ L"Offset", 0.12f },
{ L"Size/Label", 0.18f },
{ L"Opcode", 0.28f },
{ L"Condition", 0.17f },
{ L"Hits", 0.05f },
{ L"Enabled", 0.08f }
};
ListViewColumn stackTraceColumns[SF_COLUMNCOUNT] = {
{ "Entry", 0.12f },
{ "Name", 0.24f },
{ "PC", 0.12f },
{ "Opcode", 0.28f },
{ "SP", 0.12f },
{ "Frame Size", 0.12f }
{ L"Entry", 0.12f },
{ L"Name", 0.24f },
{ L"PC", 0.12f },
{ L"Opcode", 0.28f },
{ L"SP", 0.12f },
{ L"Frame Size", 0.12f }
};
const int POPUP_SUBMENU_ID_BREAKPOINTLIST = 5;
@ -73,8 +74,7 @@ void CtrlThreadList::setDialogItem(HWND hwnd)
GetWindowRect(wnd,&rect);
int totalListSize = (rect.right-rect.left-20);
for (int i = 0; i < TL_COLUMNCOUNT; i++)
{
for (int i = 0; i < TL_COLUMNCOUNT; i++) {
lvc.cx = threadColumns[i].size * totalListSize;
lvc.pszText = threadColumns[i].name;
ListView_InsertColumn(wnd, i, &lvc);
@ -201,61 +201,62 @@ void CtrlThreadList::handleNotify(LPARAM lParam)
switch (dispInfo->item.iSubItem)
{
case TL_NAME:
strcpy(stringBuffer,threads[index].name);
wcscpy(stringBuffer, ConvertUTF8ToWString(threads[index].name).c_str());
break;
case TL_PROGRAMCOUNTER:
switch (threads[index].status)
{
case THREADSTATUS_DORMANT:
case THREADSTATUS_DEAD:
sprintf(stringBuffer,"N/A");
wcscpy(stringBuffer, L"N/A");
break;
default:
sprintf(stringBuffer,"0x%08X",threads[index].curPC);
wsprintf(stringBuffer, L"0x%08X",threads[index].curPC);
break;
};
break;
case TL_ENTRYPOINT:
sprintf(stringBuffer,"0x%08X",threads[index].entrypoint);
wsprintf(stringBuffer,L"0x%08X",threads[index].entrypoint);
break;
case TL_PRIORITY:
sprintf(stringBuffer,"%d",threads[index].priority);
wsprintf(stringBuffer,L"%d",threads[index].priority);
break;
case TL_STATE:
switch (threads[index].status)
{
case THREADSTATUS_RUNNING:
strcpy(stringBuffer,"Running");
wcscpy(stringBuffer,L"Running");
break;
case THREADSTATUS_READY:
strcpy(stringBuffer,"Ready");
wcscpy(stringBuffer,L"Ready");
break;
case THREADSTATUS_WAIT:
strcpy(stringBuffer,"Waiting");
wcscpy(stringBuffer,L"Waiting");
break;
case THREADSTATUS_SUSPEND:
strcpy(stringBuffer,"Suspended");
wcscpy(stringBuffer,L"Suspended");
break;
case THREADSTATUS_DORMANT:
strcpy(stringBuffer,"Dormant");
wcscpy(stringBuffer,L"Dormant");
break;
case THREADSTATUS_DEAD:
strcpy(stringBuffer,"Dead");
wcscpy(stringBuffer,L"Dead");
break;
case THREADSTATUS_WAITSUSPEND:
strcpy(stringBuffer,"Waiting/Suspended");
wcscpy(stringBuffer,L"Waiting/Suspended");
break;
default:
strcpy(stringBuffer,"Invalid");
wcscpy(stringBuffer,L"Invalid");
break;
}
break;
case TL_WAITTYPE:
strcpy(stringBuffer,getWaitTypeName(threads[index].waitType));
wcscpy(stringBuffer, ConvertUTF8ToWString(getWaitTypeName(threads[index].waitType)).c_str());
break;
}
if (stringBuffer[0] == 0) strcat(stringBuffer,"Invalid");
if (stringBuffer[0] == 0)
wcscat(stringBuffer,L"Invalid");
dispInfo->item.pszText = stringBuffer;
}
}
@ -568,90 +569,92 @@ void CtrlBreakpointList::handleNotify(LPARAM lParam)
{
case BPL_TYPE:
{
if (isMemory)
{
switch (displayedMemChecks_[index].cond)
{
if (isMemory) {
switch (displayedMemChecks_[index].cond) {
case MEMCHECK_READ:
strcpy(breakpointText, "Read");
breakpointText = L"Read";
break;
case MEMCHECK_WRITE:
strcpy(breakpointText, "Write");
breakpointText = L"Write";
break;
case MEMCHECK_READWRITE:
strcpy(breakpointText, "Read/Write");
breakpointText = L"Read/Write";
break;
}
} else {
strcpy(breakpointText,"Execute");
breakpointText = L"Execute";
}
}
break;
case BPL_OFFSET:
{
if (isMemory)
{
sprintf(breakpointText,"0x%08X",displayedMemChecks_[index].start);
wchar_t temp[256];
if (isMemory) {
wsprintf(temp,L"0x%08X",displayedMemChecks_[index].start);
} else {
sprintf(breakpointText,"0x%08X",displayedBreakPoints_[index].addr);
wsprintf(temp,L"0x%08X",displayedBreakPoints_[index].addr);
}
breakpointText = temp;
}
break;
case BPL_SIZELABEL:
{
if (isMemory)
{
if (isMemory) {
auto mc = displayedMemChecks_[index];
if (mc.end == 0) sprintf(breakpointText,"0x%08X",1);
else sprintf(breakpointText,"0x%08X",mc.end-mc.start);
wchar_t temp[256];
if (mc.end == 0)
wsprintf(temp,L"0x%08X",1);
else
wsprintf(temp,L"0x%08X",mc.end-mc.start);
breakpointText = temp;
} else {
const char* sym = cpu->findSymbolForAddress(displayedBreakPoints_[index].addr);
if (sym != NULL)
{
strcpy(breakpointText,sym);
breakpointText = ConvertUTF8ToWString(sym);
} else {
strcpy(breakpointText,"-");
breakpointText = L"-";
}
}
}
break;
case BPL_OPCODE:
{
if (isMemory)
{
strcpy(breakpointText,"-");
if (isMemory) {
breakpointText = L"-";
} else {
disasm->getOpcodeText(displayedBreakPoints_[index].addr,breakpointText);
char temp[256];
disasm->getOpcodeText(displayedBreakPoints_[index].addr, temp);
breakpointText = ConvertUTF8ToWString(temp);
}
}
break;
case BPL_CONDITION:
{
if (isMemory || displayedBreakPoints_[index].hasCond == false)
{
strcpy(breakpointText,"-");
if (isMemory || displayedBreakPoints_[index].hasCond == false) {
breakpointText = L"-";
} else {
strcpy(breakpointText,displayedBreakPoints_[index].cond.expressionString);
breakpointText = ConvertUTF8ToWString(displayedBreakPoints_[index].cond.expressionString);
}
}
break;
case BPL_HITS:
{
if (isMemory)
{
sprintf(breakpointText,"%d",displayedMemChecks_[index].numHits);
if (isMemory) {
wchar_t temp[256];
wsprintf(temp,L"%d",displayedMemChecks_[index].numHits);
breakpointText = temp;
} else {
strcpy(breakpointText,"-");
breakpointText = L"-";
}
}
break;
case BPL_ENABLED:
{
if (isMemory)
{
strcpy(breakpointText,displayedMemChecks_[index].result & MEMCHECK_BREAK ? "True" : "False");
if (isMemory) {
breakpointText = displayedMemChecks_[index].result & MEMCHECK_BREAK ? L"True" : L"False";
} else {
strcpy(breakpointText,displayedBreakPoints_[index].enabled ? "True" : "False");
breakpointText = displayedBreakPoints_[index].enabled ? L"True" : L"False";
}
}
break;
@ -659,8 +662,9 @@ void CtrlBreakpointList::handleNotify(LPARAM lParam)
return;
}
if (breakpointText[0] == 0) strcat(breakpointText,"Invalid");
dispInfo->item.pszText = breakpointText;
if (breakpointText.empty())
breakpointText = L"Invalid";
dispInfo->item.pszText = &breakpointText[0];
}
}
@ -808,34 +812,37 @@ void CtrlStackTraceView::handleNotify(LPARAM lParam)
switch (dispInfo->item.iSubItem)
{
case SF_ENTRY:
sprintf(stringBuffer,"%08X",frames[index].entry);
wsprintf(stringBuffer,L"%08X",frames[index].entry);
break;
case SF_ENTRYNAME:
{
const char* sym = cpu->findSymbolForAddress(frames[index].entry);
if (sym != NULL)
{
strcpy(stringBuffer,sym);
if (sym != NULL) {
wcscpy(stringBuffer, ConvertUTF8ToWString(sym).c_str());
} else {
strcpy(stringBuffer,"-");
wcscpy(stringBuffer,L"-");
}
}
break;
case SF_CURPC:
sprintf(stringBuffer,"%08X",frames[index].pc);
wsprintf(stringBuffer,L"%08X",frames[index].pc);
break;
case SF_CUROPCODE:
disasm->getOpcodeText(frames[index].pc,stringBuffer);
{
char temp[512];
disasm->getOpcodeText(frames[index].pc,temp);
wcscpy(stringBuffer, ConvertUTF8ToWString(temp).c_str());
}
break;
case SF_CURSP:
sprintf(stringBuffer,"%08X",frames[index].sp);
wsprintf(stringBuffer,L"%08X",frames[index].sp);
break;
case SF_FRAMESIZE:
sprintf(stringBuffer,"%08X",frames[index].stackSize);
wsprintf(stringBuffer,L"%08X",frames[index].stackSize);
break;
}
if (stringBuffer[0] == 0) strcat(stringBuffer,"Invalid");
if (stringBuffer[0] == 0) wcscat(stringBuffer, L"Invalid");
dispInfo->item.pszText = stringBuffer;
}
}

View file

@ -10,7 +10,7 @@ class CtrlThreadList
HWND wnd;
WNDPROC oldProc;
std::vector<DebugThreadInfo> threads;
char stringBuffer[256];
wchar_t stringBuffer[256];
public:
void setDialogItem(HWND hwnd);
@ -29,7 +29,7 @@ class CtrlBreakpointList
WNDPROC oldProc;
std::vector<BreakPoint> displayedBreakPoints_;
std::vector<MemCheck> displayedMemChecks_;
char breakpointText[256];
std::wstring breakpointText;
DebugInterface* cpu;
CtrlDisAsmView* disasm;
@ -63,7 +63,7 @@ class CtrlStackTraceView
std::vector<MIPSStackWalk::StackFrame> frames;
DebugInterface* cpu;
CtrlDisAsmView* disasm;
char stringBuffer[256];
wchar_t stringBuffer[256];
public:
void setCpu(DebugInterface* cpu)

View file

@ -4,13 +4,15 @@
#include <windowsx.h>
#include "..\resource.h"
#include "../../Core/Debugger/SymbolMap.h"
#include "Debugger_MemoryDlg.h"
#include "util/text/utf8.h"
#include "Core/Debugger/SymbolMap.h"
#include "Core/MIPS/MIPSDebugInterface.h" // BAD
#include "Debugger_MemoryDlg.h"
#include "CtrlMemView.h"
#include "DebuggerShared.h"
#include "../../Core/MIPS/MIPSDebugInterface.h" // BAD
RECT CMemoryDlg::slRect;
@ -48,9 +50,10 @@ LRESULT CALLBACK AddressEditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM
CMemoryDlg::CMemoryDlg(HINSTANCE _hInstance, HWND _hParent, DebugInterface *_cpu) : Dialog((LPCSTR)IDD_MEMORY, _hInstance,_hParent)
{
cpu = _cpu;
TCHAR temp[256];
sprintf(temp,"Memory Viewer - %s",cpu->GetName());
wchar_t temp[256];
wsprintf(temp,L"Memory Viewer - %s",cpu->GetName());
SetWindowText(m_hDlg,temp);
ShowWindow(m_hDlg,SW_HIDE);
CtrlMemView *ptr = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));
ptr->setDebugger(_cpu);
@ -164,12 +167,11 @@ BOOL CMemoryDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
case WM_DEB_GOTOADDRESSEDIT:
{
CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));
char temp[256];
wchar_t temp[256];
u32 addr;
GetWindowText(GetDlgItem(m_hDlg,IDC_ADDRESS),temp,255);
if (parseExpression(temp,cpu,addr) == false)
{
if (parseExpression(ConvertWStringToUTF8(temp).c_str(),cpu,addr) == false) {
displayExpressionError(m_hDlg);
} else {
mv->gotoAddr(addr);

View file

@ -4,6 +4,7 @@
#include <windowsx.h>
#include <commctrl.h>
#include "Windows/resource.h"
#include "util/text/utf8.h"
#include "Core/Debugger/SymbolMap.h"
#include "Windows/Debugger/Debugger_VFPUDlg.h"
@ -17,12 +18,13 @@ CVFPUDlg *vfpudlg;
CVFPUDlg::CVFPUDlg(HINSTANCE _hInstance, HWND _hParent, DebugInterface *cpu_) : Dialog((LPCSTR)IDD_VFPU, _hInstance,_hParent)
{
cpu = cpu_;
TCHAR temp[256];
sprintf(temp,"VFPU - %s",cpu->GetName());
wchar_t temp[256];
wsprintf(temp,L"VFPU - %s",ConvertUTF8ToWString(cpu->GetName()).c_str());
SetWindowText(m_hDlg,temp);
ShowWindow(m_hDlg,SW_HIDE);
font = CreateFont(12,0,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,
"Lucida Console");
L"Lucida Console");
HWND tabs = GetDlgItem(m_hDlg, IDC_TABDATATYPE);
@ -30,24 +32,24 @@ CVFPUDlg::CVFPUDlg(HINSTANCE _hInstance, HWND _hParent, DebugInterface *cpu_) :
ZeroMemory (&tcItem,sizeof (tcItem));
tcItem.mask = TCIF_TEXT;
tcItem.dwState = 0;
tcItem.pszText = "Float";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Float";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
tcItem.iImage = 0;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "HalfFloat";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"HalfFloat";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "Hex";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Hex";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "Bytes";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Bytes";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "Shorts";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Shorts";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
tcItem.pszText = "Ints";
tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
tcItem.pszText = L"Ints";
tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;
TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
mode=0;
Size();
@ -146,7 +148,7 @@ BOOL CVFPUDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
Rectangle(hdc, 0, my, xStart, my+rowHeight);
char temp[256];
int temp_len = sprintf_s(temp, "M%i00", matrix);
TextOut(hdc,3,my+2,temp,temp_len);
TextOutA(hdc,3,my+2,temp,temp_len);
Rectangle(hdc,xStart,my+rowHeight,xStart+columnWidth*4,my+5*rowHeight);
for (int column = 0; column<4; column++)
@ -156,11 +158,11 @@ BOOL CVFPUDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
Rectangle(hdc, x, y, x + columnWidth, y+rowHeight);
temp_len = sprintf_s(temp, "R%i0%i", matrix, column);
TextOut(hdc,x+3,y+2,temp,temp_len);
TextOutA(hdc,x+3,y+2,temp,temp_len);
Rectangle(hdc, 0, y+rowHeight*(column+1), xStart, y+rowHeight*(column+2));
temp_len = sprintf_s(temp, "C%i%i0", matrix, column);
TextOut(hdc,3,y+rowHeight*(column+1)+1,temp,temp_len);
TextOutA(hdc,3,y+rowHeight*(column+1)+1,temp,temp_len);
y+=rowHeight;
@ -176,7 +178,7 @@ BOOL CVFPUDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
default:temp_len = sprintf_s(temp,"%f",val); break;
}
TextOut(hdc,x+3,y+2,temp,temp_len);
TextOutA(hdc,x+3,y+2,temp,temp_len);
y+=rowHeight;
}
}

View file

@ -1,29 +1,34 @@
#include "Common/CommonWindows.h"
#include "Windows/InputBox.h"
#include "Windows/resource.h"
#include "util/text/utf8.h"
static TCHAR textBoxContents[256];
static TCHAR out[256];
static TCHAR windowTitle[256];
static std::wstring textBoxContents;
static std::wstring out;
static std::wstring windowTitle;
static bool defaultSelected;
static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg,IDC_INPUTBOX),textBoxContents);
SetWindowText(hDlg, windowTitle);
SetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), textBoxContents.c_str());
SetWindowText(hDlg, windowTitle.c_str());
if (defaultSelected == false) PostMessage(GetDlgItem(hDlg,IDC_INPUTBOX),EM_SETSEL,-1,-1);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetWindowText(GetDlgItem(hDlg,IDC_INPUTBOX),out,255);
EndDialog(hDlg,IDOK);
{
wchar_t temp[256];
GetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), temp, 255);
out = temp;
}
EndDialog(hDlg, IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
default:
@ -37,68 +42,65 @@ void InputBoxFunc()
}
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected)
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultValue, std::string &outvalue, bool selected)
{
defaultSelected = selected;
if (defaultvalue && strlen(defaultvalue)<255)
strcpy(textBoxContents,defaultvalue);
if (defaultValue.size() < 255)
textBoxContents = ConvertUTF8ToWString(defaultValue);
else
strcpy(textBoxContents,"");
textBoxContents = L"";
if (title != NULL)
strcpy(windowTitle,title);
windowTitle = title;
else
strcpy(windowTitle,"");
windowTitle = L"";
if (IDOK==DialogBox(hInst,(LPCSTR)IDD_INPUTBOX,hParent,InputBoxFunc))
{
strcpy(outvalue,out);
if (IDOK == DialogBox(hInst, (LPCWSTR)IDD_INPUTBOX, hParent, InputBoxFunc)) {
outvalue = ConvertWStringToUTF8(out);
return true;
}
else
return false;
}
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, const TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength)
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultValue, std::string &outvalue)
{
const char *defaultTitle = "Input value";
const wchar_t *defaultTitle = L"Input value";
defaultSelected = true;
if (defaultvalue && strlen(defaultvalue)<255)
strcpy(textBoxContents,defaultvalue);
textBoxContents = ConvertUTF8ToWString(defaultValue);
if (title && wcslen(title) <= 0)
windowTitle = defaultTitle;
else if (title && wcslen(title) < 255)
windowTitle = title;
else
strcpy(textBoxContents,"");
windowTitle = defaultTitle;
if(title && strlen(title) <= 0)
strcpy(windowTitle, defaultTitle);
else if(title && strlen(title) < 255)
strcpy(windowTitle, title);
else
strcpy(windowTitle, defaultTitle);
if (IDOK==DialogBox(hInst,(LPCSTR)IDD_INPUTBOX,hParent,InputBoxFunc))
{
strncpy(outvalue, out, outlength);
if (IDOK == DialogBox(hInst, (LPCWSTR)IDD_INPUTBOX, hParent, InputBoxFunc)) {
outvalue = ConvertWStringToUTF8(out);
return true;
}
else
return false;
}
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, TCHAR *title, u32 defaultvalue, u32 &outvalue)
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, const wchar_t *title, u32 defaultvalue, u32 &outvalue)
{
sprintf(textBoxContents,"%08x",defaultvalue);
INT_PTR value = DialogBox(hInst,(LPCSTR)IDD_INPUTBOX,hParent,InputBoxFunc);
wchar_t temp[256];
wsprintf(temp,L"%08x",defaultvalue);
textBoxContents = temp;
INT_PTR value = DialogBox(hInst, (LPCWSTR)IDD_INPUTBOX, hParent, InputBoxFunc);
if (value == IDOK)
{
sscanf(out,"%08x",&outvalue);
wscanf(out.c_str(),"%08x",&outvalue);
return true;
}
else
{
out[0]=0;
outvalue = 0;
return false;
}
}

View file

@ -3,6 +3,9 @@
#include "Globals.h"
#include "Common/CommonWindows.h"
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected = true);
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, const TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength);
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, TCHAR *title, u32 defaultvalue, u32 &outvalue);
// All I/O is in UTF-8
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultvalue, std::string &outvalue, bool selected);
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultvalue, std::string &outvalue);
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, const wchar_t *title, u32 defaultvalue, u32 &outvalue);

View file

@ -76,7 +76,7 @@ std::map<int, int> windowsTransTable = InitConstMap<int, int>
(VK_RSHIFT, NKCODE_SHIFT_RIGHT)
(VK_LMENU, NKCODE_ALT_LEFT)
(VK_RMENU, NKCODE_ALT_RIGHT)
(VK_BACK, NKCODE_BACK)
(VK_BACK, NKCODE_DEL) // yes! http://stackoverflow.com/questions/4886858/android-edittext-deletebackspace-key-event
(VK_SPACE, NKCODE_SPACE)
(VK_ESCAPE, NKCODE_ESCAPE)
(VK_UP, NKCODE_DPAD_UP)

View file

@ -206,12 +206,12 @@ void GL_Shutdown() {
if (hRC) {
// Are We Able To Release The DC And RC Contexts?
if (!wglMakeCurrent(NULL,NULL)) {
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
MessageBox(NULL,L"Release Of DC And RC Failed.", L"SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
// Are We Able To Delete The RC?
if (!wglDeleteContext(hRC)) {
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
MessageBox(NULL,L"Release Rendering Context Failed.", L"SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hRC = NULL;
}
@ -219,7 +219,7 @@ void GL_Shutdown() {
if (hDC && !ReleaseDC(hWnd,hDC)) {
DWORD err = GetLastError();
if (err != ERROR_DC_NOT_FOUND) {
MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
MessageBox(NULL,L"Release Device Context Failed.", L"SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hDC = NULL;
}

View file

@ -27,21 +27,21 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -18,7 +18,7 @@ Dialog::~Dialog()
void Dialog::Create()
{
m_hDlg = CreateDialogParam(m_hInstance, (LPCSTR)m_hResource, m_hParent, DlgProcStatic, (LPARAM)this);
m_hDlg = CreateDialogParam(m_hInstance, (LPCWSTR)m_hResource, m_hParent, DlgProcStatic, (LPARAM)this);
SetWindowLongPtr(m_hDlg, GWLP_USERDATA, (LONG_PTR)this);
}

View file

@ -12,7 +12,7 @@ protected:
virtual BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
MessageBox(0,"WTF? Pure Call",0,0);
MessageBox(0,L"WTF? Pure Call",0,0);
return 0;
}
static INT_PTR CALLBACK DlgProcStatic(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -1,6 +1,7 @@
#include "stdafx.h"
#include <WinUser.h>
#include "Misc.h"
#include "util/text/utf8.h"
namespace W32Util
{
@ -57,24 +58,23 @@ namespace W32Util
sprintf(out,"%3.1f %s",f,sizes[s]);
}
BOOL CopyTextToClipboard(HWND hwnd, const TCHAR *text)
{
BOOL CopyTextToClipboard(HWND hwnd, const char *text) {
std::wstring wtext = ConvertUTF8ToWString(text);
OpenClipboard(hwnd);
EmptyClipboard();
HANDLE hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (strlen(text) + 1) * sizeof(TCHAR));
if (hglbCopy == NULL)
{
HANDLE hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (wtext.size() + 1) * sizeof(wchar_t));
if (hglbCopy == NULL) {
CloseClipboard();
return FALSE;
}
// Lock the handle and copy the text to the buffer.
TCHAR *lptstrCopy = (TCHAR *)GlobalLock(hglbCopy);
strcpy(lptstrCopy, text);
lptstrCopy[strlen(text)] = (TCHAR) 0; // null character
wchar_t *lptstrCopy = (wchar_t *)GlobalLock(hglbCopy);
wcscpy(lptstrCopy, wtext.c_str());
lptstrCopy[wtext.size()] = (wchar_t) 0; // null character
GlobalUnlock(hglbCopy);
SetClipboardData(CF_TEXT,hglbCopy);
SetClipboardData(CF_TEXT, hglbCopy);
CloseClipboard();
return TRUE;
}

View file

@ -7,6 +7,6 @@ namespace W32Util
void CenterWindow(HWND hwnd);
HBITMAP CreateBitmapFromARGB(HWND someHwnd, DWORD *image, int w, int h);
void NiceSizeFormat(size_t size, char *out);
BOOL CopyTextToClipboard(HWND hwnd, const TCHAR *text);
BOOL CopyTextToClipboard(HWND hwnd, const char *text);
void MakeTopMost(HWND hwnd, bool topMost);
}

View file

@ -1,6 +1,7 @@
#include "stdafx.h"
#include "Misc.h"
#include "PropertySheet.h"
#include "util/text/utf8.h"
#include <commctrl.h>
@ -82,7 +83,7 @@ namespace W32Util
if (icon)
sheet.dwFlags |= PSH_USEHICON;
sheet.pszCaption = title.c_str();
sheet.pszCaption = ConvertUTF8ToWString(title).c_str();
sheet.nPages = (UINT)list.size();
sheet.phpage = pages;
sheet.nStartPage = startpage;

View file

@ -3,7 +3,9 @@
#include "stdafx.h"
#include "shlobj.h"
#include "util/text/utf8.h"
#include "ShellUtil.h"
#include "CommDlg.h"
#include <shlobj.h>
#include <commdlg.h>
@ -15,17 +17,17 @@ namespace W32Util
BROWSEINFO info;
memset(&info,0,sizeof(info));
info.hwndOwner = parent;
info.lpszTitle = title;
info.lpszTitle = ConvertUTF8ToWString(title).c_str();
info.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
//info.pszDisplayName
LPCITEMIDLIST idList = SHBrowseForFolder(&info);
char temp[MAX_PATH];
wchar_t temp[MAX_PATH];
SHGetPathFromIDList(idList, temp);
if (strlen(temp))
if (wcslen(temp))
{
return temp;
return ConvertWStringToUTF8(temp);
}
else
return "";
@ -38,33 +40,30 @@ namespace W32Util
const char *_pInitialFolder,const char *_pFilter,const char *_pExtension,
std::string& _strFileName)
{
char szFile [MAX_PATH+1];
char szFileTitle [MAX_PATH+1];
strcpy (szFile,"");
strcpy (szFileTitle,"");
wchar_t szFile [MAX_PATH+1] = {0};
wchar_t szFileTitle [MAX_PATH+1] = {0};
OPENFILENAME ofn;
ZeroMemory (&ofn,sizeof (ofn));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.lpstrInitialDir = _pInitialFolder;
ofn.lpstrFilter = _pFilter;
ofn.lpstrInitialDir = ConvertUTF8ToWString(_pInitialFolder).c_str();
ofn.lpstrFilter = ConvertUTF8ToWString(_pFilter).c_str();
ofn.nMaxFile = sizeof (szFile);
ofn.lpstrFile = szFile;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof (szFileTitle);
ofn.lpstrDefExt = _pExtension;
ofn.lpstrDefExt = ConvertUTF8ToWString(_pExtension).c_str();
ofn.hwndOwner = _hParent;
ofn.Flags = OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_HIDEREADONLY;
if (_strFileName.size () != 0)
ofn.lpstrFile = (char *)_strFileName.c_str();
ofn.lpstrFile = (wchar_t *)_strFileName.c_str();
if (((_bLoad)?GetOpenFileName (&ofn):GetSaveFileName (&ofn)))
if (((_bLoad) ? GetOpenFileName(&ofn) : GetSaveFileName (&ofn)))
{
_strFileName = ofn.lpstrFile;
_strFileName = ConvertWStringToUTF8(ofn.lpstrFile);
return true;
}
else
@ -74,46 +73,43 @@ namespace W32Util
std::vector<std::string> BrowseForFileNameMultiSelect(bool _bLoad, HWND _hParent, const char *_pTitle,
const char *_pInitialFolder,const char *_pFilter,const char *_pExtension)
{
char szFile [MAX_PATH+1+2048*2];
char szFileTitle [MAX_PATH+1];
strcpy (szFile,"");
strcpy (szFileTitle,"");
wchar_t szFile [MAX_PATH+1+2048*2] = {0};
wchar_t szFileTitle [MAX_PATH+1] = {0};
OPENFILENAME ofn;
ZeroMemory (&ofn,sizeof (ofn));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.lpstrInitialDir = _pInitialFolder;
ofn.lpstrFilter = _pFilter;
ofn.lpstrInitialDir = ConvertUTF8ToWString(_pInitialFolder).c_str();
ofn.lpstrFilter = ConvertUTF8ToWString(_pFilter).c_str();
ofn.nMaxFile = sizeof (szFile);
ofn.lpstrFile = szFile;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof (szFileTitle);
ofn.lpstrDefExt = _pExtension;
ofn.lpstrDefExt = ConvertUTF8ToWString(_pExtension).c_str();
ofn.hwndOwner = _hParent;
ofn.Flags = OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT ;
std::vector<std::string> files;
if (((_bLoad) ? GetOpenFileName (&ofn):GetSaveFileName (&ofn)))
if (((_bLoad) ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn)))
{
std::string directory = ofn.lpstrFile;
char *temp = ofn.lpstrFile;
char *oldtemp = temp;
temp+=strlen(temp)+1;
std::string directory = ConvertWStringToUTF8(ofn.lpstrFile);
wchar_t *temp = ofn.lpstrFile;
wchar_t *oldtemp = temp;
temp += wcslen(temp)+1;
if (*temp==0)
{
//we only got one file
files.push_back(std::string(oldtemp));
files.push_back(ConvertWStringToUTF8(oldtemp));
}
else
{
while (*temp)
{
files.push_back(directory+"\\"+std::string(temp));
temp+=strlen(temp)+1;
files.push_back(directory+"\\"+ConvertWStringToUTF8(temp));
temp += wcslen(temp)+1;
}
}
return files;

View file

@ -17,9 +17,21 @@
#include <algorithm>
// For shell links
#include "windows.h"
#include "winnls.h"
#include "shobjidl.h"
#include "objbase.h"
#include "objidl.h"
#include "shlguid.h"
#include "shlobj.h"
// native stuff
#include "base/NativeApp.h"
#include "file/file_util.h"
#include "input/input_state.h"
#include "input/keycodes.h"
#include "util/text/utf8.h"
#include "Core/Core.h"
#include "Core/Config.h"
@ -43,7 +55,6 @@
#include "Core/Debugger/SymbolMap.h"
#include "Common/StringUtils.h"
#include "file/file_util.h"
#include "main.h"
static PMixer *curMixer;
@ -289,5 +300,77 @@ void WindowsHost::UpdateConsolePosition()
bool WindowsHost::InputBoxGetString(char *title, const char *defaultValue, char *outValue, size_t outLength)
{
return InputBox_GetString(MainWindow::GetHInstance(), MainWindow::GetHWND(), title, defaultValue, outValue, outLength);
std::string out;
if (InputBox_GetString(MainWindow::GetHInstance(), MainWindow::GetHWND(), ConvertUTF8ToWString(title).c_str(), defaultValue, out)) {
strcpy(outValue, out.c_str());
return true;
} else {
return false;
}
}
// http://msdn.microsoft.com/en-us/library/aa969393.aspx
HRESULT CreateLink(LPCWSTR lpszPathObj, LPCWSTR lpszArguments, LPCWSTR lpszPathLink, LPCWSTR lpszDesc) {
HRESULT hres;
IShellLink* psl;
CoInitialize(0);
// Get a pointer to the IShellLink interface. It is assumed that CoInitialize
// has already been called.
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres)) {
IPersistFile* ppf;
// Set the path to the shortcut target and add the description.
psl->SetPath(lpszPathObj);
psl->SetArguments(lpszArguments);
psl->SetDescription(lpszDesc);
// Query IShellLink for the IPersistFile interface, used for saving the
// shortcut in persistent storage.
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres)) {
// Save the link by calling IPersistFile::Save.
hres = ppf->Save(lpszPathLink, TRUE);
ppf->Release();
}
psl->Release();
}
CoUninitialize();
return hres;
}
bool WindowsHost::CreateDesktopShortcut(std::string argumentPath, std::string gameTitle) {
// TODO: not working correctly
return false;
// Get the desktop folder
wchar_t *pathbuf = new wchar_t[MAX_PATH + gameTitle.size() + 100];
SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, pathbuf);
// Sanitize the game title for banned characters.
const char bannedChars[] = "<>:\"/\\|?*";
for (size_t i = 0; i < gameTitle.size(); i++) {
for (int c = 0; c < strlen(bannedChars); c++) {
if (gameTitle[i] == bannedChars[c]) {
gameTitle[i] = '_';
break;
}
}
}
wcscat(pathbuf, L"\\");
wcscat(pathbuf, ConvertUTF8ToWString(gameTitle).c_str());
wchar_t module[MAX_PATH];
GetModuleFileName(NULL, module, MAX_PATH);
CreateLink(module, ConvertUTF8ToWString(argumentPath).c_str(), pathbuf, ConvertUTF8ToWString(gameTitle).c_str());
delete [] pathbuf;
return false;
}

View file

@ -55,6 +55,9 @@ public:
void SaveSymbolMap();
void SetWindowTitle(const char *message);
virtual bool CanCreateShortcut() {return false;} // Turn on when fixed
virtual bool CreateDesktopShortcut(std::string argumentPath, std::string title);
bool InputBoxGetString(char *title, const char *defaultValue, char *outValue, size_t outlength);
std::shared_ptr<KeyboardDevice> keyboard;

View file

@ -19,7 +19,6 @@
// It's improving slowly, though. :)
#include "Common/CommonWindows.h"
#include <tchar.h>
#include <map>
@ -29,8 +28,11 @@
#include "shellapi.h"
#include "commctrl.h"
#include "i18n/i18n.h"
#include "input/input_state.h"
#include "input/keycodes.h"
#include "util/text/utf8.h"
#include "Core/Debugger/SymbolMap.h"
#include "Windows/OpenGLBase.h"
#include "Windows/Debugger/Debugger_Disasm.h"
@ -56,13 +58,11 @@
#include "Windows/W32Util/Misc.h"
#include "GPU/GPUInterface.h"
#include "GPU/GPUState.h"
#include "native/image/png_load.h"
#include "GPU/GLES/TextureScaler.h"
#include "GPU/GLES/TextureCache.h"
#include "GPU/GLES/Framebuffer.h"
#include "ControlMapping.h"
#include "UI/OnScreenDisplay.h"
#include "i18n/i18n.h"
#ifdef THEMES
#include "XPTheme.h"
@ -138,7 +138,7 @@ namespace MainWindow
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_PPSSPP);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wcex.lpszMenuName = (LPCSTR)IDR_MENU1;
wcex.lpszMenuName = (LPCWSTR)IDR_MENU1;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = (HICON)LoadImage(hInstance, (LPCTSTR)IDI_PPSSPP, IMAGE_ICON, 16,16,LR_SHARED);
RegisterClassEx(&wcex);
@ -321,12 +321,12 @@ namespace MainWindow
u32 style = WS_OVERLAPPEDWINDOW;
hwndMain = CreateWindowEx(0,szWindowClass, "", style,
hwndMain = CreateWindowEx(0,szWindowClass, L"", style,
rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL);
if (!hwndMain)
return FALSE;
hwndDisplay = CreateWindowEx(0, szDisplayClass, TEXT(""), WS_CHILD | WS_VISIBLE,
hwndDisplay = CreateWindowEx(0, szDisplayClass, L"", WS_CHILD | WS_VISIBLE,
rcOrig.left, rcOrig.top, rcOrig.right - rcOrig.left, rcOrig.bottom - rcOrig.top, hwndMain, 0, hInstance, 0);
if (!hwndDisplay)
return FALSE;
@ -1045,7 +1045,7 @@ namespace MainWindow
break;
case ID_OPTIONS_CONTROLS:
MessageBox(hWnd, "Control mapping has been moved to the in-window Settings menu.\n", "Sorry", 0);
MessageBox(hWnd, L"Control mapping has been moved to the in-window Settings menu.\n", L"Sorry", 0);
break;
case ID_EMULATION_SOUND:
@ -1073,11 +1073,15 @@ namespace MainWindow
break;
case ID_HELP_OPENWEBSITE:
ShellExecute(NULL, "open", "http://www.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, L"open", L"http://www.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
break;
case ID_HELP_BUYGOLD:
ShellExecute(NULL, L"open", L"http://central.ppsspp.org/buygold", NULL, NULL, SW_SHOWNORMAL);
break;
case ID_HELP_OPENFORUM:
ShellExecute(NULL, "open", "http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, L"open", L"http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
break;
case ID_HELP_ABOUT:
@ -1091,7 +1095,7 @@ namespace MainWindow
break;
default:
MessageBox(hwndMain,"Unimplemented","Sorry",0);
MessageBox(hwndMain, L"Unimplemented", L"Sorry",0);
break;
}
}
@ -1161,7 +1165,7 @@ namespace MainWindow
HDROP hdrop = (HDROP)wParam;
int count = DragQueryFile(hdrop,0xFFFFFFFF,0,0);
if (count != 1) {
MessageBox(hwndMain,"You can only load one file at a time","Error",MB_ICONINFORMATION);
MessageBox(hwndMain,L"You can only load one file at a time",L"Error",MB_ICONINFORMATION);
}
else
{
@ -1175,7 +1179,7 @@ namespace MainWindow
Update();
NativeMessageReceived("boot", filename);
NativeMessageReceived("boot", ConvertWStringToUTF8(filename).c_str());
}
}
break;
@ -1403,7 +1407,7 @@ namespace MainWindow
HMENU menu = GetMenu(GetHWND());
const char* pauseMenuText = (Core_IsStepping() || globalUIState != UISTATE_INGAME) ? "Run\tF8" : "Pause\tF8";
const wchar_t * pauseMenuText = (Core_IsStepping() || globalUIState != UISTATE_INGAME) ? L"Run\tF8" : L"Pause\tF8";
ModifyMenu(menu, ID_TOGGLE_PAUSE, MF_BYCOMMAND | MF_STRING, ID_TOGGLE_PAUSE, pauseMenuText);
UINT ingameEnable = globalUIState == UISTATE_INGAME ? MF_ENABLED : MF_GRAYED;
@ -1437,7 +1441,7 @@ namespace MainWindow
HWND versionBox = GetDlgItem(hDlg, IDC_VERSION);
char temp[256];
sprintf(temp, "PPSSPP %s", PPSSPP_GIT_VERSION);
SetWindowText(versionBox, temp);
SetWindowTextA(versionBox, temp);
}
return TRUE;

View file

@ -31,10 +31,10 @@ static int LoadXInputDLL() {
}
version = (1 << 16) | 4;
s_pXInputDLL = LoadLibrary( "XInput1_4.dll" ); // 1.4 Ships with Windows 8.
s_pXInputDLL = LoadLibrary( L"XInput1_4.dll" ); // 1.4 Ships with Windows 8.
if (!s_pXInputDLL) {
version = (1 << 16) | 3;
s_pXInputDLL = LoadLibrary( "XInput1_3.dll" ); // 1.3 Ships with Vista and Win7, can be installed as a restributable component.
s_pXInputDLL = LoadLibrary( L"XInput1_3.dll" ); // 1.3 Ships with Vista and Win7, can be installed as a restributable component.
}
if (!s_pXInputDLL) {
return -1;

View file

@ -19,6 +19,7 @@
#include "file/vfs.h"
#include "file/zip_read.h"
#include "util/text/utf8.h"
#include "Core/Config.h"
#include "Core/SaveState.h"
@ -49,9 +50,8 @@
CDisasm *disasmWindow[MAX_CPUCOUNT] = {0};
CMemoryDlg *memoryWindow[MAX_CPUCOUNT] = {0};
void LaunchBrowser(const char *url)
{
ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
void LaunchBrowser(const char *url) {
ShellExecute(NULL, L"open", ConvertUTF8ToWString(url).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
std::string System_GetName() {
@ -107,7 +107,7 @@ int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLin
timeBeginPeriod(1);
MainWindow::Init(_hInstance);
g_hPopupMenus = LoadMenu(_hInstance, (LPCSTR)IDR_POPUPMENUS);
g_hPopupMenus = LoadMenu(_hInstance, (LPCWSTR)IDR_POPUPMENUS);
MainWindow::Show(_hInstance, iCmdShow);

Binary file not shown.

Binary file not shown.

View file

@ -27,27 +27,27 @@
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -57,24 +57,24 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -28,24 +28,24 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -22,6 +22,7 @@
#include "Common/CommonWindows.h"
#include <io.h>
#include "base/logging.h"
#include "gfx_es2/gl_state.h"
#include "gfx/gl_common.h"
#include "gfx/gl_lost_manager.h"
@ -48,13 +49,13 @@ HWND CreateHiddenWindow()
LoadCursor(NULL, IDC_ARROW),
(HBRUSH) GetStockObject(BLACK_BRUSH),
NULL,
"PPSSPPHeadless",
_T("PPSSPPHeadless"),
NULL,
};
RegisterClassEx(&wndClass);
DWORD style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_POPUP;
return CreateWindowEx(0, "PPSSPPHeadless", "PPSSPPHeadless", style, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, NULL, NULL);
return CreateWindowEx(0, _T("PPSSPPHeadless"), _T("PPSSPPHeadless"), style, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, NULL, NULL);
}
void SetVSync(int value)
@ -89,7 +90,7 @@ void WindowsHeadlessHost::LoadNativeAssets()
void WindowsHeadlessHost::SendDebugOutput(const std::string &output)
{
fwrite(output.data(), sizeof(char), output.length(), out);
OutputDebugString(output.c_str());
OutputDebugStringUTF8(output.c_str());
}
void WindowsHeadlessHost::SendDebugScreenshot(const u8 *pixbuf, u32 w, u32 h)

2
native

@ -1 +1 @@
Subproject commit cd162639ed50a3aa4fcec79d39ea59fd00741f3a
Subproject commit a038f612bdd02f44eee2177194d0a83d641bd41e

View file

@ -29,27 +29,27 @@
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">