コード例 #1
0
ファイル: ucon64.c プロジェクト: RoelandK/quickdev16
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);
}
コード例 #2
0
ファイル: format.c プロジェクト: Godzil/quickdev16
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;
}