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 }