34 #define STDOUT_LOG_FILE_NAME "openmsx_system/openmsx.stdout"
35 #define STDERR_LOG_FILE_NAME "openmsx_system/openmsx.stderr"
44 int setenv(
const char *name,
const char *value,
int overwrite);
45 int setenv(
const char *name,
const char *value,
int overwrite)
48 char* oldvalue = getenv(name);
53 return _putenv_s(name, value);
59 void EnableConsoleOutput()
61 if (AttachConsole(ATTACH_PARENT_PROCESS))
64 freopen_s(&pCout,
"CONOUT$",
"w", stdout);
71 static void initializeSDL()
74 #ifndef SDL_JOYSTICK_DISABLED
75 flags |= SDL_INIT_JOYSTICK;
78 flags |= SDL_INIT_NOPARACHUTE;
80 if (SDL_Init(flags) < 0) {
81 throw FatalError(
"Couldn't init SDL: ", SDL_GetError());
89 setenv(
"FREETYPE_PROPERTIES",
"truetype:interpreter-version=35", 0);
92 static int main(
int argc,
char **argv)
95 ad_printf(
"Redirecting stdout to %s and stderr to %s\n",
96 STDOUT_LOG_FILE_NAME, STDERR_LOG_FILE_NAME);
98 if (!freopen(STDOUT_LOG_FILE_NAME,
"a", stdout)) {
99 ad_printf(
"Couldn't redirect stdout to logfile, aborting\n");
100 std::cerr <<
"Couldn't redirect stdout to "
101 STDOUT_LOG_FILE_NAME
"\n";
104 if (!freopen(STDERR_LOG_FILE_NAME,
"a", stderr)) {
105 ad_printf(
"Couldn't redirect stderr to logfile, aborting\n");
106 std::cout <<
"Couldn't redirect stderr to "
107 STDERR_LOG_FILE_NAME
"\n";
111 std::string msg =
Date::toString(time(
nullptr)) +
": starting openMSX";
112 std::cout << msg <<
'\n';
113 std::cerr << msg <<
'\n';
117 EnableConsoleOutput();
127 ArgumentGenerator arggen;
128 argv = arggen.GetArguments(argc);
130 CommandLineParser parser(reactor);
131 parser.parse(argc, argv);
135 if (!parser.isHiddenStartup()) {
136 auto& render = reactor.getDisplay().getRenderSettings().getRendererSetting();
137 render.setValue(render.getRestoreValue());
144 reactor.getEventDistributor().deliverEvents();
147 CliServer cliServer(reactor.getCommandController(),
148 reactor.getEventDistributor(),
149 reactor.getGlobalCliComm());
153 }
catch (FatalError& e) {
154 std::cerr <<
"Fatal error: " << e.getMessage() <<
'\n';
156 }
catch (MSXException& e) {
157 std::cerr <<
"Uncaught exception: " << e.getMessage() <<
'\n';
159 }
catch (std::exception& e) {
160 std::cerr <<
"Uncaught std::exception: " << e.what() <<
'\n';
163 std::cerr <<
"Uncaught exception of unexpected type." <<
'\n';
167 if (SDL_WasInit(SDL_INIT_EVERYTHING)) {
177 int main(
int argc,
char **argv)
183 return openmsx::main(argc, argv);
int main(int argc, char **argv)
std::string toString(time_t time)
void setMainThread()
Store ID of the main thread, should be called exactly once from the main thread.
This file implemented 3 utility functions:
void randomize()
Seed the (shared) random number generator.