diff options
| -rw-r--r-- | example/main.c | 77 | ||||
| -rw-r--r-- | example/test.mat | bin | 0 -> 320 bytes | |||
| -rw-r--r-- | src/matfile.c | 2 | ||||
| -rwxr-xr-x | tools/format-all | 5 |
4 files changed, 72 insertions, 12 deletions
diff --git a/example/main.c b/example/main.c index bda4c89..08d1894 100644 --- a/example/main.c +++ b/example/main.c @@ -3,7 +3,15 @@ #include <stdio.h> #include <string.h> -double floats[5] = {0.0, 1.0, 3.14, 2.72, 5.5}; +int nums[2][4] = { + {1, 2, 3, 4}, + {2, 4, 6, 8}, +}; + +double doubles[5] = {3.14, 2.72, 3.7, 22. / 7., 7.7}; + +void write_int_array(FILE *fp); +void write_double_array(FILE *fp); int main(void) { FILE *fp = fopen("test.mat", "w"); @@ -14,14 +22,57 @@ int main(void) { // Write File Header assert(write_header(fp)); + write_int_array(fp); + write_double_array(fp); + + fclose(fp); + return 0; +} + +void write_int_array(FILE *fp) { + // Array Flags + mArrayFlags_t flags; + memset(&flags, 0, sizeof(flags)); + flags.global = 0; + flags.complex = 0; + flags.logical = 0; + flags.class = mxINT32_CLASS; + + mData_t flags_data; + flags_data.tag.type = miUINT32; + flags_data.tag.size = 8; + flags_data.data = (void *)&flags; // Setup Array Dimensions - int32_t dims[2] = {1, 5}; + int32_t dims[2] = {4, 2}; mData_t dim_data; dim_data.data = (void *)&dims; dim_data.tag.type = miINT32; dim_data.tag.size = 8; + // Name + mSmallData_t name; + name.tag.type = miINT8; + name.tag.size = 1; + name.data = 'A'; + + mData_t data; + data.tag.type = miINT32; + data.tag.size = sizeof(nums); + data.data = (void *)nums; + + mTag_t array; + array.type = miMATRIX; + array.size = 80; + + fwrite((void *)&array, 1, sizeof(array), fp); + write_data(fp, flags_data); + write_data(fp, dim_data); + write_small_data(fp, name); + write_data(fp, data); +} + +void write_double_array(FILE *fp) { // Array Flags mArrayFlags_t flags; memset(&flags, 0, sizeof(flags)); @@ -35,16 +86,23 @@ int main(void) { flags_data.tag.size = 8; flags_data.data = (void *)&flags; + // Setup Array Dimensions + int32_t dims[2] = {1, 5}; + mData_t dim_data; + dim_data.data = (void *)&dims; + dim_data.tag.type = miINT32; + dim_data.tag.size = 8; + // Name - mSmallData_t name; + mData_t name; name.tag.type = miINT8; - name.tag.size = 1; - name.data = 'A'; + name.tag.size = 7; + name.data = "doubles"; mData_t data; data.tag.type = miDOUBLE; - data.tag.size = sizeof(floats); - data.data = (void *)floats; + data.tag.size = sizeof(doubles); + data.data = (void *)doubles; mTag_t array; array.type = miMATRIX; @@ -53,9 +111,6 @@ int main(void) { fwrite((void *)&array, 1, sizeof(array), fp); write_data(fp, flags_data); write_data(fp, dim_data); - write_small_data(fp, name); + write_data(fp, name); write_data(fp, data); - - fclose(fp); - return 0; } diff --git a/example/test.mat b/example/test.mat Binary files differnew file mode 100644 index 0000000..810c543 --- /dev/null +++ b/example/test.mat diff --git a/src/matfile.c b/src/matfile.c index 0643921..c629db0 100644 --- a/src/matfile.c +++ b/src/matfile.c @@ -39,7 +39,7 @@ bool write_data(FILE *file, const mData_t data) { const size_t padding = data.tag.size % 8; const uint8_t padding_buffer[8] = {0}; if (padding > 0 && success) { - success = (fwrite((const void *)padding_buffer, 1, padding, file) == padding) && success; + success = (fwrite((const void *)padding_buffer, 1, (8 - padding), file) == padding) && success; } return success; diff --git a/tools/format-all b/tools/format-all new file mode 100755 index 0000000..0493a98 --- /dev/null +++ b/tools/format-all @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +find . -type f -name "*.c" -print0 | xargs -0 -I {} clang-format -i {} +find . -type f -name "*.h" -print0 | xargs -0 -I {} clang-format -i {} + |
