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
109#endif /* BJ_AUTOMAIN || BJ_AUTOMAIN_CALLBACKS */
110
111extern int bj_call_main(int argc, char* argv[], int (*function)(int argc, char* argv[]));
112
113
114#ifdef BJ_AUTOMAIN_CALLBACKS
115
122enum bj_callback_result
123{
124 bj_callback_exit_error = -1,
125 bj_callback_exit_success = 0,
126 bj_callback_continue = 1,
127};
128#ifndef BJ_NO_TYPEDEF
129typedef enum bj_callback_result bj_callback_result;
130#endif
131
144typedef int (*bj_app_begin_fn)(void**, int, char*[]);
145
157typedef int (*bj_app_iterate_fn)(void*);
158
170typedef int (*bj_app_end_fn)(void*, int);
171
185extern int bj_app_begin(void** user_data, int argc, char *argv[]);
186
198extern int bj_app_iterate(void* user_data);
199
212extern int bj_app_end(void* user_data, int status);
213
228extern int bj_call_main_callbacks(int argc, char* argv[], bj_app_begin_fn, bj_app_iterate_fn, bj_app_end_fn);
229
230#endif
231
232
233#ifdef __cplusplus
234}
235#endif
236
237#if !defined(BJ_NO_AUTOMAIN) && !defined(BJ_MAIN_NOIMPL)
238 #if defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_AUTOMAIN)
239# ifdef main
240# undef main
241# endif
242# ifdef BJ_AUTOMAIN_CALLBACKS
243# define BJ_MAIN_CALLBACK_STANDARD 1
244 int bj_main(int argc, char* argv[]) {
245 return bj_call_main_callbacks(argc, argv, bj_app_begin, bj_app_iterate, bj_app_end);
246 }
247# endif
248# if (!defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_MAIN_CALLBACK_STANDARD))
249# if defined(BJ_OS_WINDOWS)
250# ifndef WINAPI
251# define WINAPI __stdcall
252# endif
253 typedef struct HINSTANCE__* HINSTANCE;
254 typedef char* LPSTR;
255 typedef wchar_t* PWSTR;
256# ifdef BJ_COMPILER_MSVC
257# if defined(UNICODE) && UNICODE
258 int wmain(int argc, wchar_t* wargv[], wchar_t* wenvp) {
259 (void)argc; (void)wargv; (void)wenvp;
260 return bj_call_main(0, NULL, bj_main);
261 }
262# else
263 int main(int argc, char* argv[]) {
264 (void)argc; (void)argv;
265 return bj_call_main(0, NULL, bj_main);
266 }
267# endif
268# endif
269# ifdef __cplusplus
270 extern "C" {
271# endif
272# if defined(UNICODE) && UNICODE
273 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR szCmdLine, int sw) {
274# else
275 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {
276# endif
277 (void)hInst; (void)hPrev; (void)szCmdLine; (void)sw;
278 return bj_call_main(0, NULL, bj_main);
279 }
280# ifdef __cplusplus
281 }
282# endif
283# else
284 int main(int argc, char* argv[]) {
285 return bj_call_main(argc, argv, bj_main);
286 }
287# endif
288# endif
289# define main bj_main
290# endif
291#endif
292
296
297#endif
298
General-purpose definitions for Banjo API.
int bj_app_begin(void **user_data, int argc, char *argv[])
Definition audio_pcm.c:25
int bj_app_iterate(void *user_data)
Definition audio_pcm.c:60
int bj_app_end(void *user_data, int status)
Definition audio_pcm.c:84
int bj_main(int argc, char *argv[])
Definition build_info.c:19
int bj_call_main(int argc, char *argv[], int(*function)(int argc, char *argv[]))