int CFREDDoc::autoload() { char name[256], backup_name[256]; int i, r; FILE *fp; cf_create_default_path_string(name, sizeof(name) - 1, CF_TYPE_MISSIONS); strcat_s(name, MISSION_BACKUP_NAME); strcpy_s(backup_name, name); strcat_s(name, ".002"); // Check if Backup.002 exists fp = fopen(name, "r"); if (!fp) return 0; fclose(fp); if (Briefing_dialog) { // clean things up first Briefing_dialog->icon_select(-1); } // Load Backup.002 // editor_init_mission(); r = load_mission(name); Update_window = 1; // Delete Backup.001 auto len = strlen(backup_name); strcat_s(backup_name, ".001"); cf_delete(backup_name, CF_TYPE_MISSIONS); // Rename Backups. .002 becomes .001, .003 becomes .002, etc. for (i = 1; i < BACKUP_DEPTH; i++) { sprintf(backup_name + len, ".%.3d", i + 1); sprintf(name + len, ".%.3d", i); cf_rename(backup_name, name, CF_TYPE_MISSIONS); undo_desc[i] = undo_desc[i + 1]; } // Reduce the undo count and check if we can do another undo op. Undo_count--; check_undo(); return r; }
int CFREDDoc::check_undo() { char name[256]; FILE *fp; Undo_available = 0; if (!Undo_count) { return 0; } cf_create_default_path_string(name, sizeof(name) - 1, CF_TYPE_MISSIONS); strcat_s(name, MISSION_BACKUP_NAME); strcat_s(name, ".002"); // Check if Backup.002 exists fp = fopen(name, "r"); if (!fp) return 0; fclose(fp); Undo_available = 1; return 1; }
bool pilotfile_convert::plr_convert(const char *fname, bool inferno) { Assert( fname != NULL ); SCP_string filename; bool rval = true; if (plr == NULL) { plr = new(std::nothrow) plr_data; } if (plr == NULL) { return false; } filename.reserve(200); cf_create_default_path_string(filename, CF_TYPE_SINGLE_PLAYERS, (inferno) ? const_cast<char*>("inferno") : NULL); if (inferno) { filename.append(DIR_SEPARATOR_STR); } filename.append(fname); filename.append(".pl2"); mprintf((" PL2 => Converting '%s'...\n", filename.c_str())); cfp = cfopen(const_cast<char*>(filename.c_str()), "rb", CFILE_NORMAL); if ( !cfp ) { mprintf((" PL2 => Unable to open for import!\n", fname)); return false; } try { plr_import(); } catch (const char *err) { mprintf(( " PL2 => Import ERROR: %s\n", err)); rval = false; } cfclose(cfp); cfp = NULL; if ( !rval ) { return false; } filename.assign(fname); filename.append(".plr"); cfp = cfopen(const_cast<char*>(filename.c_str()), "wb", CFILE_NORMAL, CF_TYPE_PLAYERS); if ( !cfp ) { mprintf((" PLR => Unable to open for export!\n", fname)); return false; } try { plr_export(); } catch (const char *err) { mprintf((" PLR => Export ERROR: %s\n", err)); rval = false; } cfclose(cfp); cfp = NULL; if (rval) { mprintf((" PLR => Conversion complete!\n")); } return rval; }
bool pilotfile_convert::csg_convert(const char *fname, bool inferno) { Assert( fname != NULL ); Assert( plr != NULL); Assert( csg == NULL ); SCP_string filename; bool rval = true; csg = new(std::nothrow) csg_data; if (csg == NULL) { return false; } filename.reserve(200); cf_create_default_path_string(filename, CF_TYPE_SINGLE_PLAYERS, (inferno) ? "inferno" : nullptr, false, CF_LOCATION_ROOT_USER | CF_LOCATION_ROOT_GAME | CF_LOCATION_TYPE_ROOT); if (inferno) { filename.append(DIR_SEPARATOR_STR); } filename.append(fname); filename.append(".cs2"); mprintf((" CS2 => Converting '%s'...\n", filename.c_str())); cfp = cfopen(filename.c_str(), "rb", CFILE_NORMAL); if ( !cfp ) { mprintf((" CS2 => Unable to open '%s' for import!\n", fname)); delete csg; csg = NULL; return false; } try { csg_import(inferno); } catch (const std::exception& err) { mprintf((" CS2 => Import ERROR: %s\n", err.what())); rval = false; } cfclose(cfp); cfp = NULL; if ( !rval ) { delete csg; csg = NULL; return false; } filename.assign(fname); filename.append(".csg"); cfp = cfopen(filename.c_str(), "wb", CFILE_NORMAL, CF_TYPE_PLAYERS, false, CF_LOCATION_ROOT_USER | CF_LOCATION_ROOT_GAME | CF_LOCATION_TYPE_ROOT); if ( !cfp ) { mprintf((" CSG => Unable to open '%s' for export!\n", fname)); return false; } try { csg_export(); } catch (const char *err) { mprintf((" CSG => Export ERROR: %s\n", err)); rval = false; } cfclose(cfp); cfp = NULL; delete csg; csg = NULL; if (rval) { mprintf((" CSG => Conversion complete!\n")); } return rval; }
void fs2netd_spew_table_checksums(char *outfile) { char full_name[MAX_PATH_LEN]; int count; FILE *out = NULL; char description[512] = { 0 }; char filename[65] = { 0 }; size_t offset = 0; char *p = NULL; if ( Table_valid_status.empty() ) { return; } cf_create_default_path_string(full_name, sizeof(full_name) - 1, CF_TYPE_ROOT, outfile); // open the outfile out = fopen(full_name, "wt"); if (out == NULL) { return; } p = Cmdline_spew_table_crcs; while (*p && (offset < sizeof(description))) { if (*p == '"') { description[offset++] = '"'; description[offset++] = '"'; } else { description[offset++] = *p; } p++; } // header fprintf(out, "filename,CRC32,description\r\n"); count = (int)Table_valid_status.size(); // do all the checksums for (SCP_vector<crc_valid_status>::iterator tvs = Table_valid_status.begin(); tvs != Table_valid_status.end(); ++tvs) { offset = 0; p = tvs->name; while (*p && (offset < sizeof(filename))) { if (*p == '"') { filename[offset++] = '"'; filename[offset++] = '"'; } else { filename[offset++] = *p; } p++; } filename[offset] = '\0'; fprintf(out, "\"%s\",%u,\"%s\"\r\n", filename, tvs->crc32, description); } fflush(out); fclose(out); }