#include #include #include #include #define VOLUME 0.15 #include "board/boards.h" #define BOARD(str, buf) { .name = str, .wav = buf }, typedef struct { char *name; unsigned char* wav; } Board; Board boards[] = { BOARDS }; int const boards_n = sizeof(boards) / sizeof(boards[0]); void sound_init(void) { DWORD channel_volume = VOLUME * 0xFFFF; waveOutSetVolume(NULL, (channel_volume << 16) | channel_volume); } void sound_play(unsigned char* buffer) { PlaySound((const char *) buffer, NULL, SND_MEMORY | SND_SYNC | SND_NODEFAULT); } 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; } int main(int argc, char **argv) { Board *board; 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" : ", "); } return 1; } sound_init(); printf("name: %s\n", board->name); sound_play(board->wav); return 0; }