1 module allegro5.system; 2 3 import allegro5.internal.da5; 4 import allegro5.config; 5 import allegro5.path; 6 import allegro5.base; 7 8 version(Tango) 9 { 10 import tango.core.Thread; 11 import tango.stdc.stdlib : atexit; 12 } 13 else 14 { 15 version(D_Version2) 16 { 17 import core.thread; 18 import core.stdc.stdlib : atexit; 19 } 20 else 21 { 22 import std.c.stdlib : atexit; 23 import std.thread; 24 } 25 } 26 27 extern (C) void rt_moduleTlsCtor(); 28 extern (C) void rt_moduleTlsDtor(); 29 30 int al_run_allegro(scope int delegate() user_main) 31 { 32 extern(C) static int main_runner(int argc, char** argv) 33 { 34 version(OSX) 35 { 36 version(D_Version2) 37 { 38 thread_attachThis(); 39 rt_moduleTlsCtor(); 40 } 41 else 42 Thread.thread_attach(); 43 } 44 45 auto main_ret = (*cast(int delegate()*)argv[0])(); 46 47 version(OSX) 48 { 49 version(D_Version2) 50 { 51 thread_detachThis(); 52 rt_moduleTlsDtor(); 53 } 54 else 55 Thread.thread_detach(); 56 } 57 58 return main_ret; 59 } 60 61 char* fake_arg = cast(char*)&user_main; 62 return al_run_main(0, &fake_arg, &main_runner); 63 } 64 65 nothrow @nogc extern (C) 66 { 67 struct ALLEGRO_SYSTEM {}; 68 69 bool al_install_system(int vers, int function(void function()) atexit_ptr); 70 void al_uninstall_system(); 71 bool al_is_system_installed(); 72 ALLEGRO_SYSTEM* al_get_system_driver(); 73 ALLEGRO_CONFIG* al_get_system_config(); 74 75 bool al_init() 76 { 77 return al_install_system(ALLEGRO_VERSION_INT, &atexit); 78 } 79 80 enum 81 { 82 ALLEGRO_RESOURCES_PATH = 0, 83 ALLEGRO_TEMP_PATH, 84 ALLEGRO_USER_DATA_PATH, 85 ALLEGRO_USER_HOME_PATH, 86 ALLEGRO_USER_SETTINGS_PATH, 87 ALLEGRO_USER_DOCUMENTS_PATH, 88 ALLEGRO_EXENAME_PATH, 89 ALLEGRO_LAST_PATH // must be last 90 } 91 92 ALLEGRO_PATH* al_get_standard_path(int id); 93 void al_set_exe_name(in char* path); 94 95 void al_set_org_name(in char* orgname); 96 void al_set_app_name(in char* appname); 97 const_char* al_get_org_name(); 98 const_char* al_get_app_name(); 99 100 bool al_inhibit_screensaver(bool inhibit); 101 }