mikoto/source/app.d

61 lines
1.4 KiB
D
Raw Normal View History

2024-10-08 23:02:58 +00:00
import std.stdio;
2024-10-09 00:22:45 +00:00
import core.thread;
import core.stdc.signal;
import core.sys.windows.windows;
__gshared bool hasCancelled;
version(Posix) {
extern(C) void signalHander(int num) nothrow @nogc @system {
if(num == SIGINT)
hasCancelled = true;
}
}
version(Windows) {
extern(Windows) BOOL ctrlHandler(DWORD fdwCtrlType) nothrow @nogc @system {
switch(fdwCtrlType) {
case CTRL_C_EVENT:
case CTRL_CLOSE_EVENT:
hasCancelled = true;
return TRUE;
default:
return FALSE;
}
}
}
2024-10-08 23:02:58 +00:00
void main() {
2024-10-09 00:22:45 +00:00
import std.range : padLeft;
import std.string : format;
version(Windows)
if(!SetConsoleCtrlHandler(&ctrlHandler, TRUE))
stderr.writeln("Failed to register Windows CTRL handler.");
version(Posix)
signal(SIGINT, &signalHander);
if(hasCancelled) return;
writeln(r" __ ____ __ __ ");
writeln(r" / |/ (_) /______ / /_____ ");
writeln(r" / /|_/ / / //_/ __ \/ __/ __ \");
writeln(r" / / / / / ,< / /_/ / /_/ /_/ /");
writeln(r"/_/ /_/_/_/|_|\____/\__/\____/ ");
debug writeln("== %s ========= DEBUG ==".format("aabbccddee"));
else writeln("v0.0.0".padLeft(' ', 30));
if(hasCancelled) return;
for(;;) {
Thread.sleep(1.seconds);
if(hasCancelled)
break;
}
writeln("Exiting!");
2024-10-08 23:02:58 +00:00
}