File: win32_wrapper.h

package info (click to toggle)
scummvm 2.9.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 450,268 kB
  • sloc: cpp: 4,297,604; asm: 28,322; python: 12,901; sh: 11,219; java: 8,477; xml: 7,843; perl: 2,633; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (147 lines) | stat: -rw-r--r-- 4,582 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef PLATFORM_SDL_WIN32_WRAPPER_H
#define PLATFORM_SDL_WIN32_WRAPPER_H

#include "common/scummsys.h"
#include "common/str.h"

HRESULT SHGetFolderPathFunc(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath);

// Helper functions
namespace Win32 {

/**
 * Gets the full path to the ScummVM application data directory
 * in the user's profile and creates it if it doesn't exist.
 *
 * @param profileDirectory MAX_PATH sized output array
 *
 * @return True if the user's profile directory was found, false if
 * it was not.
 *
 * @note if the user's profile directory is found but the "ScummVM"
 * subdirectory can't be created then this function calls error().
 */
bool getApplicationDataDirectory(TCHAR *profileDirectory);

/**
 * Gets the full path to the directory that the currently executing
 * process resides in.
 *
 * @param processDirectory output array
 * @param size size in characters of output array
 */
void getProcessDirectory(TCHAR *processDirectory, DWORD size);

/**
 * Checks if the current running Windows version is greater or equal to the specified version.
 * See: https://docs.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version
 *
 * @param majorVersion The major version number (x.0)
 * @param minorVersion The minor version number (0.x)
 */
bool confirmWindowsVersion(int majorVersion, int minorVersion);

/**
 * Moves a file within the same volume. Replaces any existing file.
 */
bool moveFile(const Common::String &src, const Common::String &dst);

/**
 * Returns true if the drive letter is a CDROM
 *
 * @param driveLetter The drive letter to test
 */
bool isDriveCD(char driveLetter);

/**
 * Converts a C string into a Windows wide-character string.
 * Used to interact with Win32 Unicode APIs with no ANSI fallback.
 * If UNICODE is defined then the conversion will use code page CP_UTF8,
 * otherwise CP_ACP will be used.
 *
 * @param s Source string
 * @return Converted string
 *
 * @note Return value must be freed by the caller.
 */
wchar_t *ansiToUnicode(const char *s);
/**
 * Converts a Windows wide-character string into a C string.
 * Used to interact with Win32 Unicode APIs with no ANSI fallback.
 * If UNICODE is defined then the conversion will use code page CP_UTF8,
 * otherwise CP_ACP will be used.
 *
 * @param s Source string
 * @return Converted string
 *
 * @note Return value must be freed by the caller.
 */
char *unicodeToAnsi(const wchar_t *s);

/**
 * Converts a Common::String to a TCHAR array for the purpose of passing to
 * a Windows API or CRT call. If UNICODE is defined then the string will be
 * converted from UTF8 to wide characters, otherwise the character array
 * will be copied with no conversion.
 *
 * @param s Source string
 * @return Converted string
 *
 * @note Return value must be freed by the caller.
 */
TCHAR *stringToTchar(const Common::String& s);

/**
 * Converts a TCHAR array returned from a Windows API or CRT call to a Common::String.
 * If UNICODE is defined then the wide character array will be converted to UTF8,
 * otherwise the char array will be copied with no conversion.
 *
 * @param s Source string
 * @return Converted string
 */
Common::String tcharToString(const TCHAR *s);

#ifdef UNICODE
/**
 * Returns command line arguments in argc / argv format in UTF8.
 *
 * @param argc argument count
 * @return argument array
 *
 * @note Return value must be freed by the caller with freeArgvUtf8()
 */
char **getArgvUtf8(int *argc);

/**
 * Frees an argument array created by getArgvUtf8()
 *
 * @param argc argument count in argv
 * @param argv argument array created by getArgvUtf8()
 */
void freeArgvUtf8(int argc, char **argv);
#endif

} // End of namespace Win32

#endif