Banjo API 0.0.1
C99 game development API
Loading...
Searching...
No Matches
main.h
Go to the documentation of this file.
1
5#ifndef BJ_MAIN_H
6#define BJ_MAIN_H
7
8#include <banjo/api.h>
9
10// Provided by the user to say that the client application is
11// provided its own main implementation.
12// #define BJ_NO_AUTOMAIN 1
13
14// Provided by the user to say that the client wants to use the
15// callback system.
16// #define BJ_AUTOMAIN_CALLBACKS
17
18// Defined internally to say that BJ will rename main() to bj_main
19// in order to provide a special main.
20// #define BJ_AUTOMAIN
21
22
23// Determining if main function is provided, optionnaly or not
24#ifndef BJ_NO_AUTOMAIN
25# if defined(BJ_OS_EMSCRIPTEN)
26# define BJ_AUTOMAIN
27# elif defined(BJ_OS_WINDOWS)
28# define BJ_AUTOMAIN
29# elif defined(BJ_OS_IOS)
30# define BJ_AUTOMAIN
31# endif
32#endif
33
34// // Rename user's main function
35// #if defined(BJ_AUTOMAIN) || defined(BJ_AUTOMAIN_CALLBACKS)
36// # define main bj_main
37// #endif
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43#if defined(BJ_AUTOMAIN) || defined(BJ_AUTOMAIN_CALLBACKS)
44extern int bj_main(int argc, char* argv[]);
45extern int bj_call_main(int argc, char* argv[], int (*function)(int argc, char* argv[]));
46#endif
47
48#ifdef BJ_AUTOMAIN_CALLBACKS
49
50typedef enum bj_callback_result_t
51{
52 bj_callback_exit_error = -1,
53 bj_callback_exit_success = 0,
54 bj_callback_continue = 1,
55} bj_callback_result;
56
57typedef int (*bj_app_begin_fn_t)(void**, int, char*[]);
58typedef int (*bj_app_iterate_fn_t)(void*);
59typedef int (*bj_app_end_fn_t)(void*, int);
60
61extern int bj_app_begin(void** user_data, int argc, char *argv[]);
62extern int bj_app_iterate(void* user_data);
63extern int bj_app_end(void* user_data, int status);
64
65extern int bj_call_main_callbacks(int argc, char* argv[], bj_app_begin_fn_t, bj_app_iterate_fn_t, bj_app_end_fn_t);
66
67#endif
68
69
70#ifdef __cplusplus
71}
72#endif
73
74#if !defined(BJ_NO_AUTOMAIN) && !defined(BJ_MAIN_NOIMPL)
75 #if defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_AUTOMAIN)
76# ifdef main
77# undef main
78# endif
79# ifdef BJ_AUTOMAIN_CALLBACKS
80# define BJ_MAIN_CALLBACK_STANDARD 1
81 int bj_main(int argc, char* argv[]) {
82 return bj_call_main_callbacks(argc, argv, bj_app_begin, bj_app_iterate, bj_app_end);
83 }
84# endif
85# if (!defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_MAIN_CALLBACK_STANDARD))
86# if defined(BJ_OS_WINDOWS)
87# ifndef WINAPI
88# define WINAPI __stdcall
89# endif
90 typedef struct HINSTANCE__* HINSTANCE;
91 typedef char* LPSTR;
92 typedef wchar_t* PWSTR;
93# ifdef BJ_COMPILER_MSVC
94# if defined(UNICODE) && UNICODE
95 int wmain(int argc, wchar_t* wargv[], wchar_t* wenvp) {
96 (void)argc; (void)wargv; (void)wenvp;
97 return bj_call_main(0, NULL, bj_main);
98 }
99# else
100 int main(int argc, char* argv[]) {
101 (void)argc; (void)argv;
102 return bj_call_main(0, NULL, bj_main);
103 }
104# endif
105# endif
106# ifdef __cplusplus
107 extern "C" {
108# endif
109# if defined(UNICODE) && UNICODE
110 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR szCmdLine, int sw) {
111# else
112 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {
113# endif
114 (void)hInst; (void)hPrev; (void)szCmdLine; (void)sw;
115 return bj_call_main(0, NULL, bj_main);
116 }
117# ifdef __cplusplus
118 }
119# endif
120# else
121 int main(int argc, char* argv[]) {
122 return bj_call_main(argc, argv, bj_main);
123 }
124# endif
125# endif
126# define main bj_main
127# endif
128#endif
129
130#endif
131
General-purpose definitions for Banjo API.