diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/SDL2.c | 52 | ||||
-rw-r--r-- | src/common/common.c | 54 | ||||
-rw-r--r-- | src/common/common.h | 7 | ||||
-rw-r--r-- | src/portaudio.c | 56 |
4 files changed, 63 insertions, 106 deletions
diff --git a/src/SDL2.c b/src/SDL2.c index 4e51269..79b4e4a 100644 --- a/src/SDL2.c +++ b/src/SDL2.c @@ -6,9 +6,7 @@ #include <stdio.h> #include "include.h" - -int module_openmpt(struct blob *file, struct userdata *userdata); -int module_fluidsynth(struct blob *file, struct userdata *userdata); +#include "common/common.h" #define eprintf(...) fprintf(stderr, __VA_ARGS__) @@ -171,51 +169,3 @@ int main(int argc, char **argv) { return EXIT_SUCCESS; } - -int (*file_ext(char *file))(struct blob *, struct userdata *) { - size_t len = strlen(file); - #define ext(extension) memcmp(file + len - sizeof (extension) + 1, extension, sizeof (extension)) - if ((ext(".mptm") && ext(".mod") && ext(".xm") && ext(".s3m") && ext(".it")) == 0) { - return module_openmpt; - } else if ((ext(".mid") && ext(".midi")) == 0) { - return module_fluidsynth; - } - #undef ext - return NULL; -} - -struct blob load_file(char const *const name) { - const size_t START_SIZE = 1; - FILE *file = fopen(name, "rb"); - if (file == NULL) { - return (struct blob) {.data = NULL}; - } - void *data = malloc(START_SIZE); - size_t allocated = START_SIZE; - size_t used = 0; - while (1) { - size_t read = fread(data + used, 1, allocated - used, file); - if (read != allocated - used) { - used += read; - break; - } - used += read; - allocated *= 2; - void *const newdata = realloc(data, allocated); - if (newdata == NULL) { - goto realloc_error; - } - data = newdata; - } - void *const newdata = realloc(data, used); - if (newdata == NULL && used != 0) { - goto realloc_error; - } - fclose(file); - return (struct blob) {.data = newdata, .size = used}; - - realloc_error: - free(data); - fclose(file); - return (struct blob) {.data = NULL}; -} diff --git a/src/common/common.c b/src/common/common.c new file mode 100644 index 0000000..508140d --- /dev/null +++ b/src/common/common.c @@ -0,0 +1,54 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "../include.h" +#include "common.h" + +int (*file_ext(char *file))(struct blob *, struct userdata *) { + size_t len = strlen(file); + #define ext(extension) memcmp(file + len - sizeof (extension) + 1, extension, sizeof (extension)) + if ((ext(".mptm") && ext(".mod") && ext(".xm") && ext(".s3m") && ext(".it")) == 0) { + return module_openmpt; + } else if ((ext(".mid") && ext(".midi")) == 0) { + return module_fluidsynth; + } + #undef ext + return NULL; +} + +struct blob load_file(char const *const name) { + const size_t START_SIZE = 1; + FILE *file = fopen(name, "rb"); + if (file == NULL) { + return (struct blob) {.data = NULL}; + } + void *data = malloc(START_SIZE); + size_t allocated = START_SIZE; + size_t used = 0; + while (1) { + size_t read = fread(data + used, 1, allocated - used, file); + if (read != allocated - used) { + used += read; + break; + } + used += read; + allocated *= 2; + void *const newdata = realloc(data, allocated); + if (newdata == NULL) { + goto realloc_error; + } + data = newdata; + } + void *const newdata = realloc(data, used); + if (newdata == NULL && used != 0) { + goto realloc_error; + } + fclose(file); + return (struct blob) {.data = newdata, .size = used}; + + realloc_error: + free(data); + fclose(file); + return (struct blob) {.data = NULL}; +} diff --git a/src/common/common.h b/src/common/common.h new file mode 100644 index 0000000..806212a --- /dev/null +++ b/src/common/common.h @@ -0,0 +1,7 @@ +#include "../include.h" + +int (*file_ext(char *file))(struct blob *, struct userdata *); +struct blob load_file(char const *const name); + +int module_openmpt(struct blob *file, struct userdata *userdata); +int module_fluidsynth(struct blob *file, struct userdata *userdata); diff --git a/src/portaudio.c b/src/portaudio.c index f4ca4b7..e8e9839 100644 --- a/src/portaudio.c +++ b/src/portaudio.c @@ -1,21 +1,15 @@ #define SDL_MAIN_HANDLED #include <portaudio.h> -#include <stdbool.h> #include <stdlib.h> #include <stdio.h> -#include <string.h> #include <signal.h> #include "include.h" - -int module_openmpt(struct blob *file, struct userdata *userdata); -int module_fluidsynth(struct blob *file, struct userdata *userdata); +#include "common/common.h" #define eprintf(...) fprintf(stderr, __VA_ARGS__) -static const int WINDOW_WIDTH = 160, WINDOW_HEIGHT = 90; - volatile sig_atomic_t keep_going = 1; void sigint_handler(int sig_num) { @@ -112,51 +106,3 @@ int main(int argc, char **argv) { error: return EXIT_FAILURE; } - -int (*file_ext(char *file))(struct blob *, struct userdata *) { - size_t len = strlen(file); - #define ext(extension) memcmp(file + len - sizeof (extension) + 1, extension, sizeof (extension)) - if ((ext(".mptm") && ext(".mod") && ext(".xm") && ext(".s3m") && ext(".it")) == 0) { - return module_openmpt; - } else if ((ext(".mid") && ext(".midi")) == 0) { - return module_fluidsynth; - } - #undef ext - return NULL; -} - -struct blob load_file(char const *const name) { - const size_t START_SIZE = 1; - FILE *file = fopen(name, "rb"); - if (file == NULL) { - return (struct blob) {.data = NULL}; - } - void *data = malloc(START_SIZE); - size_t allocated = START_SIZE; - size_t used = 0; - while (1) { - size_t read = fread(data + used, 1, allocated - used, file); - if (read != allocated - used) { - used += read; - break; - } - used += read; - allocated *= 2; - void *const newdata = realloc(data, allocated); - if (newdata == NULL) { - goto realloc_error; - } - data = newdata; - } - void *const newdata = realloc(data, used); - if (newdata == NULL && used != 0) { - goto realloc_error; - } - fclose(file); - return (struct blob) {.data = newdata, .size = used}; - - realloc_error: - free(data); - fclose(file); - return (struct blob) {.data = NULL}; -} |