20# if defined(BJ_OS_EMSCRIPTEN)
22# elif defined(BJ_OS_WINDOWS)
24# elif defined(BJ_OS_IOS)
38#if defined(BJ_AUTOMAIN) || defined(BJ_AUTOMAIN_CALLBACKS)
39extern int bj_main(
int argc,
char* argv[]);
40extern int bj_call_main(
int argc,
char* argv[],
int (*function)(
int argc,
char* argv[]));
43#ifdef BJ_AUTOMAIN_CALLBACKS
45typedef enum bj_callback_result_t
47 bj_callback_exit_error = -1,
48 bj_callback_exit_success = 0,
49 bj_callback_continue = 1,
52typedef int (*bj_app_begin_fn_t)(
void**, int,
char*[]);
53typedef int (*bj_app_iterate_fn_t)(
void*);
54typedef int (*bj_app_end_fn_t)(
void*, int);
56extern int bj_app_begin(
void** user_data,
int argc,
char *argv[]);
57extern int bj_app_iterate(
void* user_data);
58extern int bj_app_end(
void* user_data,
int status);
60extern int bj_call_main_callbacks(
int argc,
char* argv[], bj_app_begin_fn_t, bj_app_iterate_fn_t, bj_app_end_fn_t);
69#if !defined(BJ_NO_AUTOMAIN) && !defined(BJ_MAIN_NOIMPL)
70 #if defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_AUTOMAIN)
74# ifdef BJ_AUTOMAIN_CALLBACKS
75# define BJ_MAIN_CALLBACK_STANDARD 1
76 int bj_main(
int argc,
char* argv[]) {
77 return bj_call_main_callbacks(argc, argv, bj_app_begin, bj_app_iterate, bj_app_end);
80# if (!defined(BJ_AUTOMAIN_CALLBACKS) || defined(BJ_MAIN_CALLBACK_STANDARD))
81# if defined(BJ_OS_WINDOWS)
83# define WINAPI __stdcall
85 typedef struct HINSTANCE__* HINSTANCE;
87 typedef wchar_t* PWSTR;
88# ifdef BJ_COMPILER_MSVC
89# if defined(UNICODE) && UNICODE
90 int wmain(
int argc,
wchar_t* wargv[],
wchar_t* wenvp) {
91 (void)argc; (void)wargv; (void)wenvp;
92 return bj_call_main(0, NULL, bj_main);
95 int main(
int argc,
char* argv[]) {
96 (void)argc; (void)argv;
97 return bj_call_main(0, NULL, bj_main);
104# if defined(UNICODE) && UNICODE
105 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR szCmdLine,
int sw) {
107 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine,
int sw) {
109 (void)hInst; (void)hPrev; (void)szCmdLine; (void)sw;
110 return bj_call_main(0, NULL, bj_main);
116 int main(
int argc,
char* argv[]) {
117 return bj_call_main(argc, argv, bj_main);
General-purpose definitions for Banjo API.