MultiMC5/launcher/main.cpp

117 lines
2.6 KiB
C++
Raw Normal View History

2021-11-20 15:22:22 +00:00
#include "Application.h"
2013-12-02 10:09:56 +00:00
// #define BREAK_INFINITE_LOOP
// #define BREAK_EXCEPTION
// #define BREAK_RETURN
#ifdef BREAK_INFINITE_LOOP
#include <thread>
#include <chrono>
#endif
#if defined Q_OS_WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#endif
#include <iostream>
namespace {
void earlyDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
const char *levels = "DWCFIS";
const QString format("EARLY %1 %2\n");
QString out = format.arg(levels[type]).arg(msg);
QTextStream(stderr) << out.toLocal8Bit();
fflush(stderr);
}
}
2013-12-02 10:09:56 +00:00
int main(int argc, char *argv[])
{
#ifdef BREAK_INFINITE_LOOP
2018-07-15 12:51:05 +00:00
while(true)
{
std::this_thread::sleep_for(std::chrono::milliseconds(250));
}
#endif
#ifdef BREAK_EXCEPTION
2018-07-15 12:51:05 +00:00
throw 42;
#endif
#ifdef BREAK_RETURN
2018-07-15 12:51:05 +00:00
return 42;
#endif
#if defined Q_OS_WIN32
// used on Windows to attach the standard IO streams
bool consoleAttached = false;
// attach the parent console
if(AttachConsole(ATTACH_PARENT_PROCESS))
{
// if attach succeeds, reopen and sync all the i/o
if(freopen("CON", "w", stdout))
{
std::cout.sync_with_stdio();
}
if(freopen("CON", "w", stderr))
{
std::cerr.sync_with_stdio();
}
if(freopen("CON", "r", stdin))
{
std::cin.sync_with_stdio();
}
auto out = GetStdHandle (STD_OUTPUT_HANDLE);
DWORD written;
const char * endline = "\n";
WriteConsole(out, endline, strlen(endline), &written, NULL);
consoleAttached = true;
}
#endif
qInstallMessageHandler(earlyDebugOutput);
2018-07-15 12:51:05 +00:00
// initialize Qt
2021-11-20 15:22:22 +00:00
Application app(argc, argv);
2013-12-02 10:09:56 +00:00
int result = 1;
2018-07-15 12:51:05 +00:00
switch (app.status())
{
2021-11-20 15:22:22 +00:00
case Application::StartingUp:
case Application::Initialized:
2018-07-15 12:51:05 +00:00
{
Q_INIT_RESOURCE(multimc);
Q_INIT_RESOURCE(backgrounds);
2021-10-17 22:47:02 +00:00
Q_INIT_RESOURCE(documents);
Q_INIT_RESOURCE(logo);
2018-07-15 12:51:05 +00:00
Q_INIT_RESOURCE(pe_dark);
Q_INIT_RESOURCE(pe_light);
Q_INIT_RESOURCE(pe_blue);
Q_INIT_RESOURCE(pe_colored);
Q_INIT_RESOURCE(OSX);
Q_INIT_RESOURCE(iOS);
Q_INIT_RESOURCE(flat);
result = app.exec();
2018-07-15 12:51:05 +00:00
}
2021-11-20 15:22:22 +00:00
case Application::Failed:
result = 1;
2021-11-20 15:22:22 +00:00
case Application::Succeeded:
result = 0;
}
#if defined Q_OS_WIN32
// Detach from Windows console
if(consoleAttached)
{
fclose(stdout);
fclose(stdin);
fclose(stderr);
FreeConsole();
2018-07-15 12:51:05 +00:00
}
#endif
return result;
2013-12-02 10:09:56 +00:00
}