Banjo API 0.0.1
C99 game development API
Loading...
Searching...
No Matches
main.h
Go to the documentation of this file.
1
26#ifndef BJ_MAIN_H
27#define BJ_MAIN_H
28
29#include <banjo/api.h>
30
38// #define BJ_NO_AUTOMAIN 1
39
47// #define BJ_AUTOMAIN_CALLBACKS
48
56// #define BJ_AUTOMAIN
57
58
59// Determining if main function is provided, optionnaly or not
60#ifndef BJ_NO_AUTOMAIN
61# if defined(BJ_OS_EMSCRIPTEN)
62# define BJ_AUTOMAIN
63# elif defined(BJ_OS_WINDOWS)
64# define BJ_AUTOMAIN
65# elif defined(BJ_OS_IOS)
66# define BJ_AUTOMAIN
67# endif
68#endif
69
70// // Rename user's main function
71// #if defined(BJ_AUTOMAIN) || defined(BJ_AUTOMAIN_CALLBACKS)
72// # define main bj_main
73// #endif
74
75#ifdef __cplusplus
76extern "C" {
77#endif
78
79#if defined(BJ_AUTOMAIN) || defined(BJ_AUTOMAIN_CALLBACKS)
95extern int bj_main(int argc, char* argv[]);
96
109extern int bj_call_main(int argc, char* argv[], int (*function)(int argc, char* argv[]));
110#endif
111
112#ifdef BJ_AUTOMAIN_CALLBACKS
113
121{
122 bj_callback_exit_error = -1,
123 bj_callback_exit_success = 0,
124 bj_callback_continue = 1,
125};
126
139typedef int (*bj_app_begin_fn)(void**, int, char*[]);
140
152typedef int (*bj_app_iterate_fn)(void*);
153
165typedef int (*bj_app_end_fn)(void*, int);
166
180extern int bj_app_begin(void** user_data, int argc, char *argv[]);
181
193extern int bj_app_iterate(void* user_data);
194
207extern int bj_app_end(void* user_data, int status);
208
223extern int bj_call_main_callbacks(int argc, char* argv[], bj_app_begin_fn, bj_app_iterate_fn, bj_app_end_fn);
224
225#endif
226
227
228#ifdef __cplusplus
229}
230#endif
231
232#if !defined(BJ_NO_AUTOMAIN) && !defined(BJ_MAIN_NOIMPL)
233 #if defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_AUTOMAIN)
234# ifdef main
235# undef main
236# endif
237# ifdef BJ_AUTOMAIN_CALLBACKS
238# define BJ_MAIN_CALLBACK_STANDARD 1
239 int bj_main(int argc, char* argv[]) {
240 return bj_call_main_callbacks(argc, argv, bj_app_begin, bj_app_iterate, bj_app_end);
241 }
242# endif
243# if (!defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_MAIN_CALLBACK_STANDARD))
244# if defined(BJ_OS_WINDOWS)
245# ifndef WINAPI
246# define WINAPI __stdcall
247# endif
248 typedef struct HINSTANCE__* HINSTANCE;
249 typedef char* LPSTR;
250 typedef wchar_t* PWSTR;
251# ifdef BJ_COMPILER_MSVC
252# if defined(UNICODE) && UNICODE
253 int wmain(int argc, wchar_t* wargv[], wchar_t* wenvp) {
254 (void)argc; (void)wargv; (void)wenvp;
255 return bj_call_main(0, NULL, bj_main);
256 }
257# else
258 int main(int argc, char* argv[]) {
259 (void)argc; (void)argv;
260 return bj_call_main(0, NULL, bj_main);
261 }
262# endif
263# endif
264# ifdef __cplusplus
265 extern "C" {
266# endif
267# if defined(UNICODE) && UNICODE
268 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR szCmdLine, int sw) {
269# else
270 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {
271# endif
272 (void)hInst; (void)hPrev; (void)szCmdLine; (void)sw;
273 return bj_call_main(0, NULL, bj_main);
274 }
275# ifdef __cplusplus
276 }
277# endif
278# else
279 int main(int argc, char* argv[]) {
280 return bj_call_main(argc, argv, bj_main);
281 }
282# endif
283# endif
284# define main bj_main
285# endif
286#endif
287
291
292#endif
293
General-purpose definitions for Banjo API.
enum bj_callback_result bj_callback_result
Definition api.h:314