static int st_fdc_save_disk (st_fdc_t *fdc, unsigned drive) { int r; disk_t *dsk; disk_psi_t *dskpsi; psi_img_t *img; dsk = dsks_get_disk (fdc->dsks, fdc->diskid[drive]); if (dsk == NULL) { return (1); } img = pri_decode_mfm (fdc->img[drive], NULL); if (img == NULL) { return (1); } if (dsk_get_type (dsk) == PCE_DISK_PSI) { dskpsi = dsk->ext; psi_img_del (dskpsi->img); dskpsi->img = img; dskpsi->dirty = 1; } else { r = st_fdc_save_block (fdc, drive, dsk, img); psi_img_del (img); if (r) { return (1); } } return (0); }
static int pri_decode (pri_img_t *img, const char *type, const char *fname) { int r; psi_img_t *dimg; if (strcmp (type, "gcr-raw") == 0) { return (pri_decode_gcr_raw (img, fname)); } else if (strcmp (type, "mfm-raw") == 0) { return (pri_decode_mfm_raw (img, fname)); } else if (strcmp (type, "raw") == 0) { return (pri_decode_raw (img, fname)); } if (strcmp (type, "gcr") == 0) { dimg = pri_decode_gcr (img); } else if (strcmp (type, "mfm") == 0) { dimg = pri_decode_mfm (img); } else { dimg = NULL; } if (dimg == NULL) { return (1); } r = psi_save (fname, dimg, PSI_FORMAT_NONE); psi_img_del (dimg); return (r); }