summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/main.c77
-rw-r--r--example/test.matbin0 -> 320 bytes
-rw-r--r--src/matfile.c2
-rwxr-xr-xtools/format-all5
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
new file mode 100644
index 0000000..810c543
--- /dev/null
+++ b/example/test.mat
Binary files differ
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 {}
+