// // Copyright (c) 2026 Jacob McDonnell // // SPDX-License-Identifier: BSD-2-Clause // #include #include #include #include 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"); if (fp == NULL) { perror("fopen"); return -1; } // 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] = {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; write_tag(fp, array); 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)); flags.global = 0; flags.complex = 0; flags.logical = 0; flags.class = mxDOUBLE_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}; mData_t dim_data; dim_data.data = (void *)&dims; dim_data.tag.type = miINT32; dim_data.tag.size = 8; // Name mData_t name; name.tag.type = miINT8; name.tag.size = 7; name.data = "doubles"; mData_t data; data.tag.type = miDOUBLE; data.tag.size = sizeof(doubles); data.data = (void *)doubles; mTag_t array; array.type = miMATRIX; array.size = 96; write_tag(fp, array); write_data(fp, flags_data); write_data(fp, dim_data); write_data(fp, name); write_data(fp, data); }