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