Пример #1
0
Файл: fdc.c Проект: LasDesu/pce
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);
}
Пример #2
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);
}