diff options
Diffstat (limited to '')
| -rw-r--r-- | platform/platform.h | 5 | ||||
| -rw-r--r-- | platform/win32.c | 38 | 
2 files changed, 43 insertions, 0 deletions
| diff --git a/platform/platform.h b/platform/platform.h index da1efa6..fd9b9bb 100644 --- a/platform/platform.h +++ b/platform/platform.h @@ -1,6 +1,11 @@  #ifndef CLAK_PLATFORM_H_  #define CLAK_PLATFORM_H_ +#include <stdbool.h> + +#include "../board/board.h" + +bool load_board(char *board_name, fn_board_on_down *on_down, fn_board_on_down *on_up);  bool sound_init(float volume);  void sound_play(unsigned char *buffer);  void keyboard_unhook(void); diff --git a/platform/win32.c b/platform/win32.c index 90cd37c..cf22718 100644 --- a/platform/win32.c +++ b/platform/win32.c @@ -2,6 +2,9 @@  #include <stdbool.h>  #include <windows.h> +#include "platform.h" +#include "../board/board.h" +  /* Required callbacks */  extern void keyboard_on_down(void);  extern void keyboard_on_up(void); @@ -77,4 +80,39 @@ void enter_idle(void)  			exit(1);  		}  	} +} + +bool load_board(char *board_name, fn_board_on_down *on_down, fn_board_on_down *on_up) +{ +	char dll_name[100]; +	int r = snprintf(dll_name, 100, "./board/%s.dll", board_name); +	if (r < 0 || r >= 100) { +		printf("ERROR: Invalid board name.\n"); +		return false; +	} + +	HMODULE board_module = LoadLibrary(dll_name); +	if (board_module == NULL) { +		printf("ERROR: Could not load board module.\n"); +		return false; +	} +	fn_board_init board_init = (fn_board_init) (void (*)(void)) GetProcAddress(board_module, "board_init"); +	if (board_init == NULL) { +		printf("ERROR: No board down function could be loaded.\n"); +		return false; +	} +	board_init(&sound_play); + +	*on_down = (fn_board_on_down) GetProcAddress(board_module, "board_on_down"); +	if (on_down == NULL) { +		printf("ERROR: No board down function could be loaded.\n"); +		return false; +	} +	*on_up = (fn_board_on_up) GetProcAddress(board_module, "board_on_up"); +	if (on_up == NULL) { +		printf("ERROR: No board up function could be loaded.\n"); +		return false; +	} + +	return true;  }
\ No newline at end of file | 
