From 6a1e6a7d6b6a3d987f2fccb3c06f4f5da071f504 Mon Sep 17 00:00:00 2001 From: Nicholas Tay Date: Tue, 10 May 2022 00:40:10 +1000 Subject: Dynamic load boards as DLL (windows only for now) The .h files are pretty weird, should look at other C projects to see how they load plugins. This function pointer business with typedefs is kinda weird, not sure where they should live. --- clak.c | 58 ++++++++++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 40 deletions(-) (limited to 'clak.c') diff --git a/clak.c b/clak.c index 7a19f4a..145709f 100644 --- a/clak.c +++ b/clak.c @@ -1,37 +1,13 @@ #include #include #include -#include #include -#define VOLUME 0.15 - -#define BOARD(x) { .name = #x, .on_down = x ## _on_down, .on_up = x ## _on_up }, -#include "boards.h" - +#include "clak.h" #include "platform/platform.h" +#include "board/board.h" -typedef struct { - char *name; - void (*on_down)(void); - void (*on_up)(void); -} Board; - -Board boards[] = { - BOARDS -}; -int const boards_n = sizeof(boards) / sizeof(boards[0]); - -Board *board = NULL; - -Board *get_board(char *board_name) -{ - for (int i = 0; i < boards_n; ++i) { - if (strcmp(boards[i].name, board_name) == 0) - return &boards[i]; - } - return NULL; -} +#define VOLUME 0.15 void do_exit(int code) { @@ -41,30 +17,32 @@ void do_exit(int code) } void on_clean_exit(void) { do_exit(0); } +fn_board_on_down board_on_down; +fn_board_on_up board_on_up; + void keyboard_on_down(void) { - if (board == NULL) - return; - board->on_down(); + board_on_down(); } void keyboard_on_up(void) { - if (board == NULL) - return; - board->on_up(); + board_on_up(); } int main(int argc, char **argv) { - if (argc < 2 || (board = get_board(argv[1])) == NULL) { - printf("Please provide a valid board name.\n"); - printf("Valid boards: "); - for (int i = 0; i < boards_n; ++i) { - printf("%s%s", boards[i].name, (i == boards_n - 1) ? "\n" : ", "); - } + fprintf(stderr, "Clak: This is Clak, Nicholas Tay, version: 0.1.0.\n"); + + if (argc < 2) { + printf("ERROR: Please provide a board name.\n"); + // TODO: List valid boards. + return 1; + } + if (!load_board(argv[1], &board_on_down, &board_on_up)) { return 1; } + fprintf(stderr, "Loaded board: %s\n", argv[1]); if (!sound_init(VOLUME)) { printf("ERROR: Could not initialise sound system.\n"); @@ -75,7 +53,7 @@ int main(int argc, char **argv) return 1; } atexit(on_clean_exit); - fprintf(stderr, "Hooks set up, welcome to Clak!\n"); + fprintf(stderr, "Hooks set up, enjoy your stay!\n"); enter_idle(); -- cgit