static int load_project_file(GraceApp *gapp, const char *fn, int as_template) { GProject *gp; Quark *project, *gr, **graphs; int i, ngraphs; AMem *amem; if (gapp->gp && gproject_get_top(gapp->gp) && quark_dirtystate_get(gproject_get_top(gapp->gp)) && !yesno("Abandon unsaved changes?", NULL, NULL, NULL)) { return RETURN_FAILURE; } gproject_free(gapp->gp); gp = load_any_project(gapp, fn); if (!gp) { errmsg("Failed loading project file"); return RETURN_FAILURE; } project = gproject_get_top(gp); gapp->rt->print_file[0] = '\0'; gapp_set_project(gapp, gp); if (as_template) { grfile_free(gp->grf); gp->grf = NULL; } amem = quark_get_amem(project); /* Set undo limit of 16MB */ amem_set_undo_limit(amem, 0x1000000L); /* Get initial memory snapshot */ amem_snapshot(amem); /* try to switch to the first active graph */ ngraphs = project_get_graphs(project, &graphs); for (i = 0; i < ngraphs; i++) { gr = graphs[i]; if (select_graph(gr) == RETURN_SUCCESS) { break; } } xfree(graphs); #ifndef NONE_GUI select_quark_explorer(project); update_all(); #endif if (project) { return RETURN_SUCCESS; } else { return RETURN_FAILURE; } }
void gproject_free(GProject *gp) { if (gp) { quark_free(gp->q); grfile_free(gp->grf); xfree(gp); } }
GProject *load_xgr_project(GraceApp *gapp, const char *fn) { GrFILE *grf; GProject *gp; char *epath; epath = grace_path(gapp->grace, fn); grf = grfile_openr(epath); xfree(epath); if (grf == NULL) { return NULL; } gp = gproject_load(gapp->grace, grf, AMEM_MODEL_LIBUNDO); grfile_free(grf); return gp; }
int save_project(GProject *gp, char *fn) { GrFILE *grf; Quark *project = gproject_get_top(gp); GUI *gui = gui_from_quark(project); int noask_save; static int save_unsupported = FALSE; int retval; if (!project || !fn) { return RETURN_FAILURE; } if (fn && strstr(fn, ".agr")) { errmsg("Cowardly refusing to overwrite an agr file"); return RETURN_FAILURE; } if (!save_unsupported && !yesno("The current format may be unsupported by the final release. Continue?", "Yeah, I'm brave!", NULL, "doc/UsersGuide.html#unsupported_format")) { return RETURN_FAILURE; } save_unsupported = TRUE; noask_save = gui->noask; if (strings_are_equal(gproject_get_docname(gp), fn)) { /* If saving under the same name, don't warn about overwriting */ gui->noask = TRUE; } grf = grfile_openw(fn); if (!grf) { return RETURN_FAILURE; } gui->noask = noask_save; retval = gproject_save(gp, grf); grfile_free(grf); return retval; }