int main(int argc, char **argv) { void * ptr; tifiles_library_init(); PRINTF(tifiles_error_get, INT, -1, NULL); PRINTF(tifiles_error_free, INT, NULL); PRINTF(tifiles_model_to_string, STR, -1); PRINTF(tifiles_string_to_model, INT, NULL); PRINTF(tifiles_attribute_to_string, STR, -1); PRINTF(tifiles_string_to_attribute, INT, NULL); PRINTF(tifiles_class_to_string, STR, -1); PRINTF(tifiles_string_to_class, INT, NULL); PRINTF(tifiles_fext_of_group, STR, -1); PRINTF(tifiles_fext_of_backup, STR, -1); PRINTF(tifiles_fext_of_flash_app, STR, -1); PRINTF(tifiles_fext_of_flash_os, STR, -1); PRINTF(tifiles_fext_of_certif, STR, -1); PRINTF(tifiles_fext_get, STR, NULL); ptr = tifiles_fext_dup(NULL); PRINTF(, PTR, ptr); tifiles_fext_free(ptr); PRINTFVOID(tifiles_fext_free, NULL); PRINTF(tifiles_file_is_ti, INT, NULL); PRINTF(tifiles_file_is_single, INT, NULL); PRINTF(tifiles_file_is_group, INT, NULL); PRINTF(tifiles_file_is_regular, INT, NULL); PRINTF(tifiles_file_is_backup, INT, NULL); PRINTF(tifiles_file_is_os, INT, NULL); PRINTF(tifiles_file_is_app, INT, NULL); PRINTF(tifiles_file_is_tib, INT, NULL); PRINTF(tifiles_file_is_flash, INT, NULL); PRINTF(tifiles_file_is_tigroup, INT, NULL); PRINTF(tifiles_file_is_tno, INT, NULL); PRINTF(tifiles_file_has_ti_header, INT, NULL); PRINTF(tifiles_file_has_tib_header, INT, NULL); PRINTF(tifiles_file_has_tig_header, INT, NULL); PRINTF(tifiles_file_has_tifl_header, INT, NULL, (void *)0x12345678, (void *)0x12345678); PRINTF(tifiles_file_has_tno_header, INT, NULL); PRINTF(tifiles_model_to_dev_type, INT, -1); PRINTF(tifiles_file_test, INT, NULL, -1, -1); PRINTF(tifiles_file_get_model, INT, NULL); PRINTF(tifiles_file_get_class, INT, NULL); PRINTF(tifiles_file_get_type, STR, NULL); PRINTF(tifiles_file_get_icon, STR, NULL); PRINTF(tifiles_vartype2string, STR, -1, -1); PRINTF(tifiles_string2vartype, INT, -1, NULL); PRINTF(tifiles_vartype2fext, STR, -1, -1); PRINTF(tifiles_fext2vartype, INT, -1, NULL); PRINTF(tifiles_vartype2type, STR, -1, -1); PRINTF(tifiles_vartype2icon, STR, -1, -1); PRINTF(tifiles_calctype2signature, STR, -1); PRINTF(tifiles_signature2calctype, INT, NULL); PRINTF(tifiles_folder_type, INT, -1); PRINTF(tifiles_flash_type, INT, -1); PRINTF(tifiles_idlist_type, INT, -1); PRINTF(tifiles_calc_is_ti8x, INT, -1); PRINTF(tifiles_calc_is_ti9x, INT, -1); PRINTF(tifiles_calc_are_compat, INT, -1, -1); PRINTF(tifiles_has_folder, INT, -1); PRINTF(tifiles_is_flash, INT, -1); PRINTF(tifiles_has_backup, INT, -1); PRINTF(tifiles_checksum, INT, NULL, 1234567891); PRINTF(tifiles_hexdump, INT, NULL, 1); PRINTF(tifiles_get_varname, STR, NULL); PRINTF(tifiles_get_fldname, STR, NULL); PRINTF(tifiles_build_fullname, STR, -1, NULL, NULL, (void *)0x12345678); PRINTF(tifiles_build_fullname, STR, -1, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_build_fullname, STR, -1, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_build_filename, STR, -1, NULL); PRINTFVOID(tifiles_filename_free, NULL); ptr = tifiles_content_create_regular(-1); PRINTF(, PTR, ptr); tifiles_content_delete_regular(ptr); PRINTF(tifiles_content_delete_regular, INT, NULL); PRINTF(tifiles_file_read_regular, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_regular, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_regular, INT, NULL, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_regular, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_regular, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_file_display_regular, INT, NULL); ptr = tifiles_content_create_backup(-1); PRINTF(, PTR, ptr); tifiles_content_delete_backup(ptr); PRINTF(tifiles_content_delete_backup, INT, NULL); PRINTF(tifiles_file_read_backup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_backup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_backup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_backup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_display_backup, INT, NULL); ptr = tifiles_content_create_flash(-1); PRINTF(, PTR, ptr); tifiles_content_delete_flash(ptr); PRINTF(tifiles_file_read_flash, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_delete_flash, INT, NULL); PRINTF(tifiles_file_read_flash, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_flash, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash2, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash2, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_file_display_flash, INT, NULL); PRINTF(tifiles_content_dup_regular, PTR, NULL); PRINTF(tifiles_content_dup_flash, PTR, NULL); PRINTF(tifiles_file_display, INT, NULL); ptr = tifiles_content_create_group(0); PRINTF(, PTR, ptr); tifiles_content_delete_group(ptr); PRINTF(tifiles_content_delete_group, INT, NULL); PRINTF(tifiles_group_contents, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_contents, INT, (void *)0x12345678, NULL); PRINTF(tifiles_ungroup_content, INT, NULL, (void *)0x12345678); PRINTF(tifiles_ungroup_content, INT, (void *)0x12345678, NULL); PRINTF(tifiles_group_files, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_files, INT, (void *)0x12345678, NULL); PRINTF(tifiles_ungroup_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_add_entry, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_del_entry, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_add_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_add_file, INT, (void *)0x12345678, NULL); PRINTF(tifiles_group_del_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_del_file, INT, (void *)0x12345678, NULL); ptr = tifiles_content_create_tigroup(-1, -1); PRINTF(, PTR, ptr); tifiles_content_delete_tigroup(ptr); PRINTF(tifiles_content_delete_tigroup, INT, NULL); PRINTF(tifiles_file_read_tigroup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_tigroup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_tigroup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_tigroup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_display_tigroup, INT, NULL); PRINTF(tifiles_tigroup_contents, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_tigroup_contents, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_tigroup_contents, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_tigroup_files, INT, NULL, NULL); PRINTF(tifiles_tigroup_files, INT, NULL, NULL); PRINTF(tifiles_untigroup_file, INT, NULL, NULL); PRINTF(tifiles_untigroup_file, INT, NULL, NULL); PRINTF(tifiles_content_add_te, INT, NULL, NULL); PRINTF(tifiles_content_add_te, INT, NULL, NULL); PRINTF(tifiles_content_del_te, INT, NULL, NULL); PRINTF(tifiles_content_del_te, INT, NULL, NULL); PRINTF(tifiles_tigroup_add_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_add_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_del_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_del_file, INT, NULL, NULL); PRINTF(tifiles_te_create, PTR, NULL, -1, -1); PRINTF(tifiles_te_delete, INT, NULL); ptr = tifiles_te_create_array(0); PRINTF(, PTR, ptr); tifiles_te_delete_array(ptr); ptr = tifiles_te_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_te_delete_array(ptr); PRINTFVOID(tifiles_te_delete_array, NULL); PRINTF(tifiles_te_sizeof_array, INT, NULL); PRINTF(tifiles_comment_set_single, STR); PRINTF(tifiles_comment_set_group, STR); PRINTF(tifiles_comment_set_backup, STR); PRINTF(tifiles_comment_set_tigroup, STR); ptr = tifiles_ve_create(); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_alloc_data(0); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_with_data(0); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_with_data2(0, NULL); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); PRINTFVOID(tifiles_ve_delete, NULL); ptr = tifiles_ve_alloc_data(0); PRINTF(, PTR, ptr); tifiles_ve_free_data(ptr); ptr = tifiles_ve_realloc_data(NULL, 1); PRINTF(, PTR, ptr); tifiles_ve_free_data(ptr); PRINTFVOID(tifiles_ve_free_data, NULL); PRINTF(tifiles_ve_copy, PTR, NULL, NULL); PRINTF(tifiles_ve_dup, PTR, NULL); ptr = tifiles_ve_create_array(0); PRINTF(, PTR, ptr); tifiles_ve_delete_array(ptr); ptr = tifiles_ve_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_ve_delete_array(ptr); PRINTFVOID(tifiles_ve_delete_array, NULL); ptr = tifiles_fp_create(); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_alloc_data(0); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_with_data(0); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_with_data2(0, NULL); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); PRINTFVOID(tifiles_fp_delete, NULL); ptr = tifiles_fp_alloc_data(0); PRINTF(, PTR, ptr); tifiles_fp_free_data(ptr); ptr = tifiles_fp_realloc_data(NULL, 1); PRINTF(, PTR, ptr); tifiles_fp_free_data(ptr); PRINTFVOID(tifiles_fp_free_data, NULL); ptr = tifiles_fp_create_array(0); PRINTF(, PTR, ptr); tifiles_fp_delete_array(ptr); ptr = tifiles_fp_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_fp_delete_array(ptr); PRINTFVOID(tifiles_fp_delete_array, NULL); ptr = tifiles_create_table_of_entries(NULL, NULL); PRINTF(, PTR, ptr); tifiles_free_table_of_entries(ptr); PRINTFVOID(tifiles_free_table_of_entries, NULL); cert_functions_unit_test(); tifiles_library_exit(); return 0; }
/* Preload TI variables belonging with the selection */ void tilp_local_contents_load(void) { GList *ptr; int err; // TIGroups if (local.selection5 != NULL) { for(ptr = local.selection5; ptr; ptr = ptr->next) { FileEntry *fe5 = ptr->data; if(tifiles_file_is_tigroup(fe5->name)) { TigContent *content = NULL; FileContent **p, **contents1 = NULL; FlashContent **q, **contents2 = NULL; content = tifiles_content_create_tigroup(options.calc_model, 0); err = tifiles_file_read_tigroup(fe5->name, content); if(err) { tilp_err(err); continue; } err = tifiles_untigroup_content(content, &contents1, &contents2); if(err) { tilp_err(err); tifiles_content_delete_tigroup(content); continue; } tifiles_content_delete_tigroup(content); for(p = contents1; *p; p++) { FileEntry *fe1 = g_memdup(ptr->data, sizeof(FileEntry)); fe1->name = g_memdup(fe1->name, strlen(fe1->name)+1); fe1->content1 = *p; //g_free(fe1->name); //fe1->name = tifiles_build_filename(options.calc_model, (*p)->entries[0]); local.selection1 = g_list_append(local.selection1, fe1); } for(q = contents2; *q; q++) { FileEntry *fe3 = g_memdup(ptr->data, sizeof(FileEntry)); fe3->name = g_memdup(fe3->name, strlen(fe3->name)+1); fe3->content2 = *q; /* { VarEntry ve; g_free(fe3->name); strcpy(ve.name, (*q)->name); ve.type = (*q)->data_type; fe3->name = tifiles_build_filename(options.calc_model, &ve); }*/ local.selection3 = g_list_append(local.selection3, fe3); } } } } // Variables if (local.selection0 != NULL) { for(ptr = local.selection0; ptr; ptr = ptr->next) { FileEntry *fe0 = ptr->data; if(!g_ascii_strcasecmp(tifiles_fext_get(fe0->name), "8xidl")) continue; // doesn't send this pseudo-variable if(tifiles_file_is_single(fe0->name)) { FileEntry *fe1 = g_memdup(ptr->data, sizeof(FileEntry)); fe1->content1 = tifiles_content_create_regular(options.calc_model); err = tifiles_file_read_regular(fe1->name, fe1->content1); if(err) { // The content is already deleted by the subroutines of tifiles_file_read_regular. //tifiles_content_delete_regular(fe1->content1); g_free(fe1); continue; } local.selection1 = g_list_append(local.selection1, fe1); } else if(tifiles_file_is_group(fe0->name)) { // explode group files so that we have 1 VarEntry per item (skip/retry/cancel) FileContent **p, **dst = NULL; FileContent *src = NULL; src = tifiles_content_create_regular(options.calc_model); err = tifiles_file_read_regular(fe0->name, src); if(err) { // The content is already deleted by the subroutines of tifiles_file_read_regular. //tifiles_content_delete_regular(src); continue; } err = tifiles_ungroup_content(src, &dst); if(err) { tifiles_content_delete_regular(src); continue; } for(p = dst; *p; p++) { FileEntry *fe = g_memdup(ptr->data, sizeof(FileEntry)); fe->content1 = *p; local.selection1 = g_list_append(local.selection1, fe); } tifiles_content_delete_regular(src); } } } // Applications if(local.selection2 != NULL) { for(ptr = local.selection2; ptr; ptr = ptr->next) { FileEntry *fe2 = ptr->data; if(tifiles_file_is_app(fe2->name) || tifiles_file_test(fe2->name, TIFILE_OS, options.calc_model)) { FileEntry *fe3 = g_memdup(ptr->data, sizeof(FileEntry)); fe3->content2 = tifiles_content_create_flash(options.calc_model); err = tifiles_file_read_flash(fe2->name, fe3->content2); if(err) { tifiles_content_delete_flash(fe3->content2); g_free(fe3); continue; } local.selection3 = g_list_append(local.selection3, fe3); } } } // Reparse variables and change target folder if (local.selection1) { // replaced "" folder by "main" if(!tifiles_has_folder(options.calc_model)) return; for(ptr = local.selection1; ptr; ptr = ptr->next) { FileEntry *fe = ptr->data; FileContent *fc = fe->content1; unsigned int i; if(fc == NULL) continue; for(i = 0; i < fc->num_entries; i++) { VarEntry *ve = (fc->entries)[i]; if(!strcmp(ve->folder , "")) strcpy(ve->folder, "main"); } } } }
/** * tifiles_file_test: * @filename: a filename as string. * @type: type to check * @target: hand-held model or CALC_NONE for no filtering * * Check whether #filename is a TI file of type #type useable on a #target model. * This function is a generic one which overwrap and extends the tifiles_file_is_* * functions. * * This is a powerful function which allows checking of a specific file type for * a given target. * * Return value: a boolean value. **/ TIEXPORT2 int TICALL tifiles_file_test(const char *filename, FileClass type, CalcModel target) { char *e = tifiles_fext_get(filename); if (!tifiles_file_is_ti(filename)) return 0; if (!strcmp(e, "")) return 0; if(target > CALC_MAX) { tifiles_critical("tifiles_file_test: invalid target argument! This is a bug."); return 0; } if(type & TIFILE_SINGLE) { if(target && !g_ascii_strncasecmp(e, GROUP_FILE_EXT[target], 2)) return !0; else return tifiles_file_is_single(filename); } if(type & TIFILE_GROUP) { if(target && !g_ascii_strcasecmp(e, GROUP_FILE_EXT[target])) return !0; else return tifiles_file_is_group(filename); } if(type & TIFILE_REGULAR) { return tifiles_file_test(filename, TIFILE_SINGLE, target) || tifiles_file_test(filename, TIFILE_GROUP, target); } if(type & TIFILE_BACKUP) { if(target && !g_ascii_strcasecmp(e, BACKUP_FILE_EXT[target])) return !0; else return tifiles_file_is_backup(filename); } if(type & TIFILE_OS) { if(target && !g_ascii_strcasecmp(e, FLASH_OS_FILE_EXT[target])) return !0; else if(target && tifiles_file_is_tib(filename)) { FILE *f; uint8_t data[16]; f = g_fopen(filename, "rb"); if(f == NULL) return 0; fread_n_chars(f, 16, (char *)data); fclose(f); switch(data[8]) { case 1: if(target != CALC_TI92P) return 0; case 3: if(target != CALC_TI89) return 0; case 8: if(target != CALC_V200) return 0; case 9: if(target != CALC_TI89T) return 0; } return !0; } else return tifiles_file_is_os(filename); } if(type & TIFILE_APP) { if(target && !g_ascii_strcasecmp(e, FLASH_APP_FILE_EXT[target])) return !0; else return tifiles_file_is_app(filename); } if(type & TIFILE_FLASH) { return tifiles_file_test(filename, TIFILE_OS, target) || tifiles_file_test(filename, TIFILE_APP, target); } if(type & TIFILE_TIGROUP) { if(target) { // No easy/light way for this part: we have to load the whole file // and to parse the TigEntry structures. TigContent *content; int ret, ok=0; int k; if(!tifiles_file_has_tig_header(filename)) return 0; content = tifiles_content_create_tigroup(CALC_NONE, 0); ret = tifiles_file_read_tigroup(filename, content); if(ret) return 0; for (k = 0; k < content->n_apps; k++) { TigEntry *te = content->app_entries[k]; if(tifiles_calc_are_compat(te->content.regular->model, target)) ok++; } for (k = 0; k < content->n_vars; k++) { TigEntry *te = content->var_entries[k]; if(tifiles_calc_are_compat(te->content.regular->model, target)) ok++; } tifiles_content_delete_tigroup(content); return ok; } else return tifiles_file_is_tigroup(filename); } return 0; }
static int test_tigroup() { TigContent *content = NULL; TigEntry te = { NULL, 0, { NULL } }; int ret = -1; // SVN can't handle file like 'pépé'. You will have to rename it from pepe to pépé and // uncomment line below and another line. //char *name = g_filename_from_utf8("tig/p\xC3\xA9p\xC3\xA9.tig", -1, NULL, NULL, NULL); char *array[2]; char files[2][1024]; printf("--> Testing TiGroup support (r/w)...\n"); tifiles_file_display_tigroup(PATH("tig/test.tig")); content = tifiles_content_create_tigroup(CALC_NONE, 0); if (content != NULL) { ret = tifiles_file_read_tigroup(PATH("tig/test2.tig"), content); if (!ret) { ret = tifiles_file_write_tigroup(PATH("tig/test2_.tig"), content); } tifiles_content_delete_tigroup(content); } if (!ret) { content = tifiles_content_create_tigroup(CALC_NONE, 0); if (content != NULL) { ret = tifiles_file_read_tigroup(PATH("tig/test.tig"), content); if (!ret) { ret = tifiles_file_write_tigroup(PATH("tig/test_.tig"), content); if (!ret) { ret = compare_files(PATH("tig/test.tig"), PATH2("tig/test_.tig")); } } tifiles_content_delete_tigroup(content); } } if (!ret) { printf("--> Testing add/del from TiGroup support (r/w)...\n"); ret = tifiles_tigroup_add_file(PATH("tig/C.8Xn"), PATH2("tig/test2.tig")); if (!ret) { ret = tifiles_tigroup_add_file(PATH("tig/D.8Xn"), PATH2("tig/test2.tig")); if (!ret) { te.filename = strdup("C.8Xn"); ret = tifiles_tigroup_del_file(&te, PATH("tig/test2.tig")); if (!ret) { te.filename = strdup("D.8Xn"); ret = tifiles_tigroup_del_file(&te, PATH("tig/test2.tig")); if (!ret) { tifiles_file_display_tigroup(PATH("tig/test2.tig")); ret = compare_files(PATH("tig/test.tig"), PATH2("tig/test2.tig")); } } } } } if (!ret) { printf("--> Testing TiGroup support (group/ungroup)...\n"); strncpy(files[0], PATH("tig/str.89s"), 1023); files[0][1023] = 0; strncpy(files[1], PATH("tig/ticabfra.89k"), 1023); files[1][1023] = 0; array[0] = files[0]; array[1] = files[1]; ret = tifiles_tigroup_files(array, PATH("tig/test_.tig")); if (!ret) { tifiles_file_display(PATH("tig/test_.tig")); ret = tifiles_untigroup_file(PATH("tig/test.tig"), NULL); if (!ret) { move_file("A.8Xn", "tig/AA.8Xn"); move_file("B.8Xn", "tig/BB.8Xn"); ret = compare_files(PATH("tig/A.8Xn"), PATH2("tig/AA.8Xn")); if (!ret) { ret = compare_files(PATH("tig/B.8Xn"), PATH2("tig/BB.8Xn")); } } } } return ret; }