int fappend_data_to_fs(FILE *f, void *data, unsigned int data_size) { // Append data to an existing fsave. In this case, the file must // be pointing at the beginning of the fsave header. // // File pointer is returned to original position. if(f == NULL) { return MCF_ERR_NOFILE; } if(data == NULL || data_size == 0) { return MCF_ERR_NODATA; } int rv = 0; fsave bfs = null_fs(); long pos = ftell(f); // Get the header - afterwards pointer will be at the beginning of the data. if((rv = get_fs_header_from_file(f, &bfs)) != 0) { goto error; } fseek(f, -1*sizeof(unsigned int), SEEK_CUR); unsigned int new_size = bfs.size + data_size; if(fwrite(&new_size, sizeof(unsigned int), 1, f) < 1) { rv = MCF_ERR_FILEWRITE; goto error; } fseek(f, bfs.size, SEEK_CUR); if(rv = insert_into_file(f, data, data_size, -1)) { goto error; } error: free_fsave(&bfs); fseek(f, pos, SEEK_SET); return rv; }
int main(void) { buf_code_fp = fopen("u8g2_d_memory.c", "w"); fprintf(buf_code_fp, "/* u8g2_d_memory.c */\n"); fprintf(buf_code_fp, "/* generated code, codebuild, u8g2 project */\n"); fprintf(buf_code_fp, "\n"); fprintf(buf_code_fp, "#include \"u8g2.h\"\n"); fprintf(buf_code_fp, "\n"); buf_header_fp = fopen("u8g2_memory.h", "w"); //fprintf(buf_header_fp, "/* start of generated code, codebuild, u8g2 project */\n"); setup_code_fp = fopen("u8g2_d_setup.c", "w"); fprintf(setup_code_fp, "/* u8g2_d_setup.c */\n"); fprintf(setup_code_fp, "/* generated code, codebuild, u8g2 project */\n"); fprintf(setup_code_fp, "\n"); fprintf(setup_code_fp, "#include \"u8g2.h\"\n"); fprintf(setup_code_fp, "\n"); setup_header_fp = fopen("u8g2_setup.h", "w"); //fprintf(setup_header_fp, "/* start of generated code, codebuild, u8g2 project */\n"); u8g2_cpp_header_fp = fopen("U8g2lib.h", "w"); fprintf(u8g2_cpp_header_fp, "/* generated code (codebuild), u8g2 project */\n"); u8x8_cpp_header_fp = fopen("U8x8lib.h", "w"); fprintf(u8x8_cpp_header_fp, "/* generated code (codebuild), u8g2 project */\n"); u8x8_setup_c_md_fp = fopen("u8x8setupc.md", "w"); u8x8_setup_cpp_md_fp = fopen("u8x8setupcpp.md", "w"); u8g2_setup_c_md_fp = fopen("u8g2setupc.md", "w"); u8g2_setup_cpp_md_fp = fopen("u8g2setupcpp.md", "w"); do_controller_list(); md_fp = u8g2_setup_cpp_md_fp; is_arduino_cpp = 1; is_u8g2 = 1; do_md_controller_list(); md_fp = u8g2_setup_c_md_fp; is_arduino_cpp = 0; is_u8g2 = 1; do_md_controller_list(); md_fp = u8x8_setup_cpp_md_fp; is_arduino_cpp = 1; is_u8g2 = 0; do_md_controller_list(); md_fp = u8x8_setup_c_md_fp; is_arduino_cpp = 0; is_u8g2 = 0; do_md_controller_list(); fprintf(buf_code_fp, "/* end of generated code */\n"); fclose(buf_code_fp); //fprintf(buf_header_fp, "/* end of generated code */\n"); fclose(buf_header_fp); fprintf(setup_code_fp, "/* end of generated code */\n"); fclose(setup_code_fp); //fprintf(setup_header_fp, "/* end of generated code */\n"); fclose(setup_header_fp); fclose(u8g2_cpp_header_fp); fclose(u8x8_cpp_header_fp); fclose(u8x8_setup_c_md_fp); fclose(u8x8_setup_cpp_md_fp); fclose(u8g2_setup_c_md_fp); fclose(u8g2_setup_cpp_md_fp); system("cp u8g2_d_memory.c ../../csrc/."); puts("generate u8g2_d_memory.c"); system("cp u8g2_d_setup.c ../../csrc/."); puts("generate u8g2_d_setup.c"); insert_into_file("../../csrc/u8g2.h", "u8g2_memory.h", "/* u8g2_d_memory.c generated code start */", "/* u8g2_d_memory.c generated code end */"); insert_into_file("../../csrc/u8g2.h", "u8g2_setup.h", "/* u8g2_d_setup.c generated code start */", "/* u8g2_d_setup.c generated code end */"); insert_into_file("../../cppsrc/U8g2lib.h", "U8g2lib.h", "/* Arduino constructor list start */", "/* Arduino constructor list end */"); insert_into_file("../../cppsrc/U8x8lib.h", "U8x8lib.h", "// constructor list start", "// constructor list end"); insert_into_file("../../../u8g2.wiki/u8g2setupc.md", "u8g2setupc.md", "# Setup Function Reference", "# Links"); insert_into_file("../../../u8g2.wiki/u8g2setupcpp.md", "u8g2setupcpp.md", "# Constructor Reference", "# Links"); insert_into_file("../../../u8g2.wiki/u8x8setupc.md", "u8x8setupc.md", "# Setup Function Reference", "# Links"); insert_into_file("../../../u8g2.wiki/u8x8setupcpp.md", "u8x8setupcpp.md", "# Constructor Reference", "# Links"); return 0; }