void execute_load(char* command, ListT* tasks, TaskT** current_task) { ListT* files; //check if we should save if (tasks != NULL && tasks->size > 0) { char* save_before_load; printf("Save before load? (y)/n? "); get_user_input(&save_before_load); if (save_before_load != NULL && strlen(save_before_load) > 0 && save_before_load[0] == 'y' || save_before_load[0] == 'Y') { printf("saving\n"); execute_save(command, tasks, current_task); } } files = get_loadables(YES); if (files->size > 0) { ListT* _tasks; TaskT* loaded_task; int user_selection; char *filename, *abs_file;; while ((user_selection = get_numeric_input("Choose which file to load? ")) < 0 || user_selection >= files->size) ; DEBUG("user_selection %d", user_selection); printf("\n\n"); filename = list_obj_at_idx(files, user_selection); abs_file = malloc(strlen(filename) + 20); sprintf(abs_file, "tasks/%s", filename); //destroy all tasks in memory list_empty(tasks, YES); _tasks = task_read(abs_file); list_copy(tasks, _tasks); *current_task = tasks != NULL && tasks->size > 0 ? list_obj_at_idx(tasks, 0) : NULL; list_destroy(_tasks); free(abs_file); } else { puts("No files to load."); } list_destroy(files); }
int main(int argc, char **argv) { const char *chip_str, *task, *reg_str; int chip; unsigned int reg, mask, set, value; int err; if (argc != 4 && argc != 5 && argc != 6) goto err_usage; chip_str = argv[1]; task = argv[2]; reg_str = argv[3]; if (strcasecmp(chip_str, "retu") == 0) chip = CHIP_RETU; else if (strcasecmp(chip_str, "tahvo") == 0) chip = CHIP_TAHVO; else goto err_usage; err = str2uint(reg_str, ®); if (err) goto err_usage; if (strcasecmp(task, "read") == 0) { if (argc != 4) goto err_usage; err = task_read(chip, reg, &value); if (err) { fprintf(stderr, "Failed to read %s register 0x%02X\n", chip2str(chip), reg); return 1; } printf("0x%04X\n", value); } else if (strcasecmp(task, "write") == 0) { if (argc != 5) goto err_usage; err = str2uint(argv[4], &value); if (err) goto err_usage; err = task_write(chip, reg, value); if (err) { fprintf(stderr, "Failed to write %s register 0x%02X\n", chip2str(chip), reg); return 1; } } else if (strcasecmp(task, "maskset") == 0) { if (argc != 6) goto err_usage; err = str2uint(argv[4], &mask); err |= str2uint(argv[5], &set); if (err) goto err_usage; err = task_maskset(chip, reg, mask, set); if (err) { fprintf(stderr, "Failed to maskset %s register 0x%02X\n", chip2str(chip), reg); return 1; } } else goto err_usage; return 0; err_usage: usage(stderr, argc, argv); return 1; }