diff --git a/milepost b/milepost index d2c4acf..2fe683b 160000 --- a/milepost +++ b/milepost @@ -1 +1 @@ -Subproject commit d2c4acf6e2e13d251c036ab8bd51e70d9c28505f +Subproject commit 2fe683b79d25a1b1ef7c3b1777f651358cce09ca diff --git a/samples/pong/build.bat b/samples/pong/build.bat new file mode 100644 index 0000000..ae1f2ba --- /dev/null +++ b/samples/pong/build.bat @@ -0,0 +1,17 @@ +@echo off + +:: compile wasm module +set wasmFlags=--target=wasm32^ + --no-standard-libraries ^ + -fno-builtin ^ + -Wl,--no-entry ^ + -Wl,--export-all ^ + -Wl,--allow-undefined ^ + -g ^ + -D__ORCA__ ^ + -I ..\.. -I ..\..\src -I ..\..\sdk -I..\..\milepost -I ..\..\milepost\src + +clang %wasmFlags% -o .\module.wasm ..\..\sdk\orca.c src\main.c + + +python3 ..\..\scripts\mkapp.py --orca-dir ../.. --name Pong --icon icon.png --data-dir dir1 module.wasm diff --git a/samples/pong/src/main.c b/samples/pong/src/main.c index 613e2ab..ade684e 100644 --- a/samples/pong/src/main.c +++ b/samples/pong/src/main.c @@ -78,7 +78,7 @@ void OnInit(void) #endif // TEST_IMAGE //NOTE: testing file io - file_handle file = file_open(STR8("/test_write.txt"), FILE_OPEN_CREATE | FILE_OPEN_WRITE); + file_handle file = file_open(STR8("/test_write.txt"), FILE_ACCESS_WRITE, FILE_OPEN_CREATE); if(file_last_error(file) == IO_OK) { str8 string = STR8("Hello, file!\n"); @@ -90,7 +90,7 @@ void OnInit(void) log_error("Couldn't open file test_write.txt\n"); } - file = file_open(STR8("/dir1/test_read.txt"), FILE_OPEN_READ); + file = file_open(STR8("/dir1/test_read.txt"), FILE_ACCESS_READ, 0); u64 size = file_size(file); char* buffer = mem_arena_alloc(mem_scratch(), size); file_read(file, size, buffer); diff --git a/scripts/mkapp.py b/scripts/mkapp.py index b4220e8..dc0f394 100644 --- a/scripts/mkapp.py +++ b/scripts/mkapp.py @@ -1,162 +1,239 @@ -#!/usr/bin/env python3 - -import os -import shutil -import subprocess -from argparse import ArgumentParser - -#--------------------------------------------------------------------------------------------- -# NOTE: get args -# -# mkapp.py [options] module -# -# -n, --name the name of the app -# -r, --res-file copies a file to the app bundle's resource directory -# -R, --res-dir copies the contents of a directory to the bundle's resource directory -# -i, --icon icon file -# -D, --out-dir output directory -#---------------------------------------------------------------------------------------------- - -parser = ArgumentParser(prog='mkapp') -parser.add_argument("-d", "--data-file", action='append', dest='data_files') -parser.add_argument("-D", "--data-dir", action='append', dest='data_dirs') -parser.add_argument("-i", "--icon") -parser.add_argument("-C", "--out-dir", default=os.getcwd()) -parser.add_argument("-n", "--name", default='out') -parser.add_argument("-O", "--orca-dir", default='.') -parser.add_argument("--version", default='0.0.0') -parser.add_argument("module") - -args = parser.parse_args() - -#----------------------------------------------------------- -#NOTE: make bundle directory structure -#----------------------------------------------------------- -app_name = args.name -bundle_name = app_name + '.app' -bundle_path = args.out_dir + '/' + bundle_name -contents_dir = bundle_path + '/Contents' -exe_dir = contents_dir + '/MacOS' -res_dir = contents_dir + '/resources' -guest_dir = contents_dir + '/app' -wasm_dir = guest_dir + '/wasm' -data_dir = guest_dir + '/data' - -if os.path.exists(bundle_path): - shutil.rmtree(bundle_path) -os.mkdir(bundle_path) -os.mkdir(contents_dir) -os.mkdir(exe_dir) -os.mkdir(res_dir) -os.mkdir(guest_dir) -os.mkdir(wasm_dir) -os.mkdir(data_dir) - -#----------------------------------------------------------- -#NOTE: copy orca runtime executable and libraries -#----------------------------------------------------------- -orca_exe = args.orca_dir + '/bin/orca' -milepost_lib = args.orca_dir + '/bin/libmilepost.dylib' -gles_lib = args.orca_dir + '/bin/libGLESv2.dylib' -egl_lib = args.orca_dir + '/bin/libEGL.dylib' -renderer_lib = args.orca_dir + '/bin/mtl_renderer.metallib' - -shutil.copy(orca_exe, exe_dir) -shutil.copy(milepost_lib, exe_dir) -shutil.copy(gles_lib, exe_dir) -shutil.copy(egl_lib, exe_dir) -shutil.copy(renderer_lib, exe_dir) - -#----------------------------------------------------------- -#NOTE: copy wasm module and data -#----------------------------------------------------------- -shutil.copy(args.module, wasm_dir + '/module.wasm') - -if args.data_files != None: - for data in args.data_files: - shutil.copy(data, data_dir) - -if args.data_dirs != None: - for data in args.data_dirs: - shutil.copytree(data, data_dir + '/' + os.path.basename(data), dirs_exist_ok=True) - -#----------------------------------------------------------- -#NOTE: copy runtime resources -#----------------------------------------------------------- -# default fonts -shutil.copy(args.orca_dir + '/resources/OpenSansLatinSubset.ttf', res_dir) -shutil.copy(args.orca_dir + '/resources/Menlo.ttf', res_dir) -shutil.copy(args.orca_dir + '/resources/Menlo Bold.ttf', res_dir) -shutil.copy(args.orca_dir + '/resources/Menlo Italics.ttf', res_dir) - -#----------------------------------------------------------- -#NOTE make icon -#----------------------------------------------------------- -src_image=args.icon - -#if src_image == None: -# src_image = orca_dir + '/resources/default_app_icon.png' - -if src_image != None: - iconset = os.path.splitext(src_image)[0] + '.iconset' - - if os.path.exists(iconset): - shutil.rmtree(iconset) - - os.mkdir(iconset) - - size = 16 - for i in range(0, 7): - size_str = str(size) - icon = 'icon_' + size_str + 'x' + size_str + '.png' - subprocess.run(['sips', '-z', size_str, size_str, src_image, '--out', iconset + '/' + icon], - stdout = subprocess.DEVNULL, - stderr = subprocess.DEVNULL) - - size_str_retina = str(size*2) - icon = 'icon_' + size_str + 'x' + size_str + '@2x.png' - subprocess.run(['sips', '-z', size_str_retina, size_str_retina, src_image, '--out', iconset + '/' + icon], - stdout = subprocess.DEVNULL, - stderr = subprocess.DEVNULL) - - size = size*2 - - subprocess.run(['iconutil', '-c', 'icns', '-o', res_dir + '/icon.icns', iconset]) - shutil.rmtree(iconset) - -#----------------------------------------------------------- -#NOTE: write plist file -#----------------------------------------------------------- -version = args.version -bundle_sig = "????" -icon_file = '' - -plist_contents = """ - - - - - CFBundleName - {app_name} - CFBundleDisplayName - {app_name} - CFBundleIdentifier - {app_name} - CFBundleVersion - {version} - CFBundlePackageType - APPL - CFBundleSignature - {bundle_sig} - CFBundleExecutable - orca - CFBundleIconFile - icon.icns - NSHighResolutionCapable - True - - -""".format(app_name=app_name, version=version, bundle_sig=bundle_sig, icon_file=icon_file) - -plist_file = open(contents_dir + '/Info.plist', 'w') -print(plist_contents, file=plist_file) +#!/usr/bin/env python3 + +import os +import platform +import shutil +import subprocess +from argparse import ArgumentParser + +def macos_make_app(args): + #----------------------------------------------------------- + #NOTE: make bundle directory structure + #----------------------------------------------------------- + app_name = args.name + bundle_name = app_name + '.app' + bundle_path = args.out_dir + '/' + bundle_name + contents_dir = bundle_path + '/Contents' + exe_dir = contents_dir + '/MacOS' + res_dir = contents_dir + '/resources' + guest_dir = contents_dir + '/app' + wasm_dir = guest_dir + '/wasm' + data_dir = guest_dir + '/data' + + if os.path.exists(bundle_path): + shutil.rmtree(bundle_path) + os.mkdir(bundle_path) + os.mkdir(contents_dir) + os.mkdir(exe_dir) + os.mkdir(res_dir) + os.mkdir(guest_dir) + os.mkdir(wasm_dir) + os.mkdir(data_dir) + + #----------------------------------------------------------- + #NOTE: copy orca runtime executable and libraries + #----------------------------------------------------------- + orca_exe = args.orca_dir + '/bin/orca' + milepost_lib = args.orca_dir + '/bin/libmilepost.dylib' + gles_lib = args.orca_dir + '/bin/libGLESv2.dylib' + egl_lib = args.orca_dir + '/bin/libEGL.dylib' + renderer_lib = args.orca_dir + '/bin/mtl_renderer.metallib' + + shutil.copy(orca_exe, exe_dir) + shutil.copy(milepost_lib, exe_dir) + shutil.copy(gles_lib, exe_dir) + shutil.copy(egl_lib, exe_dir) + shutil.copy(renderer_lib, exe_dir) + + #----------------------------------------------------------- + #NOTE: copy wasm module and data + #----------------------------------------------------------- + shutil.copy(args.module, wasm_dir + '/module.wasm') + + if args.data_files != None: + for data in args.data_files: + shutil.copy(data, data_dir) + + if args.data_dirs != None: + for data in args.data_dirs: + shutil.copytree(data, data_dir + '/' + os.path.basename(data), dirs_exist_ok=True) + + #----------------------------------------------------------- + #NOTE: copy runtime resources + #----------------------------------------------------------- + # default fonts + shutil.copy(args.orca_dir + '/resources/OpenSansLatinSubset.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo Bold.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo Italics.ttf', res_dir) + + #----------------------------------------------------------- + #NOTE make icon + #----------------------------------------------------------- + src_image=args.icon + + #if src_image == None: + # src_image = orca_dir + '/resources/default_app_icon.png' + + if src_image != None: + iconset = os.path.splitext(src_image)[0] + '.iconset' + + if os.path.exists(iconset): + shutil.rmtree(iconset) + + os.mkdir(iconset) + + size = 16 + for i in range(0, 7): + size_str = str(size) + icon = 'icon_' + size_str + 'x' + size_str + '.png' + subprocess.run(['sips', '-z', size_str, size_str, src_image, '--out', iconset + '/' + icon], + stdout = subprocess.DEVNULL, + stderr = subprocess.DEVNULL) + + size_str_retina = str(size*2) + icon = 'icon_' + size_str + 'x' + size_str + '@2x.png' + subprocess.run(['sips', '-z', size_str_retina, size_str_retina, src_image, '--out', iconset + '/' + icon], + stdout = subprocess.DEVNULL, + stderr = subprocess.DEVNULL) + + size = size*2 + + subprocess.run(['iconutil', '-c', 'icns', '-o', res_dir + '/icon.icns', iconset]) + shutil.rmtree(iconset) + + #----------------------------------------------------------- + #NOTE: write plist file + #----------------------------------------------------------- + version = args.version + bundle_sig = "????" + icon_file = '' + + plist_contents = """ + + + + + CFBundleName + {app_name} + CFBundleDisplayName + {app_name} + CFBundleIdentifier + {app_name} + CFBundleVersion + {version} + CFBundlePackageType + APPL + CFBundleSignature + {bundle_sig} + CFBundleExecutable + orca + CFBundleIconFile + icon.icns + NSHighResolutionCapable + True + + + """.format(app_name=app_name, version=version, bundle_sig=bundle_sig, icon_file=icon_file) + + plist_file = open(contents_dir + '/Info.plist', 'w') + print(plist_contents, file=plist_file) + +def windows_make_app(args): + #----------------------------------------------------------- + #NOTE: make bundle directory structure + #----------------------------------------------------------- + app_name = args.name + bundle_name = app_name + bundle_dir = args.out_dir + '/' + bundle_name + exe_dir = bundle_dir + '/bin' + res_dir = bundle_dir + '/resources' + guest_dir = bundle_dir + '/app' + wasm_dir = guest_dir + '/wasm' + data_dir = guest_dir + '/data' + + if os.path.exists(bundle_dir): + shutil.rmtree(bundle_dir) + os.mkdir(bundle_dir) + os.mkdir(exe_dir) + os.mkdir(res_dir) + os.mkdir(guest_dir) + os.mkdir(wasm_dir) + os.mkdir(data_dir) + + #----------------------------------------------------------- + #NOTE: copy orca runtime executable and libraries + #----------------------------------------------------------- + orca_exe = args.orca_dir + '/bin/orca.exe' + milepost_lib = args.orca_dir + '/bin/milepost.dll' + gles_lib = args.orca_dir + '/milepost/bin/libGLESv2.dll' + egl_lib = args.orca_dir + '/milepost/bin/libEGL.dll' + pthread_lib = args.orca_dir + '/bin/pthreadVC3.dll' + + shutil.copy(orca_exe, exe_dir) + shutil.copy(milepost_lib, exe_dir) + shutil.copy(gles_lib, exe_dir) + shutil.copy(egl_lib, exe_dir) + shutil.copy(pthread_lib, exe_dir) + + #----------------------------------------------------------- + #NOTE: copy wasm module and data + #----------------------------------------------------------- + shutil.copy(args.module, wasm_dir + '/module.wasm') + + if args.data_files != None: + for data in args.data_files: + shutil.copy(data, data_dir) + + if args.data_dirs != None: + for data in args.data_dirs: + shutil.copytree(data, data_dir + '/' + os.path.basename(data), dirs_exist_ok=True) + + #----------------------------------------------------------- + #NOTE: copy runtime resources + #----------------------------------------------------------- + # default fonts + shutil.copy(args.orca_dir + '/resources/OpenSansLatinSubset.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo Bold.ttf', res_dir) + shutil.copy(args.orca_dir + '/resources/Menlo Italics.ttf', res_dir) + + #----------------------------------------------------------- + #NOTE make icon + #----------------------------------------------------------- + #TODO + +#--------------------------------------------------------------------------------------------- +# NOTE: get args +# +# mkapp.py [options] module +# +# -n, --name the name of the app +# -r, --res-file copies a file to the app bundle's resource directory +# -R, --res-dir copies the contents of a directory to the bundle's resource directory +# -i, --icon icon file +# -D, --out-dir output directory +#---------------------------------------------------------------------------------------------- + +parser = ArgumentParser(prog='mkapp') +parser.add_argument("-d", "--data-file", action='append', dest='data_files') +parser.add_argument("-D", "--data-dir", action='append', dest='data_dirs') +parser.add_argument("-i", "--icon") +parser.add_argument("-C", "--out-dir", default=os.getcwd()) +parser.add_argument("-n", "--name", default='out') +parser.add_argument("-O", "--orca-dir", default='.') +parser.add_argument("--version", default='0.0.0') +parser.add_argument("module") + +args = parser.parse_args() + +#---------------------------------------------------------------------------------------------- +# Dispatch to platform-specific function +#---------------------------------------------------------------------------------------------- +platformName = platform.system() +if platformName == 'Darwin': + macos_make_app(args) +elif platformName == 'Windows': + windows_make_app(args) +else: + print("Platform '" + platformName + "' is not supported for now...") diff --git a/sdk/keys.h b/sdk/keys.h index 3d254a7..a350dae 100644 --- a/sdk/keys.h +++ b/sdk/keys.h @@ -1,140 +1,140 @@ -/************************************************************//** -* -* @file: keys.h -* @author: Martin Fouilleul -* @date: 26/08/2022 -* @revision: -* -*****************************************************************/ -#ifndef __KEYS_H_ -#define __KEYS_H_ - -#include"typedefs.h" - -typedef i32 key_code; -static const key_code KEY_UNKNOWN = -1, - KEY_SPACE = 32, - KEY_APOSTROPHE = 39, // ' - KEY_COMMA = 44, // , - KEY_MINUS = 45, // - - KEY_PERIOD = 46, // . - KEY_SLASH = 47, // / - KEY_0 = 48, - KEY_1 = 49, - KEY_2 = 50, - KEY_3 = 51, - KEY_4 = 52, - KEY_5 = 53, - KEY_6 = 54, - KEY_7 = 55, - KEY_8 = 56, - KEY_9 = 57, - KEY_SEMICOLON = 59, // ; - KEY_EQUAL = 61, // = - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - KEY_LEFT_BRACKET = 91, // [ - KEY_BACKSLASH = 92, // \ */ - KEY_RIGHT_BRACKET = 93, // ] - KEY_GRAVE_ACCENT = 96, // ` - KEY_WORLD_1 = 161, // non-US #1 - KEY_WORLD_2 = 162, // non-US #2 - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_F13 = 302, - KEY_F14 = 303, - KEY_F15 = 304, - KEY_F16 = 305, - KEY_F17 = 306, - KEY_F18 = 307, - KEY_F19 = 308, - KEY_F20 = 309, - KEY_F21 = 310, - KEY_F22 = 311, - KEY_F23 = 312, - KEY_F24 = 313, - KEY_F25 = 314, - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_MENU = 348; - -static const key_code KEY_MAX = KEY_MENU; - - -#endif //__KEYS_H_ +/************************************************************//** +* +* @file: keys.h +* @author: Martin Fouilleul +* @date: 26/08/2022 +* @revision: +* +*****************************************************************/ +#ifndef __KEYS_H_ +#define __KEYS_H_ + +#include"util/typedefs.h" + +typedef i32 key_code; +static const key_code KEY_UNKNOWN = -1, + KEY_SPACE = 32, + KEY_APOSTROPHE = 39, // ' + KEY_COMMA = 44, // , + KEY_MINUS = 45, // - + KEY_PERIOD = 46, // . + KEY_SLASH = 47, // / + KEY_0 = 48, + KEY_1 = 49, + KEY_2 = 50, + KEY_3 = 51, + KEY_4 = 52, + KEY_5 = 53, + KEY_6 = 54, + KEY_7 = 55, + KEY_8 = 56, + KEY_9 = 57, + KEY_SEMICOLON = 59, // ; + KEY_EQUAL = 61, // = + KEY_A = 65, + KEY_B = 66, + KEY_C = 67, + KEY_D = 68, + KEY_E = 69, + KEY_F = 70, + KEY_G = 71, + KEY_H = 72, + KEY_I = 73, + KEY_J = 74, + KEY_K = 75, + KEY_L = 76, + KEY_M = 77, + KEY_N = 78, + KEY_O = 79, + KEY_P = 80, + KEY_Q = 81, + KEY_R = 82, + KEY_S = 83, + KEY_T = 84, + KEY_U = 85, + KEY_V = 86, + KEY_W = 87, + KEY_X = 88, + KEY_Y = 89, + KEY_Z = 90, + KEY_LEFT_BRACKET = 91, // [ + KEY_BACKSLASH = 92, // \ */ + KEY_RIGHT_BRACKET = 93, // ] + KEY_GRAVE_ACCENT = 96, // ` + KEY_WORLD_1 = 161, // non-US #1 + KEY_WORLD_2 = 162, // non-US #2 + KEY_ESCAPE = 256, + KEY_ENTER = 257, + KEY_TAB = 258, + KEY_BACKSPACE = 259, + KEY_INSERT = 260, + KEY_DELETE = 261, + KEY_RIGHT = 262, + KEY_LEFT = 263, + KEY_DOWN = 264, + KEY_UP = 265, + KEY_PAGE_UP = 266, + KEY_PAGE_DOWN = 267, + KEY_HOME = 268, + KEY_END = 269, + KEY_CAPS_LOCK = 280, + KEY_SCROLL_LOCK = 281, + KEY_NUM_LOCK = 282, + KEY_PRINT_SCREEN = 283, + KEY_PAUSE = 284, + KEY_F1 = 290, + KEY_F2 = 291, + KEY_F3 = 292, + KEY_F4 = 293, + KEY_F5 = 294, + KEY_F6 = 295, + KEY_F7 = 296, + KEY_F8 = 297, + KEY_F9 = 298, + KEY_F10 = 299, + KEY_F11 = 300, + KEY_F12 = 301, + KEY_F13 = 302, + KEY_F14 = 303, + KEY_F15 = 304, + KEY_F16 = 305, + KEY_F17 = 306, + KEY_F18 = 307, + KEY_F19 = 308, + KEY_F20 = 309, + KEY_F21 = 310, + KEY_F22 = 311, + KEY_F23 = 312, + KEY_F24 = 313, + KEY_F25 = 314, + KEY_KP_0 = 320, + KEY_KP_1 = 321, + KEY_KP_2 = 322, + KEY_KP_3 = 323, + KEY_KP_4 = 324, + KEY_KP_5 = 325, + KEY_KP_6 = 326, + KEY_KP_7 = 327, + KEY_KP_8 = 328, + KEY_KP_9 = 329, + KEY_KP_DECIMAL = 330, + KEY_KP_DIVIDE = 331, + KEY_KP_MULTIPLY = 332, + KEY_KP_SUBTRACT = 333, + KEY_KP_ADD = 334, + KEY_KP_ENTER = 335, + KEY_KP_EQUAL = 336, + KEY_LEFT_SHIFT = 340, + KEY_LEFT_CONTROL = 341, + KEY_LEFT_ALT = 342, + KEY_LEFT_SUPER = 343, + KEY_RIGHT_SHIFT = 344, + KEY_RIGHT_CONTROL = 345, + KEY_RIGHT_ALT = 346, + KEY_RIGHT_SUPER = 347, + KEY_MENU = 348; + +static const key_code KEY_MAX = KEY_MENU; + + +#endif //__KEYS_H_ diff --git a/src/orca_app.h b/src/orca_app.h index 6646a52..7735b9c 100644 --- a/src/orca_app.h +++ b/src/orca_app.h @@ -42,7 +42,7 @@ typedef struct g_event_handler_desc } g_event_handler_desc; const g_event_handler_desc G_EVENT_HANDLER_DESC[] = { - #define STR8LIT(s) {sizeof(s), s} //NOTE: msvc doesn't accept STR8(s) as compile-time constant... + #define STR8LIT(s) {sizeof(s)-1, s} //NOTE: msvc doesn't accept STR8(s) as compile-time constant... #define G_EVENT_HANDLER_DESC_ENTRY(kind, name, rets, args) {STR8LIT(name), STR8LIT(rets), STR8LIT(args)}, G_EVENTS(G_EVENT_HANDLER_DESC_ENTRY)