void ucon64_exit (void) { #ifdef USE_DISCMAGE if (ucon64.discmage_enabled) if (ucon64.image) dm_close ((dm_image_t *) ucon64.image); #endif handle_registered_funcs (); fflush (stdout); }
dm_image_t * dm_reopen (const char *fname, uint32_t flags, dm_image_t *image) // recurses through all <image_type>_init functions to find correct image type { typedef struct { int type; int (*init) (dm_image_t *); int (*track_init) (dm_track_t *, FILE *); } st_probe_t; static st_probe_t probe[] = { {DM_CDI, cdi_init, cdi_track_init}, {DM_NRG, nrg_init, nrg_track_init}, // {DM_CCD, ccd_init, ccd_track_init}, {DM_CUE, cue_init, dm_track_init}, {DM_TOC, toc_init, dm_track_init}, {DM_OTHER, other_init, dm_track_init}, {0, NULL, NULL} }; int x, identified = 0; // static dm_image_t image2; FILE *fh = NULL; #ifdef DEBUG printf ("sizeof (dm_track_t) == %d\n", sizeof (dm_track_t)); printf ("sizeof (dm_image_t) == %d\n", sizeof (dm_image_t)); fflush (stdout); #endif if (image) dm_close (image); if (access (fname, F_OK) != 0) return NULL; if (!image) #if 1 image = (dm_image_t *) malloc (sizeof (dm_image_t)); #else image = (dm_image_t *) &image2; #endif memset (image, 0, sizeof (dm_image_t)); if (!image) return NULL; image->desc = ""; // deprecated for (x = 0; probe[x].type; x++) if (probe[x].init) { dm_clean (image); image->flags = flags; strcpy (image->fname, fname); if (!probe[x].init (image)) { identified = 1; break; } } if (!identified) // unknown image return NULL; image->type = probe[x].type; if ((fh = fopen (image->fname, "rb")) == NULL) return image; // verify header or sheet informations for (x = 0; x < image->tracks; x++) { dm_track_t *track = (dm_track_t *) &image->track[x]; if (track->mode != 0) // AUDIO/2352 has no iso header track->iso_header_start = track->track_start + (track->sector_size * (16 + track->pregap_len)) + track->seek_header; #ifdef DEBUG printf ("iso header offset: %d\n\n", (int) track->iso_header_start); fflush (stdout); #endif track->id = dm_get_track_mode_id (track->mode, track->sector_size); } fclose (fh); return image; }