#include <errno.h>
#include <zlib.h>
+#ifdef HAVE_CHD
#include <chd.h>
+#endif
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
unsigned int sector_in_blk;
} *compr_img;
+#ifdef HAVE_CHD
static struct {
unsigned char (*buffer)[CD_FRAMESIZE_RAW + SUB_FRAMESIZE];
chd_file* chd;
unsigned int current_hunk;
unsigned int sector_in_hunk;
} *chd_img;
+#endif
int (*cdimg_read_func)(FILE *f, unsigned int base, void *dest, int sector);
return -1;
}
+#ifdef HAVE_CHD
static int handlechd(const char *isofile) {
chd_img = calloc(1, sizeof(*chd_img));
if (chd_img == NULL)
cddaBigEndian = TRUE;
numtracks = 0;
- int frame_offset = 0;
+ int frame_offset = 150;
memset(ti, 0, sizeof(ti));
while (1)
ti[md.track].type = !strncmp(md.type, "AUDIO", 5) ? CDDA : DATA;
sec2msf(frame_offset + md.pregap, ti[md.track].start);
- sec2msf(md.frames, ti[md.track].length);
+ sec2msf(md.frames - md.pregap, ti[md.track].length);
if (!strcmp(md.type, md.pgtype))
frame_offset += md.pregap;
ti[md.track].start_offset = frame_offset * CD_FRAMESIZE_RAW;
- frame_offset += (md.frames + 3) & ~3;
+ frame_offset += md.frames;
frame_offset += md.postgap;
numtracks++;
}
}
return -1;
}
+#endif
// this function tries to get the .sub file of the given .img
static int opensubfile(const char *isoname) {
return CD_FRAMESIZE_RAW;
}
+#ifdef HAVE_CHD
static int cdread_chd(FILE *f, unsigned int base, void *dest, int sector)
{
int hunk;
CD_FRAMESIZE_RAW);
return CD_FRAMESIZE_RAW;
}
-
+#endif
static int cdread_2048(FILE *f, unsigned int base, void *dest, int sector)
{
int ret;
return compr_img->buff_raw[compr_img->sector_in_blk] + 12;
}
+#ifdef HAVE_CHD
static unsigned char * CALLBACK ISOgetBuffer_chd(void) {
return chd_img->buffer[chd_img->sector_in_hunk] + 12;
}
+#endif
static unsigned char * CALLBACK ISOgetBuffer(void) {
return cdbuffer + 12;
boolean isMode1ISO = FALSE;
char alt_bin_filename[MAXPATHLEN];
const char *bin_filename;
+ char image_str[1024] = {0};
if (cdHandle != NULL) {
return 0; // it's already open
return -1;
}
- SysPrintf(_("Loaded CD Image: %s"), GetIsoFile());
+ sprintf(image_str, "Loaded CD Image: %s", GetIsoFile());
cddaBigEndian = FALSE;
subChanMixed = FALSE;
cdimg_read_func = cdread_normal;
if (parsetoc(GetIsoFile()) == 0) {
- SysPrintf("[+toc]");
+ strcat(image_str, "[+toc]");
}
else if (parseccd(GetIsoFile()) == 0) {
- SysPrintf("[+ccd]");
+ strcat(image_str, "[+ccd]");
}
else if (parsemds(GetIsoFile()) == 0) {
- SysPrintf("[+mds]");
+ strcat(image_str, "[+mds]");
}
else if (parsecue(GetIsoFile()) == 0) {
- SysPrintf("[+cue]");
+ strcat(image_str, "[+cue]");
}
if (handlepbp(GetIsoFile()) == 0) {
- SysPrintf("[pbp]");
+ strcat(image_str, "[+pbp]");
CDR_getBuffer = ISOgetBuffer_compr;
cdimg_read_func = cdread_compressed;
}
else if (handlecbin(GetIsoFile()) == 0) {
- SysPrintf("[cbin]");
+ strcat(image_str, "[+cbin]");
CDR_getBuffer = ISOgetBuffer_compr;
cdimg_read_func = cdread_compressed;
}
+#ifdef HAVE_CHD
else if (handlechd(GetIsoFile()) == 0) {
- SysPrintf("[chd]");
+ strcat(image_str, "[+chd]");
CDR_getBuffer = ISOgetBuffer_chd;
cdimg_read_func = cdread_chd;
}
+#endif
if (!subChanMixed && opensubfile(GetIsoFile()) == 0) {
- SysPrintf("[+sub]");
+ strcat(image_str, "[+sub]");
}
if (opensbifile(GetIsoFile()) == 0) {
- SysPrintf("[+sbi]");
+ strcat(image_str, "[+sbi]");
}
fseeko(cdHandle, 0, SEEK_END);
fseek(cdHandle, 0, SEEK_SET);
fread(&modeTest, 4, 1, cdHandle);
if (SWAP32(modeTest) != 0xffffff00) {
- SysPrintf("[2048]");
+ strcat(image_str, "[2048]");
isMode1ISO = TRUE;
}
}
fseek(cdHandle, 0, SEEK_SET);
- SysPrintf(".\n");
+ SysPrintf("%s.\n", image_str);
PrintTracks();
compr_img = NULL;
}
+#ifdef HAVE_CHD
if (chd_img != NULL) {
chd_close(chd_img->chd);
free(chd_img->buffer);
free(chd_img);
chd_img = NULL;
}
+#endif
for (i = 1; i <= numtracks; i++) {
if (ti[i].handle != NULL) {