Reformat CDVDiso's code, and get it to use a real ini file instead of writing inside one of the plugins binaries. Prep work for hunting down some bugs and modernizing it that I've been procrastinating about doing.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@441 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-02-07 03:13:59 +00:00
parent 9f75e5b825
commit 44c2fdf719
11 changed files with 999 additions and 669 deletions

View File

@ -21,7 +21,8 @@
#pragma warning(disable:4018) #pragma warning(disable:4018)
#endif #endif
#include "PS2Edefs.h" #include "common/PS2Etypes.h"
#include "common/PS2Edefs.h"
#include "libiso.h" #include "libiso.h"
#ifdef __cplusplus #ifdef __cplusplus
@ -82,7 +83,8 @@ void __Log(char *fmt, ...);
#define DEV_DEF "" #define DEV_DEF ""
#define CDDEV_DEF "/dev/cdrom" #define CDDEV_DEF "/dev/cdrom"
typedef struct { typedef struct
{
int slsn; int slsn;
int elsn; int elsn;
#ifdef _WINDOWS_ #ifdef _WINDOWS_

View File

@ -38,9 +38,10 @@ FILE *cdvdLog = NULL;
// This var is used to detect resume-style behavior of the Pcsx2 emulator, // This var is used to detect resume-style behavior of the Pcsx2 emulator,
// and skip prompting the user for a new CD when it's likely they want to run the existing one. // and skip prompting the user for a new CD when it's likely they want to run the existing one.
static char cdvdCurrentIso[MAX_PATH]; static char cdvdCurrentIso[MAX_PATH];
char *methods[] = { char *methods[] =
{
".Z - compress faster", ".Z - compress faster",
".BZ - compress better", ".BZ - compress better",
NULL NULL
@ -58,43 +59,48 @@ const unsigned char build = 8;
unsigned char cdbuffer[CD_FRAMESIZE_RAW * 10] = {0}; unsigned char cdbuffer[CD_FRAMESIZE_RAW * 10] = {0};
s32 msf_to_lba(u8 m, u8 s, u8 f) { s32 msf_to_lba(u8 m, u8 s, u8 f)
{
u32 lsn; u32 lsn;
lsn = f; lsn = f;
lsn+=(s - 2) * 75; lsn += (s - 2) * 75;
lsn+= m * 75 * 60; lsn += m * 75 * 60;
return lsn; return lsn;
} }
void lba_to_msf(s32 lba, u8* m, u8* s, u8* f) { void lba_to_msf(s32 lba, u8* m, u8* s, u8* f)
{
lba += 150; lba += 150;
*m = lba / (60*75); *m = lba / (60 * 75);
*s = (lba / 75) % 60; *s = (lba / 75) % 60;
*f = lba % 75; *f = lba % 75;
} }
#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */ #define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */
#define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */ #define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */
EXPORT_C(char*) PS2EgetLibName() { EXPORT_C(char*) PS2EgetLibName()
{
return LibName; return LibName;
} }
EXPORT_C(u32) PS2EgetLibType() { EXPORT_C(u32) PS2EgetLibType()
{
return PS2E_LT_CDVD; return PS2E_LT_CDVD;
} }
EXPORT_C(u32) PS2EgetLibVersion2(u32 type) { EXPORT_C(u32) PS2EgetLibVersion2(u32 type)
{
return (version << 16) | (revision << 8) | build; return (version << 16) | (revision << 8) | build;
} }
#ifdef _DEBUG #ifdef _DEBUG
void __Log(char *fmt, ...) { void __Log(char *fmt, ...)
{
va_list list; va_list list;
if( cdvdLog == NULL ) if (cdvdLog == NULL) return;
return;
va_start(list, fmt); va_start(list, fmt);
vfprintf(cdvdLog, fmt, list); vfprintf(cdvdLog, fmt, list);
@ -105,13 +111,17 @@ void __Log(char *fmt, ...) {
#endif #endif
EXPORT_C(s32) CDVDinit() { EXPORT_C(s32) CDVDinit()
{
#ifdef _DEBUG #ifdef _DEBUG
cdvdLog = fopen("logs/cdvdLog.txt", "w"); cdvdLog = fopen("logs/cdvdLog.txt", "w");
if (cdvdLog == NULL) { if (cdvdLog == NULL)
{
cdvdLog = fopen("cdvdLog.txt", "w"); cdvdLog = fopen("cdvdLog.txt", "w");
if (cdvdLog == NULL) { if (cdvdLog == NULL)
SysMessage("Can't create cdvdLog.txt"); return -1; {
SysMessage("Can't create cdvdLog.txt");
return -1;
} }
} }
setvbuf(cdvdLog, NULL, _IONBF, 0); setvbuf(cdvdLog, NULL, _IONBF, 0);
@ -123,26 +133,28 @@ EXPORT_C(s32) CDVDinit() {
return 0; return 0;
} }
EXPORT_C(void) CDVDshutdown() { EXPORT_C(void) CDVDshutdown()
{
cdvdCurrentIso[0] = 0; cdvdCurrentIso[0] = 0;
#ifdef CDVD_LOG #ifdef CDVD_LOG
if( cdvdLog != NULL ) if (cdvdLog != NULL) fclose(cdvdLog);
fclose(cdvdLog);
#endif #endif
} }
EXPORT_C(s32) CDVDopen(const char* pTitle) { EXPORT_C(s32) CDVDopen(const char* pTitle)
{
LoadConf(); LoadConf();
if( pTitle != NULL ) strcpy(IsoFile, pTitle); if (pTitle != NULL) strcpy(IsoFile, pTitle);
if( *IsoFile == 0 ) strcpy( IsoFile, cdvdCurrentIso ); if (*IsoFile == 0) strcpy(IsoFile, cdvdCurrentIso);
if (*IsoFile == 0) { if (*IsoFile == 0)
{
char temp[256]; char temp[256];
CfgOpenFile(); CfgOpenFile();
LoadConf(); LoadConf();
strcpy(temp, IsoFile); strcpy(temp, IsoFile);
*IsoFile = 0; *IsoFile = 0;
@ -150,85 +162,90 @@ EXPORT_C(s32) CDVDopen(const char* pTitle) {
strcpy(IsoFile, temp); strcpy(IsoFile, temp);
} }
iso = isoOpen(IsoFile); iso = isoOpen(IsoFile);
if (iso == NULL) { if (iso == NULL)
{
SysMessage("Error loading %s\n", IsoFile); SysMessage("Error loading %s\n", IsoFile);
return -1; return -1;
} }
if (iso->type == ISOTYPE_DVD) { if (iso->type == ISOTYPE_DVD)
cdtype = CDVD_TYPE_PS2DVD; cdtype = CDVD_TYPE_PS2DVD;
} else else if (iso->type == ISOTYPE_AUDIO)
if (iso->type == ISOTYPE_AUDIO) { cdtype = CDVD_TYPE_CDDA;
cdtype = CDVD_TYPE_CDDA; else
} else {
cdtype = CDVD_TYPE_PS2CD; cdtype = CDVD_TYPE_PS2CD;
}
if (BlockDump) { if (BlockDump)
{
char fname_only[MAX_PATH]; char fname_only[MAX_PATH];
char* p, *plast; char* p, *plast;
#ifdef _WIN32 #ifdef _WIN32
char fname[MAX_PATH],ext[MAX_PATH]; char fname[MAX_PATH], ext[MAX_PATH];
_splitpath(IsoFile,NULL,NULL,fname,ext); _splitpath(IsoFile, NULL, NULL, fname, ext);
_makepath(fname_only,NULL,NULL,fname,NULL); _makepath(fname_only, NULL, NULL, fname, NULL);
#else #else
plast = p = strchr(IsoFile, '/'); plast = p = strchr(IsoFile, '/');
while(p != NULL) { while (p != NULL)
plast = p; {
p = strchr(p+1, '/'); plast = p;
} p = strchr(p + 1, '/');
}
if( plast != NULL ) strcpy(fname_only, plast+1); if (plast != NULL)
else strcpy(fname_only, IsoFile); strcpy(fname_only, plast + 1);
else
strcpy(fname_only, IsoFile);
plast = p = strchr(fname_only, '.'); plast = p = strchr(fname_only, '.');
while(p != NULL) {
plast = p; while (p != NULL)
p = strchr(p+1, '.'); {
} plast = p;
p = strchr(p + 1, '.');
}
if( plast != NULL ) *plast = 0; if (plast != NULL) *plast = 0;
#endif #endif
strcat(fname_only, ".dump"); strcat(fname_only, ".dump");
fdump = isoCreate(fname_only, ISOFLAGS_BLOCKDUMP); fdump = isoCreate(fname_only, ISOFLAGS_BLOCKDUMP);
if (fdump) { if (fdump) isoSetFormat(fdump, iso->blockofs, iso->blocksize, iso->blocks);
isoSetFormat(fdump, iso->blockofs, iso->blocksize, iso->blocks); }
} else
} else { {
fdump = NULL; fdump = NULL;
} }
return 0; return 0;
} }
EXPORT_C(void) CDVDclose() { EXPORT_C(void) CDVDclose()
{
strcpy( cdvdCurrentIso, IsoFile ); strcpy(cdvdCurrentIso, IsoFile);
isoClose(iso); isoClose(iso);
if (fdump != NULL) { if (fdump != NULL) isoClose(fdump);
isoClose(fdump);
}
} }
EXPORT_C(s32) CDVDreadSubQ(u32 lsn, cdvdSubQ* subq) { EXPORT_C(s32) CDVDreadSubQ(u32 lsn, cdvdSubQ* subq)
{
// fake it // fake it
u8 min, sec, frm; u8 min, sec, frm;
subq->ctrl = 4; subq->ctrl = 4;
subq->mode = 1; subq->mode = 1;
subq->trackNum = itob(1); subq->trackNum = itob(1);
subq->trackIndex= itob(1); subq->trackIndex = itob(1);
lba_to_msf(lsn, &min, &sec, &frm); lba_to_msf(lsn, &min, &sec, &frm);
subq->trackM = itob(min); subq->trackM = itob(min);
subq->trackS = itob(sec); subq->trackS = itob(sec);
subq->trackF = itob(frm); subq->trackF = itob(frm);
subq->pad = 0; subq->pad = 0;
lba_to_msf(lsn + (2*75), &min, &sec, &frm); lba_to_msf(lsn + (2*75), &min, &sec, &frm);
subq->discM = itob(min); subq->discM = itob(min);
subq->discS = itob(sec); subq->discS = itob(sec);
@ -236,17 +253,22 @@ EXPORT_C(s32) CDVDreadSubQ(u32 lsn, cdvdSubQ* subq) {
return 0; return 0;
} }
EXPORT_C(s32) CDVDgetTN(cdvdTN *Buffer) { EXPORT_C(s32) CDVDgetTN(cdvdTN *Buffer)
{
Buffer->strack = 1; Buffer->strack = 1;
Buffer->etrack = 1; Buffer->etrack = 1;
return 0; return 0;
} }
EXPORT_C(s32) CDVDgetTD(u8 Track, cdvdTD *Buffer) { EXPORT_C(s32) CDVDgetTD(u8 Track, cdvdTD *Buffer)
if (Track == 0) { {
if (Track == 0)
{
Buffer->lsn = iso->blocks; Buffer->lsn = iso->blocks;
} else { }
else
{
Buffer->type = CDVD_MODE1_TRACK; Buffer->type = CDVD_MODE1_TRACK;
Buffer->lsn = 0; Buffer->lsn = 0;
} }
@ -255,99 +277,101 @@ EXPORT_C(s32) CDVDgetTD(u8 Track, cdvdTD *Buffer) {
} }
static int layer1start = -1; static int layer1start = -1;
EXPORT_C(s32) CDVDgetTOC(void* toc) { EXPORT_C(s32) CDVDgetTOC(void* toc)
{
u8 type = CDVDgetDiskType(); u8 type = CDVDgetDiskType();
u8* tocBuff = (u8*)toc; u8* tocBuff = (u8*)toc;
//__Log("CDVDgetTOC\n");
if( type == CDVD_TYPE_DVDV || type == CDVD_TYPE_PS2DVD) //__Log("CDVDgetTOC\n");
if (type == CDVD_TYPE_DVDV || type == CDVD_TYPE_PS2DVD)
{ {
int i; int i;
// get dvd structure format // get dvd structure format
// scsi command 0x43 // scsi command 0x43
memset(tocBuff, 0, 2048); memset(tocBuff, 0, 2048);
if( layer1start != -2 && iso->blocks >= 0x300000 ) { if (layer1start != -2 && iso->blocks >= 0x300000)
int off = iso->blockofs; {
u8* tempbuffer; int off = iso->blockofs;
u8* tempbuffer;
// dual sided // dual sided
tocBuff[ 0] = 0x24; tocBuff[ 0] = 0x24;
tocBuff[ 1] = 0x02; tocBuff[ 1] = 0x02;
tocBuff[ 2] = 0xF2; tocBuff[ 2] = 0xF2;
tocBuff[ 3] = 0x00; tocBuff[ 3] = 0x00;
tocBuff[ 4] = 0x41; tocBuff[ 4] = 0x41;
tocBuff[ 5] = 0x95; tocBuff[ 5] = 0x95;
tocBuff[14] = 0x60; // dual sided, ptp tocBuff[14] = 0x60; // dual sided, ptp
tocBuff[16] = 0x00; tocBuff[16] = 0x00;
tocBuff[17] = 0x03; tocBuff[17] = 0x03;
tocBuff[18] = 0x00; tocBuff[18] = 0x00;
tocBuff[19] = 0x00; tocBuff[19] = 0x00;
// search for it // search for it
if( layer1start == -1 ) { if (layer1start == -1)
printf("CDVD: searching for layer1..."); {
tempbuffer = (u8*)malloc(CD_FRAMESIZE_RAW * 10); printf("CDVD: searching for layer1...");
for(layer1start = (iso->blocks/2-0x10)&~0xf; layer1start < 0x200010; layer1start += 16) { tempbuffer = (u8*)malloc(CD_FRAMESIZE_RAW * 10);
isoReadBlock(iso, tempbuffer, layer1start); for (layer1start = (iso->blocks / 2 - 0x10) & ~0xf; layer1start < 0x200010; layer1start += 16)
// CD001 {
if( tempbuffer[off+1] == 0x43 && tempbuffer[off+2] == 0x44 && tempbuffer[off+3] == 0x30 && tempbuffer[off+4] == 0x30 && tempbuffer[off+5] == 0x31 ) { isoReadBlock(iso, tempbuffer, layer1start);
break; // CD001
} if (tempbuffer[off+1] == 0x43 && tempbuffer[off+2] == 0x44 && tempbuffer[off+3] == 0x30 && tempbuffer[off+4] == 0x30 && tempbuffer[off+5] == 0x31)
} break;
free(tempbuffer); }
free(tempbuffer);
if( layer1start == 0x200010 ) { if (layer1start == 0x200010)
printf("Couldn't find second layer on dual layer... ignoring\n"); {
// fake it printf("Couldn't find second layer on dual layer... ignoring\n");
tocBuff[ 0] = 0x04; // fake it
tocBuff[ 1] = 0x02; tocBuff[ 0] = 0x04;
tocBuff[ 2] = 0xF2; tocBuff[ 1] = 0x02;
tocBuff[ 3] = 0x00; tocBuff[ 2] = 0xF2;
tocBuff[ 4] = 0x86; tocBuff[ 3] = 0x00;
tocBuff[ 5] = 0x72; tocBuff[ 4] = 0x86;
tocBuff[ 5] = 0x72;
tocBuff[16] = 0x00; tocBuff[16] = 0x00;
tocBuff[17] = 0x03; tocBuff[17] = 0x03;
tocBuff[18] = 0x00; tocBuff[18] = 0x00;
tocBuff[19] = 0x00; tocBuff[19] = 0x00;
layer1start = -2; layer1start = -2;
return 0; return 0;
} }
printf("found at 0x%8.8x\n", layer1start); printf("found at 0x%8.8x\n", layer1start);
layer1start = layer1start+0x30000-1; layer1start = layer1start + 0x30000 - 1;
} }
tocBuff[20] = layer1start>>24; tocBuff[20] = layer1start >> 24;
tocBuff[21] = (layer1start>>16)&0xff; tocBuff[21] = (layer1start >> 16) & 0xff;
tocBuff[22] = (layer1start>>8)&0xff; tocBuff[22] = (layer1start >> 8) & 0xff;
tocBuff[23] = (layer1start>>0)&0xff; tocBuff[23] = (layer1start >> 0) & 0xff;
} }
else { else
// fake it {
tocBuff[ 0] = 0x04; // fake it
tocBuff[ 1] = 0x02; tocBuff[ 0] = 0x04;
tocBuff[ 2] = 0xF2; tocBuff[ 1] = 0x02;
tocBuff[ 3] = 0x00; tocBuff[ 2] = 0xF2;
tocBuff[ 4] = 0x86; tocBuff[ 3] = 0x00;
tocBuff[ 5] = 0x72; tocBuff[ 4] = 0x86;
tocBuff[ 5] = 0x72;
tocBuff[16] = 0x00; tocBuff[16] = 0x00;
tocBuff[17] = 0x03; tocBuff[17] = 0x03;
tocBuff[18] = 0x00; tocBuff[18] = 0x00;
tocBuff[19] = 0x00; tocBuff[19] = 0x00;
} }
} }
else if(type == CDVD_TYPE_CDDA || else if ((type == CDVD_TYPE_CDDA) || (type == CDVD_TYPE_PS2CDDA) ||
type == CDVD_TYPE_PS2CDDA || (type == CDVD_TYPE_PS2CD) || (type == CDVD_TYPE_PSCDDA) || (type == CDVD_TYPE_PSCD))
type == CDVD_TYPE_PS2CD ||
type == CDVD_TYPE_PSCDDA ||
type == CDVD_TYPE_PSCD)
{ {
// cd toc // cd toc
// (could be replaced by 1 command that reads the full toc) // (could be replaced by 1 command that reads the full toc)
@ -356,16 +380,20 @@ EXPORT_C(s32) CDVDgetTOC(void* toc) {
cdvdTN diskInfo; cdvdTN diskInfo;
cdvdTD trackInfo; cdvdTD trackInfo;
memset(tocBuff, 0, 1024); memset(tocBuff, 0, 1024);
if (CDVDgetTN(&diskInfo) == -1) { diskInfo.etrack = 0;diskInfo.strack = 1; } if (CDVDgetTN(&diskInfo) == -1)
{
diskInfo.etrack = 0;
diskInfo.strack = 1;
}
if (CDVDgetTD(0, &trackInfo) == -1) trackInfo.lsn = 0; if (CDVDgetTD(0, &trackInfo) == -1) trackInfo.lsn = 0;
tocBuff[0] = 0x41; tocBuff[0] = 0x41;
tocBuff[1] = 0x00; tocBuff[1] = 0x00;
//Number of FirstTrack //Number of FirstTrack
tocBuff[2] = 0xA0; tocBuff[2] = 0xA0;
tocBuff[7] = itob(diskInfo.strack); tocBuff[7] = itob(diskInfo.strack);
//Number of LastTrack //Number of LastTrack
tocBuff[12] = 0xA1; tocBuff[12] = 0xA1;
tocBuff[17] = itob(diskInfo.etrack); tocBuff[17] = itob(diskInfo.etrack);
@ -375,8 +403,8 @@ EXPORT_C(s32) CDVDgetTOC(void* toc) {
tocBuff[22] = 0xA2; tocBuff[22] = 0xA2;
tocBuff[27] = itob(min); tocBuff[27] = itob(min);
tocBuff[28] = itob(sec); tocBuff[28] = itob(sec);
for (i=diskInfo.strack; i<=diskInfo.etrack; i++) for (i = diskInfo.strack; i <= diskInfo.etrack; i++)
{ {
err = CDVDgetTD(i, &trackInfo); err = CDVDgetTD(i, &trackInfo);
lba_to_msf(trackInfo.lsn, &min, &sec, &frm); lba_to_msf(trackInfo.lsn, &min, &sec, &frm);
@ -389,59 +417,75 @@ EXPORT_C(s32) CDVDgetTOC(void* toc) {
} }
else else
return -1; return -1;
return 0; return 0;
} }
EXPORT_C(s32) CDVDreadTrack(u32 lsn, int mode) { EXPORT_C(s32) CDVDreadTrack(u32 lsn, int mode)
{
int _lsn = lsn; int _lsn = lsn;
//__Log("CDVDreadTrack: %x %x\n", lsn, mode); //__Log("CDVDreadTrack: %x %x\n", lsn, mode);
if (_lsn < 0) { if (_lsn < 0)
{
// lsn = 2097152 + (-_lsn); // lsn = 2097152 + (-_lsn);
lsn = iso->blocks - (-_lsn); lsn = iso->blocks - (-_lsn);
} }
// printf ("CDRreadTrack %d\n", lsn); // printf ("CDRreadTrack %d\n", lsn);
isoReadBlock(iso, cdbuffer, lsn); isoReadBlock(iso, cdbuffer, lsn);
if (fdump != NULL) { if (fdump != NULL)
{
isoWriteBlock(fdump, cdbuffer, lsn); isoWriteBlock(fdump, cdbuffer, lsn);
} }
pbuffer = cdbuffer; pbuffer = cdbuffer;
switch (mode) { switch (mode)
case CDVD_MODE_2352: break; {
case CDVD_MODE_2340: pbuffer+= 12; break; case CDVD_MODE_2352:
case CDVD_MODE_2328: pbuffer+= 24; break; break;
case CDVD_MODE_2048: pbuffer+= 24; break; case CDVD_MODE_2340:
pbuffer += 12;
break;
case CDVD_MODE_2328:
pbuffer += 24;
break;
case CDVD_MODE_2048:
pbuffer += 24;
break;
} }
return 0; return 0;
} }
EXPORT_C(u8*) CDVDgetBuffer() { EXPORT_C(u8*) CDVDgetBuffer()
{
return pbuffer; return pbuffer;
} }
EXPORT_C(s32) CDVDgetDiskType() { EXPORT_C(s32) CDVDgetDiskType()
{
return cdtype; return cdtype;
} }
EXPORT_C(s32) CDVDgetTrayStatus() { EXPORT_C(s32) CDVDgetTrayStatus()
{
return CDVD_TRAY_CLOSE; return CDVD_TRAY_CLOSE;
} }
EXPORT_C(s32) CDVDctrlTrayOpen() { EXPORT_C(s32) CDVDctrlTrayOpen()
{
return 0; return 0;
} }
EXPORT_C(s32) CDVDctrlTrayClose() { EXPORT_C(s32) CDVDctrlTrayClose()
{
return 0; return 0;
} }
EXPORT_C(s32) CDVDtest() { EXPORT_C(s32) CDVDtest()
if (*IsoFile == 0) {
return 0; if (*IsoFile == 0) return 0;
iso = isoOpen(IsoFile); iso = isoOpen(IsoFile);
if (iso == NULL) return -1; if (iso == NULL) return -1;

View File

@ -24,36 +24,59 @@
#include "CDVDiso.h" #include "CDVDiso.h"
void LoadConf() {
const char *s_strIniPath="../inis/CDVDiso.ini";
void LoadConf()
{
FILE *f; FILE *f;
char cfg[256]; char cfg[256];
sprintf(cfg, "%s/.PS2E/CDVDiso.cfg", getenv("HOME")); //sprintf(cfg, "%s/.PS2E/CDVDiso.cfg", getenv("HOME"));
strcpy(cfg, s_strIniPath);
f = fopen(cfg, "r"); f = fopen(cfg, "r");
if (f == NULL) {
if (f == NULL)
{
printf("Unable to load %s\n", cfg);
strcpy(IsoFile, DEV_DEF); strcpy(IsoFile, DEV_DEF);
strcpy(CdDev, CDDEV_DEF); strcpy(CdDev, CDDEV_DEF);
BlockDump = 0;
SaveConf();
return; return;
} }
fscanf(f, "IsoFile = %[^\n]\n", IsoFile); fscanf(f, "IsoFile = %[^\n]\n", IsoFile);
fscanf(f, "CdDev = %[^\n]\n", CdDev); fscanf(f, "CdDev = %[^\n]\n", CdDev);
fscanf(f, "BlockDump = %[^\n]\n", &BlockDump);
if (!strncmp(IsoFile, "CdDev =", 9)) *IsoFile = 0; // quick fix if (!strncmp(IsoFile, "CdDev =", 9)) *IsoFile = 0; // quick fix
if (*CdDev == 0) strcpy(CdDev, CDDEV_DEF); if (*CdDev == 0) strcpy(CdDev, CDDEV_DEF);
fclose(f); fclose(f);
} }
void SaveConf() { void SaveConf()
{
FILE *f; FILE *f;
char cfg[256]; char cfg[256];
sprintf(cfg, "%s/.PS2E", getenv("HOME")); //sprintf(cfg, "%s/.PS2E", getenv("HOME"));
mkdir(cfg, 0755);
sprintf(cfg, "%s/.PS2E/CDVDiso.cfg", getenv("HOME")); //mkdir(cfg, 0755);
//sprintf(cfg, "%s/.PS2E/CDVDiso.cfg", getenv("HOME"));
strcpy(cfg, s_strIniPath);
f = fopen(cfg, "w"); f = fopen(cfg, "w");
if (f == NULL) if (f == NULL)
{
printf("Unable to save %s\n", cfg);
return; return;
}
fprintf(f, "IsoFile = %s\n", IsoFile); fprintf(f, "IsoFile = %s\n", IsoFile);
fprintf(f, "CdDev = %s\n", CdDev); fprintf(f, "CdDev = %s\n", CdDev);
fprintf(f, "BlockDump = %s\n", &BlockDump);
fclose(f); fclose(f);
} }

View File

@ -25,44 +25,55 @@
#include "Config.h" #include "Config.h"
#include "CDVDiso.h" #include "CDVDiso.h"
void ExecCfg(char *arg) { void ExecCfg(char *arg)
{
char cfg[256]; char cfg[256];
struct stat buf; struct stat buf;
strcpy(cfg, "./cfgCDVDiso"); strcpy(cfg, "./cfgCDVDiso");
if (stat(cfg, &buf) != -1) { if (stat(cfg, &buf) != -1)
{
sprintf(cfg, "%s %s", cfg, arg); sprintf(cfg, "%s %s", cfg, arg);
system(cfg); return; system(cfg);
return;
} }
strcpy(cfg, "./cfg/cfgCDVDiso"); strcpy(cfg, "./cfg/cfgCDVDiso");
if (stat(cfg, &buf) != -1) { if (stat(cfg, &buf) != -1)
{
sprintf(cfg, "%s %s", cfg, arg); sprintf(cfg, "%s %s", cfg, arg);
system(cfg); return; system(cfg);
return;
} }
sprintf(cfg, "%s/cfgCDVDiso", getenv("HOME")); sprintf(cfg, "%s/cfgCDVDiso", getenv("HOME"));
if (stat(cfg, &buf) != -1) { if (stat(cfg, &buf) != -1)
{
sprintf(cfg, "%s %s", cfg, arg); sprintf(cfg, "%s %s", cfg, arg);
system(cfg); return; system(cfg);
return;
} }
printf("cfgCDVDiso file not found!\n"); printf("cfgCDVDiso file not found!\n");
} }
void CDVDconfigure() { void CDVDconfigure()
{
ExecCfg("configure"); ExecCfg("configure");
} }
void CDVDabout() { void CDVDabout()
{
ExecCfg("about"); ExecCfg("about");
} }
void CfgOpenFile() { void CfgOpenFile()
{
ExecCfg("open"); ExecCfg("open");
} }
void SysMessage(char *fmt, ...) { void SysMessage(char *fmt, ...)
{
va_list list; va_list list;
char tmp[256]; char tmp[256];
char cmd[256]; char cmd[256];

View File

@ -44,7 +44,8 @@ extern const unsigned char build;
GtkWidget *FileSel; GtkWidget *FileSel;
void OnFile_Ok() { void OnFile_Ok()
{
gchar *File; gchar *File;
gtk_widget_hide(FileSel); gtk_widget_hide(FileSel);
@ -53,24 +54,26 @@ void OnFile_Ok() {
gtk_main_quit(); gtk_main_quit();
} }
void OnFile_Cancel() { void OnFile_Cancel()
{
gtk_widget_hide(FileSel); gtk_widget_hide(FileSel);
gtk_main_quit(); gtk_main_quit();
} }
void _CDRopen() { void _CDRopen()
{
GtkWidget *Ok, *Cancel; GtkWidget *Ok, *Cancel;
FileSel = gtk_file_selection_new("Select Iso File"); FileSel = gtk_file_selection_new("Select Iso File");
Ok = GTK_FILE_SELECTION(FileSel)->ok_button; Ok = GTK_FILE_SELECTION(FileSel)->ok_button;
gtk_signal_connect(GTK_OBJECT(Ok), "clicked", gtk_signal_connect(GTK_OBJECT(Ok), "clicked",
GTK_SIGNAL_FUNC(OnFile_Ok), NULL); GTK_SIGNAL_FUNC(OnFile_Ok), NULL);
gtk_widget_show(Ok); gtk_widget_show(Ok);
Cancel = GTK_FILE_SELECTION(FileSel)->cancel_button; Cancel = GTK_FILE_SELECTION(FileSel)->cancel_button;
gtk_signal_connect(GTK_OBJECT(Cancel), "clicked", gtk_signal_connect(GTK_OBJECT(Cancel), "clicked",
GTK_SIGNAL_FUNC(OnFile_Cancel), NULL); GTK_SIGNAL_FUNC(OnFile_Cancel), NULL);
gtk_widget_show(Cancel); gtk_widget_show(Cancel);
gtk_widget_show(FileSel); gtk_widget_show(FileSel);
@ -83,14 +86,16 @@ void _CDRopen() {
GtkWidget *MsgDlg; GtkWidget *MsgDlg;
void OnMsg_Ok() { void OnMsg_Ok()
{
gtk_widget_destroy(MsgDlg); gtk_widget_destroy(MsgDlg);
gtk_main_quit(); gtk_main_quit();
} }
static void SysMessageLoc(char *fmt, ...) { static void SysMessageLoc(char *fmt, ...)
GtkWidget *Ok,*Txt; {
GtkWidget *Box,*Box1; GtkWidget *Ok, *Txt;
GtkWidget *Box, *Box1;
va_list list; va_list list;
int w; int w;
char msg[512]; char msg[512];
@ -103,7 +108,7 @@ static void SysMessageLoc(char *fmt, ...) {
w = strlen(msg) * 6 + 20; w = strlen(msg) * 6 + 20;
MsgDlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); MsgDlg = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(MsgDlg, w, 70); gtk_widget_set_usize(MsgDlg, w, 70);
gtk_window_set_position(GTK_WINDOW(MsgDlg), GTK_WIN_POS_CENTER); gtk_window_set_position(GTK_WINDOW(MsgDlg), GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(MsgDlg), "cdriso Msg"); gtk_window_set_title(GTK_WINDOW(MsgDlg), "cdriso Msg");
@ -114,7 +119,7 @@ static void SysMessageLoc(char *fmt, ...) {
gtk_widget_show(Box); gtk_widget_show(Box);
Txt = gtk_label_new(msg); Txt = gtk_label_new(msg);
gtk_box_pack_start(GTK_BOX(Box), Txt, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(Box), Txt, FALSE, FALSE, 5);
gtk_widget_show(Txt); gtk_widget_show(Txt);
@ -123,12 +128,12 @@ static void SysMessageLoc(char *fmt, ...) {
gtk_widget_show(Box1); gtk_widget_show(Box1);
Ok = gtk_button_new_with_label("Ok"); Ok = gtk_button_new_with_label("Ok");
gtk_signal_connect (GTK_OBJECT(Ok), "clicked", GTK_SIGNAL_FUNC(OnMsg_Ok), NULL); gtk_signal_connect(GTK_OBJECT(Ok), "clicked", GTK_SIGNAL_FUNC(OnMsg_Ok), NULL);
gtk_container_add(GTK_CONTAINER(Box1), Ok); gtk_container_add(GTK_CONTAINER(Box1), Ok);
GTK_WIDGET_SET_FLAGS(Ok, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(Ok, GTK_CAN_DEFAULT);
gtk_widget_show(Ok); gtk_widget_show(Ok);
gtk_widget_show(MsgDlg); gtk_widget_show(MsgDlg);
gtk_main(); gtk_main();
} }
@ -148,10 +153,11 @@ extern char *methods[];
int stop; int stop;
void OnOk(GtkMenuItem * menuitem, gpointer userdata) { void OnOk(GtkMenuItem * menuitem, gpointer userdata)
{
char *tmp; char *tmp;
stop=1; stop = 1;
tmp = gtk_entry_get_text(GTK_ENTRY(Edit)); tmp = gtk_entry_get_text(GTK_ENTRY(Edit));
strcpy(IsoFile, tmp); strcpy(IsoFile, tmp);
tmp = gtk_entry_get_text(GTK_ENTRY(CdEdit)); tmp = gtk_entry_get_text(GTK_ENTRY(CdEdit));
@ -161,13 +167,15 @@ void OnOk(GtkMenuItem * menuitem, gpointer userdata) {
gtk_main_quit(); gtk_main_quit();
} }
void OnCancel(GtkMenuItem * menuitem, gpointer userdata) { void OnCancel(GtkMenuItem * menuitem, gpointer userdata)
stop=1; {
stop = 1;
gtk_widget_destroy(ConfDlg); gtk_widget_destroy(ConfDlg);
gtk_main_quit(); gtk_main_quit();
} }
void OnFileSel_Ok() { void OnFileSel_Ok()
{
gchar *File; gchar *File;
File = gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSel)); File = gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSel));
@ -175,33 +183,37 @@ void OnFileSel_Ok() {
gtk_widget_destroy(FileSel); gtk_widget_destroy(FileSel);
} }
void OnFileSel_Cancel() { void OnFileSel_Cancel()
{
gtk_widget_destroy(FileSel); gtk_widget_destroy(FileSel);
} }
void OnFileSel() { void OnFileSel()
GtkWidget *Ok,*Cancel; {
GtkWidget *Ok, *Cancel;
FileSel = gtk_file_selection_new("Select Psx Iso File"); FileSel = gtk_file_selection_new("Select Psx Iso File");
gtk_file_selection_set_filename(GTK_FILE_SELECTION(FileSel), IsoFile); gtk_file_selection_set_filename(GTK_FILE_SELECTION(FileSel), IsoFile);
Ok = GTK_FILE_SELECTION(FileSel)->ok_button; Ok = GTK_FILE_SELECTION(FileSel)->ok_button;
gtk_signal_connect (GTK_OBJECT(Ok), "clicked", GTK_SIGNAL_FUNC(OnFileSel_Ok), NULL); gtk_signal_connect(GTK_OBJECT(Ok), "clicked", GTK_SIGNAL_FUNC(OnFileSel_Ok), NULL);
gtk_widget_show(Ok); gtk_widget_show(Ok);
Cancel = GTK_FILE_SELECTION(FileSel)->cancel_button; Cancel = GTK_FILE_SELECTION(FileSel)->cancel_button;
gtk_signal_connect (GTK_OBJECT(Cancel), "clicked", GTK_SIGNAL_FUNC(OnFileSel_Cancel), NULL); gtk_signal_connect(GTK_OBJECT(Cancel), "clicked", GTK_SIGNAL_FUNC(OnFileSel_Cancel), NULL);
gtk_widget_show(Cancel); gtk_widget_show(Cancel);
gtk_widget_show(FileSel); gtk_widget_show(FileSel);
gdk_window_raise(FileSel->window); gdk_window_raise(FileSel->window);
} }
void OnStop() { void OnStop()
stop=1; {
stop = 1;
} }
void UpdZmode() { void UpdZmode()
{
char *tmp; char *tmp;
tmp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Method)->entry)); tmp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Method)->entry));
@ -211,7 +223,8 @@ void UpdZmode() {
char buffer[2352 * 10]; char buffer[2352 * 10];
void OnCompress() { void OnCompress()
{
struct stat buf; struct stat buf;
u32 lsn; u32 lsn;
u8 cdbuff[10*2352]; u8 cdbuff[10*2352];
@ -228,13 +241,14 @@ void OnCompress() {
if (Zmode == 1) sprintf(Zfile, "%s.Z2", IsoFile); if (Zmode == 1) sprintf(Zfile, "%s.Z2", IsoFile);
if (Zmode == 2) sprintf(Zfile, "%s.BZ2", IsoFile); if (Zmode == 2) sprintf(Zfile, "%s.BZ2", IsoFile);
if (stat(Zfile, &buf) != -1) { if (stat(Zfile, &buf) != -1)
char str[256]; {
/*char str[256];*/
return; return;
/* sprintf(str, "'%s' already exists, overwrite?", Zfile); /* sprintf(str, "'%s' already exists, overwrite?", Zfile);
if (MessageBox(hDlg, str, "Question", MB_YESNO) != IDYES) { if (MessageBox(hDlg, str, "Question", MB_YESNO) != IDYES) {
return; return;
}*/ }*/
} }
src = isoOpen(IsoFile); src = isoOpen(IsoFile);
@ -246,9 +260,10 @@ void OnCompress() {
gtk_widget_set_sensitive(BtnDecompress, FALSE); gtk_widget_set_sensitive(BtnDecompress, FALSE);
gtk_widget_set_sensitive(BtnCreate, FALSE); gtk_widget_set_sensitive(BtnCreate, FALSE);
gtk_widget_set_sensitive(BtnCreateZ, FALSE); gtk_widget_set_sensitive(BtnCreateZ, FALSE);
stop=0; stop = 0;
for (lsn = 0; lsn<src->blocks; lsn++) { for (lsn = 0; lsn < src->blocks; lsn++)
{
printf("block %d ", lsn); printf("block %d ", lsn);
putchar(13); putchar(13);
fflush(stdout); fflush(stdout);
@ -271,20 +286,25 @@ void OnCompress() {
gtk_widget_set_sensitive(BtnCreate, TRUE); gtk_widget_set_sensitive(BtnCreate, TRUE);
gtk_widget_set_sensitive(BtnCreateZ, TRUE); gtk_widget_set_sensitive(BtnCreateZ, TRUE);
if (!stop) { if (!stop)
if (ret == -1) { {
if (ret == -1)
{
SysMessageLoc("Error compressing iso image"); SysMessageLoc("Error compressing iso image");
} else { }
else
{
SysMessageLoc("Iso image compressed OK"); SysMessageLoc("Iso image compressed OK");
} }
} }
} }
void OnDecompress() { void OnDecompress()
{
#if 0 #if 0
struct stat buf; struct stat buf;
FILE *f; FILE *f;
unsigned long c=0, p=0, s; unsigned long c = 0, p = 0, s;
char table[256]; char table[256];
char *tmp; char *tmp;
int blocks; int blocks;
@ -299,7 +319,8 @@ void OnDecompress() {
if (Zmode == 1) strcat(table, ".table"); if (Zmode == 1) strcat(table, ".table");
else strcat(table, ".index"); else strcat(table, ".index");
if (stat(table, &buf) == -1) { if (stat(table, &buf) == -1)
{
return; return;
} }
if (Zmode == 1) c = s = buf.st_size / 6; if (Zmode == 1) c = s = buf.st_size / 6;
@ -310,7 +331,8 @@ void OnDecompress() {
fclose(f); fclose(f);
cdHandle[0] = fopen(IsoFile, "rb"); cdHandle[0] = fopen(IsoFile, "rb");
if (cdHandle[0] == NULL) { if (cdHandle[0] == NULL)
{
return; return;
} }
@ -318,7 +340,8 @@ void OnDecompress() {
else IsoFile[strlen(IsoFile) - 3] = 0; else IsoFile[strlen(IsoFile) - 3] = 0;
f = fopen(IsoFile, "wb"); f = fopen(IsoFile, "wb");
if (f == NULL) { if (f == NULL)
{
return; return;
} }
@ -326,29 +349,36 @@ void OnDecompress() {
gtk_widget_set_sensitive(BtnDecompress, FALSE); gtk_widget_set_sensitive(BtnDecompress, FALSE);
gtk_widget_set_sensitive(BtnCreate, FALSE); gtk_widget_set_sensitive(BtnCreate, FALSE);
gtk_widget_set_sensitive(BtnCreateZ, FALSE); gtk_widget_set_sensitive(BtnCreateZ, FALSE);
stop=0; stop = 0;
if (Zmode == 1) { if (Zmode == 1)
{
blocks = 1; blocks = 1;
} else { }
else
{
blocks = 10; blocks = 10;
} }
while (c--) { while (c--)
{
unsigned long size, pos, ssize; unsigned long size, pos, ssize;
float per; float per;
if (Zmode == 1) { if (Zmode == 1)
pos = *(unsigned long*)&Ztable[p * 6]; {
pos = *(unsigned long*) & Ztable[p * 6];
fseek(cdHandle[0], pos, SEEK_SET); fseek(cdHandle[0], pos, SEEK_SET);
ssize = *(unsigned short*)&Ztable[p * 6 + 4]; ssize = *(unsigned short*) & Ztable[p * 6 + 4];
fread(Zbuf, 1, ssize, cdHandle[0]); fread(Zbuf, 1, ssize, cdHandle[0]);
} else { }
pos = *(unsigned long*)&Ztable[p * 4]; else
{
pos = *(unsigned long*) & Ztable[p * 4];
fseek(cdHandle[0], pos, SEEK_SET); fseek(cdHandle[0], pos, SEEK_SET);
ssize = *(unsigned long*)&Ztable[p * 4 + 4] - pos; ssize = *(unsigned long*) & Ztable[p * 4 + 4] - pos;
fread(Zbuf, 1, ssize, cdHandle[0]); fread(Zbuf, 1, ssize, cdHandle[0]);
} }
@ -368,8 +398,10 @@ void OnDecompress() {
if (!stop) gtk_entry_set_text(GTK_ENTRY(Edit), IsoFile); if (!stop) gtk_entry_set_text(GTK_ENTRY(Edit), IsoFile);
fclose(f); fclose(f);
fclose(cdHandle[0]); cdHandle[0] = NULL; fclose(cdHandle[0]);
free(Ztable); Ztable = NULL; cdHandle[0] = NULL;
free(Ztable);
Ztable = NULL;
gtk_widget_set_sensitive(BtnCompress, TRUE); gtk_widget_set_sensitive(BtnCompress, TRUE);
gtk_widget_set_sensitive(BtnDecompress, TRUE); gtk_widget_set_sensitive(BtnDecompress, TRUE);
@ -384,28 +416,34 @@ void OnDecompress() {
unsigned char param[4]; unsigned char param[4];
int cddev = -1; int cddev = -1;
union { union
{
struct cdrom_msf msf; struct cdrom_msf msf;
unsigned char buf[CD_FRAMESIZE_RAW]; unsigned char buf[CD_FRAMESIZE_RAW];
} cr; } cr;
void incSector() { void incSector()
{
param[2]++; param[2]++;
if (param[2] == 75) { if (param[2] == 75)
{
param[2] = 0; param[2] = 0;
param[1]++; param[1]++;
} }
if (param[1] == 60) { if (param[1] == 60)
{
param[1] = 0; param[1] = 0;
param[0]++; param[0]++;
} }
} }
long CDR_open(void) { long CDR_open(void)
{
if (cddev != -1) if (cddev != -1)
return 0; return 0;
cddev = open(CdDev, O_RDONLY); cddev = open(CdDev, O_RDONLY);
if (cddev == -1) { if (cddev == -1)
{
printf("CDR: Could not open %s\n", CdDev); printf("CDR: Could not open %s\n", CdDev);
return -1; return -1;
} }
@ -413,7 +451,8 @@ long CDR_open(void) {
return 0; return 0;
} }
long CDR_close(void) { long CDR_close(void)
{
if (cddev == -1) return 0; if (cddev == -1) return 0;
close(cddev); close(cddev);
cddev = -1; cddev = -1;
@ -425,7 +464,8 @@ long CDR_close(void) {
// buffer: // buffer:
// byte 0 - start track // byte 0 - start track
// byte 1 - end track // byte 1 - end track
long CDR_getTN(unsigned char *buffer) { long CDR_getTN(unsigned char *buffer)
{
struct cdrom_tochdr toc; struct cdrom_tochdr toc;
if (ioctl(cddev, CDROMREADTOCHDR, &toc) == -1) return -1; if (ioctl(cddev, CDROMREADTOCHDR, &toc) == -1) return -1;
@ -441,7 +481,8 @@ long CDR_getTN(unsigned char *buffer) {
// byte 0 - frame // byte 0 - frame
// byte 1 - second // byte 1 - second
// byte 2 - minute // byte 2 - minute
long CDR_getTD(unsigned char track, unsigned char *buffer) { long CDR_getTD(unsigned char track, unsigned char *buffer)
{
struct cdrom_tocentry entry; struct cdrom_tocentry entry;
if (track == 0) track = 0xaa; // total time if (track == 0) track = 0xaa; // total time
@ -462,7 +503,8 @@ long CDR_getTD(unsigned char track, unsigned char *buffer) {
// byte 0 - minute // byte 0 - minute
// byte 1 - second // byte 1 - second
// byte 2 - frame // byte 2 - frame
char *CDR_readTrack(unsigned char *time) { char *CDR_readTrack(unsigned char *time)
{
cr.msf.cdmsf_min0 = time[0]; cr.msf.cdmsf_min0 = time[0];
cr.msf.cdmsf_sec0 = time[1]; cr.msf.cdmsf_sec0 = time[1];
cr.msf.cdmsf_frame0 = time[2]; cr.msf.cdmsf_frame0 = time[2];
@ -472,20 +514,21 @@ char *CDR_readTrack(unsigned char *time) {
} }
void OnCreate() { void OnCreate()
{
FILE *f; FILE *f;
struct stat buf; struct stat buf;
struct tm *Tm; struct tm *Tm;
time_t Ttime; time_t Ttime;
unsigned long ftrack, ltrack; unsigned long ftrack, ltrack;
unsigned long p=0,s; unsigned long p = 0, s;
unsigned char *buffer; unsigned char *buffer;
unsigned char bufferz[2352]; unsigned char bufferz[2352];
unsigned char start[4], end[4]; unsigned char start[4], end[4];
char *tmp; char *tmp;
#ifdef VERBOSE #ifdef VERBOSE
unsigned long count = 0; unsigned long count = 0;
int i=0; int i = 0;
#endif #endif
memset(bufferz, 0, sizeof(bufferz)); memset(bufferz, 0, sizeof(bufferz));
@ -495,37 +538,42 @@ void OnCreate() {
tmp = gtk_entry_get_text(GTK_ENTRY(Edit)); tmp = gtk_entry_get_text(GTK_ENTRY(Edit));
strcpy(IsoFile, tmp); strcpy(IsoFile, tmp);
if (stat(IsoFile, &buf) == 0) { if (stat(IsoFile, &buf) == 0)
{
printf("File %s Already exists\n", IsoFile); printf("File %s Already exists\n", IsoFile);
return; return;
} }
if (CDR_open() == -1) { if (CDR_open() == -1)
{
return; return;
} }
if (CDR_getTD(ftrack, start) == -1) { if (CDR_getTD(ftrack, start) == -1)
{
printf("Error getting TD\n"); printf("Error getting TD\n");
CDR_close(); CDR_close();
return; return;
} }
if (CDR_getTD(ltrack, end) == -1) { if (CDR_getTD(ltrack, end) == -1)
{
printf("Error getting TD\n"); printf("Error getting TD\n");
CDR_close(); CDR_close();
return; return;
} }
f = fopen(IsoFile, "wb"); f = fopen(IsoFile, "wb");
if (f == NULL) { if (f == NULL)
{
CDR_close(); CDR_close();
printf("Error opening %s", IsoFile); printf("Error opening %s", IsoFile);
return; return;
} }
printf("Making Iso: from %2.2d:%2.2d:%2.2d to %2.2d:%2.2d:%2.2d\n", printf("Making Iso: from %2.2d:%2.2d:%2.2d to %2.2d:%2.2d:%2.2d\n",
start[0], start[1], start[2], end[0], end[1], end[2]); start[0], start[1], start[2], end[0], end[1], end[2]);
memcpy(param, start, 3); memcpy(param, start, 3);
@ -538,20 +586,24 @@ void OnCreate() {
gtk_widget_set_sensitive(BtnCreate, FALSE); gtk_widget_set_sensitive(BtnCreate, FALSE);
gtk_widget_set_sensitive(BtnCreateZ, FALSE); gtk_widget_set_sensitive(BtnCreateZ, FALSE);
for (;;) { /* loop until end */ for (;;) /* loop until end */
{
float per; float per;
if ((param[0] == end[0]) & (param[1] == end[1]) & (param[2] == end[2])) if ((param[0] == end[0]) & (param[1] == end[1]) & (param[2] == end[2]))
break; break;
buffer = CDR_readTrack(param); buffer = CDR_readTrack(param);
if (buffer == NULL) { if (buffer == NULL)
{
int i; int i;
for (i=0; i<10; i++) { for (i = 0; i < 10; i++)
{
buffer = CDR_readTrack(param); buffer = CDR_readTrack(param);
if (buffer != NULL) break; if (buffer != NULL) break;
} }
if (buffer == NULL) { if (buffer == NULL)
{
printf("Error Reading %2d:%2d:%2d\n", param[0], param[1], param[2]); printf("Error Reading %2d:%2d:%2d\n", param[0], param[1], param[2]);
buffer = bufferz; buffer = bufferz;
buffer[12] = param[0]; buffer[12] = param[0];
@ -562,10 +614,11 @@ void OnCreate() {
} }
fwrite(buffer, 1, 2352, f); fwrite(buffer, 1, 2352, f);
#ifdef VERBOSE #ifdef VERBOSE
count+= CD_FRAMESIZE_RAW; count += CD_FRAMESIZE_RAW;
printf("reading %2d:%2d:%2d ", param[0], param[1], param[2]); printf("reading %2d:%2d:%2d ", param[0], param[1], param[2]);
if ((time(NULL) - Ttime) != 0) { if ((time(NULL) - Ttime) != 0)
{
i = (count / 1024) / (time(NULL) - Ttime); i = (count / 1024) / (time(NULL) - Ttime);
printf("( %5dKbytes/s, %dX)", i, i / 150); printf("( %5dKbytes/s, %dX)", i, i / 150);
} }
@ -585,7 +638,7 @@ void OnCreate() {
Ttime = time(NULL) - Ttime; Ttime = time(NULL) - Ttime;
Tm = gmtime(&Ttime); Tm = gmtime(&Ttime);
printf("\nTotal Time used: %d:%d:%d\n", Tm->tm_hour, Tm->tm_min, printf("\nTotal Time used: %d:%d:%d\n", Tm->tm_hour, Tm->tm_min,
Tm->tm_sec); Tm->tm_sec);
CDR_close(); CDR_close();
fclose(f); fclose(f);
@ -598,14 +651,15 @@ void OnCreate() {
if (!stop) SysMessageLoc("Iso Image Created OK"); if (!stop) SysMessageLoc("Iso Image Created OK");
} }
void OnCreateZ() { void OnCreateZ()
{
FILE *f; FILE *f;
FILE *t; FILE *t;
struct stat buf; struct stat buf;
struct tm *Tm; struct tm *Tm;
time_t Ttime; time_t Ttime;
unsigned long ftrack, ltrack; unsigned long ftrack, ltrack;
unsigned long p=0,s,c=0; unsigned long p = 0, s, c = 0;
unsigned char *buffer; unsigned char *buffer;
unsigned char bufferz[2352]; unsigned char bufferz[2352];
unsigned char start[4], end[4]; unsigned char start[4], end[4];
@ -614,7 +668,7 @@ void OnCreateZ() {
int b, blocks; int b, blocks;
#ifdef VERBOSE #ifdef VERBOSE
unsigned long count = 0; unsigned long count = 0;
int i=0; int i = 0;
#endif #endif
memset(bufferz, 0, sizeof(bufferz)); memset(bufferz, 0, sizeof(bufferz));
@ -626,53 +680,58 @@ void OnCreateZ() {
UpdZmode(); UpdZmode();
if (Zmode == 1) { if (Zmode == 1)
{
blocks = 1; blocks = 1;
if (strstr(IsoFile, ".Z") == NULL) strcat(IsoFile, ".Z"); if (strstr(IsoFile, ".Z") == NULL) strcat(IsoFile, ".Z");
} else { }
else
{
blocks = 10; blocks = 10;
if (strstr(IsoFile, ".bz") == NULL) strcat(IsoFile, ".bz"); if (strstr(IsoFile, ".bz") == NULL) strcat(IsoFile, ".bz");
} }
if (stat(IsoFile, &buf) == 0) {
if (stat(IsoFile, &buf) == 0)
{
printf("File %s Already exists\n", IsoFile); printf("File %s Already exists\n", IsoFile);
return; return;
} }
strcpy(table, IsoFile); strcpy(table, IsoFile);
if (Zmode == 1) strcat(table, ".table"); if (Zmode == 1)
else strcat(table, ".index"); strcat(table, ".table");
else
strcat(table, ".index");
t = fopen(table, "wb"); t = fopen(table, "wb");
if (t == NULL) {
return; if (t == NULL) return;
} if (CDR_open() == -1) return;
if (CDR_open() == -1) { if (CDR_getTD(ftrack, start) == -1)
return; {
}
if (CDR_getTD(ftrack, start) == -1) {
printf("Error getting TD\n"); printf("Error getting TD\n");
CDR_close(); CDR_close();
return; return;
} }
if (CDR_getTD(ltrack, end) == -1) {
if (CDR_getTD(ltrack, end) == -1)
{
printf("Error getting TD\n"); printf("Error getting TD\n");
CDR_close(); CDR_close();
return; return;
} }
f = fopen(IsoFile, "wb"); f = fopen(IsoFile, "wb");
if (f == NULL) { if (f == NULL)
{
CDR_close(); CDR_close();
printf("Error opening %s", IsoFile); printf("Error opening %s", IsoFile);
return; return;
} }
printf("Making Iso: from %2.2d:%2.2d:%2.2d to %2.2d:%2.2d:%2.2d\n", printf("Making Iso: from %2.2d:%2.2d:%2.2d to %2.2d:%2.2d:%2.2d\n",
start[0], start[1], start[2], end[0], end[1], end[2]); start[0], start[1], start[2], end[0], end[1], end[2]);
memcpy(param, start, 3); memcpy(param, start, 3);
@ -685,23 +744,30 @@ void OnCreateZ() {
gtk_widget_set_sensitive(BtnCreate, FALSE); gtk_widget_set_sensitive(BtnCreate, FALSE);
gtk_widget_set_sensitive(BtnCreateZ, FALSE); gtk_widget_set_sensitive(BtnCreateZ, FALSE);
for (;;) { /* loop until end */ for (;;) /* loop until end */
{
unsigned long size; unsigned long size;
unsigned char Zbuf[CD_FRAMESIZE_RAW * 10 * 2]; unsigned char Zbuf[CD_FRAMESIZE_RAW * 10 * 2];
float per; float per;
for (b=0; b<blocks; b++) { for (b = 0; b < blocks; b++)
{
if ((param[0] == end[0]) & (param[1] == end[1]) & (param[2] == end[2])) if ((param[0] == end[0]) & (param[1] == end[1]) & (param[2] == end[2]))
break; break;
buffer = CDR_readTrack(param); buffer = CDR_readTrack(param);
if (buffer == NULL) { if (buffer == NULL)
{
int i; int i;
for (i=0; i<10; i++) { for (i = 0; i < 10; i++)
{
buffer = CDR_readTrack(param); buffer = CDR_readTrack(param);
if (buffer != NULL) break; if (buffer != NULL) break;
} }
if (buffer == NULL) {
if (buffer == NULL)
{
printf("Error Reading %2d:%2d:%2d\n", param[0], param[1], param[2]); printf("Error Reading %2d:%2d:%2d\n", param[0], param[1], param[2]);
buffer = bufferz; buffer = bufferz;
buffer[12] = param[0]; buffer[12] = param[0];
@ -718,20 +784,23 @@ void OnCreateZ() {
break; break;
size = CD_FRAMESIZE_RAW * blocks * 2; size = CD_FRAMESIZE_RAW * blocks * 2;
if (Zmode == 1) compress(Zbuf, &size, cdbuffer, CD_FRAMESIZE_RAW); if (Zmode == 1)
else BZ2_bzBuffToBuffCompress(Zbuf, (unsigned int*)&size, cdbuffer, CD_FRAMESIZE_RAW * 10, 1, 0, 30); compress(Zbuf, &size, cdbuffer, CD_FRAMESIZE_RAW);
else
BZ2_bzBuffToBuffCompress(Zbuf, (unsigned int*)&size, cdbuffer, CD_FRAMESIZE_RAW * 10, 1, 0, 30);
fwrite(&c, 1, 4, t); fwrite(&c, 1, 4, t);
if (Zmode == 1) fwrite(&size, 1, 2, t); if (Zmode == 1) fwrite(&size, 1, 2, t);
fwrite(Zbuf, 1, size, f); fwrite(Zbuf, 1, size, f);
c+=size; c += size;
#ifdef VERBOSE #ifdef VERBOSE
count+= CD_FRAMESIZE_RAW * blocks; count += CD_FRAMESIZE_RAW * blocks;
printf("reading %2d:%2d:%2d ", param[0], param[1], param[2]); printf("reading %2d:%2d:%2d ", param[0], param[1], param[2]);
if ((time(NULL) - Ttime) != 0) { if ((time(NULL) - Ttime) != 0)
{
i = (count / 1024) / (time(NULL) - Ttime); i = (count / 1024) / (time(NULL) - Ttime);
printf("( %5dKbytes/s, %dX)", i, i / 150); printf("( %5dKbytes/s, %dX)", i, i / 150);
} }
@ -741,8 +810,10 @@ void OnCreateZ() {
p++; p++;
per = ((float)p / s); per = ((float)p / s);
gtk_progress_bar_update(GTK_PROGRESS_BAR(Progress), per); gtk_progress_bar_update(GTK_PROGRESS_BAR(Progress), per);
while (gtk_events_pending()) gtk_main_iteration(); while (gtk_events_pending()) gtk_main_iteration();
if (stop) break; if (stop) break;
} }
if (Zmode == 2) fwrite(&c, 1, 4, f); if (Zmode == 2) fwrite(&c, 1, 4, f);
@ -752,7 +823,7 @@ void OnCreateZ() {
Ttime = time(NULL) - Ttime; Ttime = time(NULL) - Ttime;
Tm = gmtime(&Ttime); Tm = gmtime(&Ttime);
printf("\nTotal Time used: %d:%d:%d\n", Tm->tm_hour, Tm->tm_min, printf("\nTotal Time used: %d:%d:%d\n", Tm->tm_hour, Tm->tm_min,
Tm->tm_sec); Tm->tm_sec);
CDR_close(); CDR_close();
fclose(f); fclose(f);
@ -766,7 +837,8 @@ void OnCreateZ() {
if (!stop) SysMessageLoc("Compressed Iso Image Created OK"); if (!stop) SysMessageLoc("Compressed Iso Image Created OK");
} }
long CDRconfigure(void) { long CDRconfigure(void)
{
int i; int i;
LoadConf(); LoadConf();
@ -786,12 +858,12 @@ long CDRconfigure(void) {
BtnCreateZ = lookup_widget(ConfDlg, "GtkButton_CreateZ"); BtnCreateZ = lookup_widget(ConfDlg, "GtkButton_CreateZ");
methodlist = NULL; methodlist = NULL;
for (i=0; i<2; i++) for (i = 0; i < 2; i++)
methodlist = g_list_append(methodlist, methods[i]); methodlist = g_list_append(methodlist, methods[i]);
Method = lookup_widget(ConfDlg, "GtkCombo_Method"); Method = lookup_widget(ConfDlg, "GtkCombo_Method");
gtk_combo_set_popdown_strings(GTK_COMBO(Method), methodlist); gtk_combo_set_popdown_strings(GTK_COMBO(Method), methodlist);
if (strstr(IsoFile, ".Z") != NULL) if (strstr(IsoFile, ".Z") != NULL)
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Method)->entry), methods[0]); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Method)->entry), methods[0]);
else gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Method)->entry), methods[1]); else gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Method)->entry), methods[1]);
gtk_widget_show_all(ConfDlg); gtk_widget_show_all(ConfDlg);
@ -802,12 +874,14 @@ long CDRconfigure(void) {
GtkWidget *AboutDlg; GtkWidget *AboutDlg;
void OnAboutOk(GtkMenuItem * menuitem, gpointer userdata) { void OnAboutOk(GtkMenuItem * menuitem, gpointer userdata)
{
gtk_widget_hide(AboutDlg); gtk_widget_hide(AboutDlg);
gtk_main_quit(); gtk_main_quit();
} }
void CDRabout(void) { void CDRabout(void)
{
GtkWidget *Label; GtkWidget *Label;
GtkWidget *Ok; GtkWidget *Ok;
GtkWidget *Box, *BBox; GtkWidget *Box, *BBox;
@ -835,7 +909,7 @@ void CDRabout(void) {
Ok = gtk_button_new_with_label("Ok"); Ok = gtk_button_new_with_label("Ok");
gtk_signal_connect(GTK_OBJECT(Ok), "clicked", gtk_signal_connect(GTK_OBJECT(Ok), "clicked",
GTK_SIGNAL_FUNC(OnAboutOk), NULL); GTK_SIGNAL_FUNC(OnAboutOk), NULL);
gtk_container_add(GTK_CONTAINER(BBox), Ok); gtk_container_add(GTK_CONTAINER(BBox), Ok);
GTK_WIDGET_SET_FLAGS(Ok, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(Ok, GTK_CAN_DEFAULT);
gtk_widget_show(Ok); gtk_widget_show(Ok);
@ -844,20 +918,22 @@ void CDRabout(void) {
gtk_main(); gtk_main();
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[])
{
if (argc < 2) return 0; if (argc < 2) return 0;
gtk_init(NULL, NULL); gtk_init(NULL, NULL);
if (!strcmp(argv[1], "open")) { if (!strcmp(argv[1], "open"))
_CDRopen(); _CDRopen();
} else if (!strcmp(argv[1], "configure")) { else if (!strcmp(argv[1], "configure"))
CDRconfigure(); CDRconfigure();
} else if (!strcmp(argv[1], "message")) { else if (!strcmp(argv[1], "message"))
{
if (argc > 2) SysMessageLoc(argv[2]); if (argc > 2) SysMessageLoc(argv[2]);
} else {
CDRabout();
} }
else
CDRabout();
return 0; return 0;
} }

View File

@ -16,7 +16,8 @@
#define SetKeyVdw(name, var) \ #define SetKeyVdw(name, var) \
SetKeyV(name, var, 4, REG_DWORD); SetKeyV(name, var, 4, REG_DWORD);
void SaveConf() { void SaveConf()
{
HKEY myKey; HKEY myKey;
DWORD myDisp; DWORD myDisp;
@ -29,14 +30,17 @@ void SaveConf() {
RegCloseKey(myKey); RegCloseKey(myKey);
} }
void LoadConf() { void LoadConf()
{
HKEY myKey; HKEY myKey;
DWORD type, size; DWORD type, size;
memset(IsoFile, 0, sizeof(IsoFile)); memset(IsoFile, 0, sizeof(IsoFile));
if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\PS2Eplugin\\CDVD\\CDVDiso", 0, KEY_ALL_ACCESS, &myKey)!=ERROR_SUCCESS) { if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\PS2Eplugin\\CDVD\\CDVDiso", 0, KEY_ALL_ACCESS, &myKey) != ERROR_SUCCESS)
SaveConf(); return; {
SaveConf();
return;
} }
GetKeyV("IsoFile", IsoFile, sizeof(IsoFile), REG_BINARY); GetKeyV("IsoFile", IsoFile, sizeof(IsoFile), REG_BINARY);

View File

@ -25,17 +25,19 @@ HWND hMethod;
HWND hBlockDump; HWND hBlockDump;
int stop; int stop;
void SysMessage(char *fmt, ...) { void SysMessage(char *fmt, ...)
{
va_list list; va_list list;
char tmp[512]; char tmp[512];
va_start(list,fmt); va_start(list, fmt);
vsprintf(tmp,fmt,list); vsprintf(tmp, fmt, list);
va_end(list); va_end(list);
MessageBox(0, tmp, "CDVDiso Msg", 0); MessageBox(0, tmp, "CDVDiso Msg", 0);
} }
int _GetFile(char *out) { int _GetFile(char *out)
{
OPENFILENAME ofn; OPENFILENAME ofn;
char szFileName[MAXFILENAME]; char szFileName[MAXFILENAME];
char szFileTitle[MAXFILENAME]; char szFileTitle[MAXFILENAME];
@ -43,29 +45,29 @@ int _GetFile(char *out) {
memset(&szFileName, 0, sizeof(szFileName)); memset(&szFileName, 0, sizeof(szFileName));
memset(&szFileTitle, 0, sizeof(szFileTitle)); memset(&szFileTitle, 0, sizeof(szFileTitle));
ofn.lStructSize = sizeof(OPENFILENAME); ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = GetActiveWindow(); ofn.hwndOwner = GetActiveWindow();
ofn.lpstrFilter = ofn.lpstrFilter =
"Supported Formats\0*.bin;*.iso;*.img;*.nrg;*.mdf;*.Z;*.Z2;*.BZ2;*.dump\0" "Supported Formats\0*.bin;*.iso;*.img;*.nrg;*.mdf;*.Z;*.Z2;*.BZ2;*.dump\0"
"Cd Iso Format (*.bin;*.iso;*.img;*.nrg;*.mdf)\0" "Cd Iso Format (*.bin;*.iso;*.img;*.nrg;*.mdf)\0"
"*.bin;*.iso;*.img;*.nrg;*.mdf\0" "*.bin;*.iso;*.img;*.nrg;*.mdf\0"
"Compressed Z Iso Format (*.Z;*.Z2)\0" "Compressed Z Iso Format (*.Z;*.Z2)\0"
"*.Z;*.Z2\0Compressed BZ Iso Format (*.BZ2)\0" "*.Z;*.Z2\0Compressed BZ Iso Format (*.BZ2)\0"
"*.BZ2\0Block Dumps (*.dump)\0*.dump\0All Files\0*.*\0"; "*.BZ2\0Block Dumps (*.dump)\0*.dump\0All Files\0*.*\0";
ofn.lpstrCustomFilter = NULL; ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0; ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1; ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName; ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAXFILENAME; ofn.nMaxFile = MAXFILENAME;
ofn.lpstrInitialDir = ( IsoCWD[0] == 0 ) ? NULL : IsoCWD; ofn.lpstrInitialDir = (IsoCWD[0] == 0) ? NULL : IsoCWD;
ofn.lpstrFileTitle = szFileTitle; ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = MAXFILENAME; ofn.nMaxFileTitle = MAXFILENAME;
ofn.lpstrTitle = NULL; ofn.lpstrTitle = NULL;
ofn.lpstrDefExt = NULL; ofn.lpstrDefExt = NULL;
ofn.Flags = OFN_HIDEREADONLY; ofn.Flags = OFN_HIDEREADONLY;
if(GetOpenFileName ((LPOPENFILENAME)&ofn)) if (GetOpenFileName((LPOPENFILENAME)&ofn))
{ {
strcpy(out, szFileName); strcpy(out, szFileName);
return 1; return 1;
@ -74,61 +76,70 @@ int _GetFile(char *out) {
return 0; return 0;
} }
int _OpenFile( int saveConf ) { int _OpenFile(int saveConf)
{
int retval = 0; int retval = 0;
// for saving the pcsx2 current working directory; // for saving the pcsx2 current working directory;
char* cwd_pcsx2 = _getcwd( NULL, MAXFILENAME ); char* cwd_pcsx2 = _getcwd(NULL, MAXFILENAME);
if( IsoCWD[0] != 0 ) if (IsoCWD[0] != 0)
_chdir( IsoCWD ); _chdir(IsoCWD);
if (_GetFile(IsoFile) == 1) if (_GetFile(IsoFile) == 1)
{ {
// Save the user's new cwd: // Save the user's new cwd:
if( _getcwd( IsoCWD, MAXFILENAME ) == NULL ) if (_getcwd(IsoCWD, MAXFILENAME) == NULL)
IsoCWD[0] = 0; IsoCWD[0] = 0;
if( saveConf ) if (saveConf)
SaveConf(); SaveConf();
retval = 1; retval = 1;
} }
// Restore Pcsx2's path. // Restore Pcsx2's path.
if( cwd_pcsx2 != NULL ) if (cwd_pcsx2 != NULL)
{ {
_chdir( cwd_pcsx2 ); _chdir(cwd_pcsx2);
free( cwd_pcsx2 ); free(cwd_pcsx2);
cwd_pcsx2 = NULL; cwd_pcsx2 = NULL;
} }
return retval; return retval;
} }
void CfgOpenFile() { void CfgOpenFile()
_OpenFile( TRUE ); {
_OpenFile(TRUE);
} }
void UpdZmode() { void UpdZmode()
if (ComboBox_GetCurSel(hMethod) == 0) { {
if (ComboBox_GetCurSel(hMethod) == 0)
{
Zmode = 1; Zmode = 1;
} else { }
else
{
Zmode = 2; Zmode = 2;
} }
} }
void SysUpdate() { void SysUpdate()
MSG msg; {
MSG msg;
while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessage(&msg); DispatchMessage(&msg);
} }
} }
void OnCompress() { void OnCompress()
{
u32 lsn; u32 lsn;
u8 cdbuff[10*2352]; u8 cdbuff[10*2352];
char Zfile[256]; char Zfile[256];
@ -139,17 +150,23 @@ void OnCompress() {
Edit_GetText(hIsoFile, IsoFile, 256); Edit_GetText(hIsoFile, IsoFile, 256);
UpdZmode(); UpdZmode();
if (Zmode == 1) { if (Zmode == 1)
{
sprintf(Zfile, "%s.Z2", IsoFile); sprintf(Zfile, "%s.Z2", IsoFile);
} else { }
else
{
sprintf(Zfile, "%s.BZ2", IsoFile); sprintf(Zfile, "%s.BZ2", IsoFile);
} }
src = isoOpen(IsoFile); src = isoOpen(IsoFile);
if (src == NULL) return; if (src == NULL) return;
if (Zmode == 1) { if (Zmode == 1)
{
dst = isoCreate(Zfile, ISOFLAGS_Z2); dst = isoCreate(Zfile, ISOFLAGS_Z2);
} else { }
else
{
dst = isoCreate(Zfile, ISOFLAGS_BZ2); dst = isoCreate(Zfile, ISOFLAGS_BZ2);
} }
if (dst == NULL) return; if (dst == NULL) return;
@ -157,9 +174,10 @@ void OnCompress() {
isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks); isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks);
Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), FALSE); Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), FALSE);
Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), FALSE); Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), FALSE);
stop=0; stop = 0;
for (lsn = 0; lsn<src->blocks; lsn++) { for (lsn = 0; lsn < src->blocks; lsn++)
{
printf("block %d ", lsn); printf("block %d ", lsn);
putchar(13); putchar(13);
fflush(stdout); fflush(stdout);
@ -180,16 +198,21 @@ void OnCompress() {
Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), TRUE); Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), TRUE);
Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), TRUE); Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), TRUE);
if (!stop) { if (!stop)
if (ret == -1) { {
if (ret == -1)
{
SysMessage("Error compressing iso image"); SysMessage("Error compressing iso image");
} else { }
else
{
SysMessage("Iso image compressed OK"); SysMessage("Iso image compressed OK");
} }
} }
} }
void OnDecompress() { void OnDecompress()
{
char file[256]; char file[256];
u8 cdbuff[10*2352]; u8 cdbuff[10*2352];
u32 lsn; u32 lsn;
@ -203,18 +226,25 @@ void OnDecompress() {
if (src == NULL) return; if (src == NULL) return;
strcpy(file, IsoFile); strcpy(file, IsoFile);
if (src->flags & ISOFLAGS_Z) { if (src->flags & ISOFLAGS_Z)
{
file[strlen(file) - 2] = 0; file[strlen(file) - 2] = 0;
} else
if (src->flags & ISOFLAGS_Z2) {
file[strlen(file) - 3] = 0;
} else
if (src->flags & ISOFLAGS_BZ2) {
file[strlen(file) - 3] = 0;
} else {
SysMessage("%s is not a compressed image", IsoFile);
return;
} }
else
if (src->flags & ISOFLAGS_Z2)
{
file[strlen(file) - 3] = 0;
}
else
if (src->flags & ISOFLAGS_BZ2)
{
file[strlen(file) - 3] = 0;
}
else
{
SysMessage("%s is not a compressed image", IsoFile);
return;
}
dst = isoCreate(file, 0); dst = isoCreate(file, 0);
if (dst == NULL) return; if (dst == NULL) return;
@ -222,9 +252,10 @@ void OnDecompress() {
isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks); isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks);
Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), FALSE); Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), FALSE);
Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), FALSE); Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), FALSE);
stop=0; stop = 0;
for (lsn = 0; lsn<src->blocks; lsn++) { for (lsn = 0; lsn < src->blocks; lsn++)
{
printf("block %d ", lsn); printf("block %d ", lsn);
putchar(13); putchar(13);
fflush(stdout); fflush(stdout);
@ -245,19 +276,25 @@ void OnDecompress() {
Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), TRUE); Button_Enable(GetDlgItem(hDlg, IDC_COMPRESSISO), TRUE);
Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), TRUE); Button_Enable(GetDlgItem(hDlg, IDC_DECOMPRESSISO), TRUE);
if (!stop) { if (!stop)
if (ret == -1) { {
if (ret == -1)
{
SysMessage("Error decompressing iso image"); SysMessage("Error decompressing iso image");
} else { }
else
{
SysMessage("Iso image decompressed OK"); SysMessage("Iso image decompressed OK");
} }
} }
} }
BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int i; int i;
switch(uMsg) { switch (uMsg)
{
case WM_INITDIALOG: case WM_INITDIALOG:
hDlg = hW; hDlg = hW;
LoadConf(); LoadConf();
@ -267,23 +304,25 @@ BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
hMethod = GetDlgItem(hW, IDC_METHOD); hMethod = GetDlgItem(hW, IDC_METHOD);
hBlockDump = GetDlgItem(hW, IDC_BLOCKDUMP); hBlockDump = GetDlgItem(hW, IDC_BLOCKDUMP);
for (i=0; methods[i] != NULL; i++) { for (i = 0; methods[i] != NULL; i++)
{
ComboBox_AddString(hMethod, methods[i]); ComboBox_AddString(hMethod, methods[i]);
} }
Edit_SetText(hIsoFile, IsoFile); Edit_SetText(hIsoFile, IsoFile);
ComboBox_SetCurSel(hMethod, 0); ComboBox_SetCurSel(hMethod, 0);
/* if (strstr(IsoFile, ".Z") != NULL) /* if (strstr(IsoFile, ".Z") != NULL)
ComboBox_SetCurSel(hMethod, 1); ComboBox_SetCurSel(hMethod, 1);
else ComboBox_SetCurSel(hMethod, 0);*/ else ComboBox_SetCurSel(hMethod, 0);*/
Button_SetCheck(hBlockDump, BlockDump); Button_SetCheck(hBlockDump, BlockDump);
return TRUE; return TRUE;
case WM_COMMAND: case WM_COMMAND:
switch(LOWORD(wParam)) { switch (LOWORD(wParam))
{
case IDC_SELECTISO: case IDC_SELECTISO:
if( _OpenFile(FALSE) == 1 ) if (_OpenFile(FALSE) == 1)
Edit_SetText(hIsoFile, IsoFile); Edit_SetText(hIsoFile, IsoFile);
return TRUE; return TRUE;
@ -315,20 +354,24 @@ BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
return FALSE; return FALSE;
} }
EXPORT_C(void) CDVDconfigure() { EXPORT_C(void) CDVDconfigure()
DialogBox(hInst, {
MAKEINTRESOURCE(IDD_CONFIG), DialogBox(hInst,
GetActiveWindow(), MAKEINTRESOURCE(IDD_CONFIG),
(DLGPROC)ConfigureDlgProc); GetActiveWindow(),
(DLGPROC)ConfigureDlgProc);
} }
BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch(uMsg) { {
switch (uMsg)
{
case WM_INITDIALOG: case WM_INITDIALOG:
return TRUE; return TRUE;
case WM_COMMAND: case WM_COMMAND:
switch(LOWORD(wParam)) { switch (LOWORD(wParam))
{
case IDOK: case IDOK:
EndDialog(hW, TRUE); EndDialog(hW, TRUE);
return FALSE; return FALSE;
@ -337,16 +380,18 @@ BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
return FALSE; return FALSE;
} }
EXPORT_C(void) CDVDabout() { EXPORT_C(void) CDVDabout()
DialogBox(hInst, {
MAKEINTRESOURCE(IDD_ABOUT), DialogBox(hInst,
GetActiveWindow(), MAKEINTRESOURCE(IDD_ABOUT),
(DLGPROC)AboutDlgProc); GetActiveWindow(),
(DLGPROC)AboutDlgProc);
} }
BOOL APIENTRY DllMain(HANDLE hModule, // DLL INIT BOOL APIENTRY DllMain(HANDLE hModule, // DLL INIT
DWORD dwReason, DWORD dwReason,
LPVOID lpReserved) { LPVOID lpReserved)
{
hInst = (HINSTANCE)hModule; hInst = (HINSTANCE)hModule;
return TRUE; // very quick :) return TRUE; // very quick :)
} }

View File

@ -16,7 +16,7 @@
#define IDC_BLOCKDUMP 1007 #define IDC_BLOCKDUMP 1007
// Next default values for new objects // Next default values for new objects
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_RESOURCE_VALUE 105

File diff suppressed because it is too large Load Diff

View File

@ -22,13 +22,15 @@
#define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */ #define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */
#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */ #define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */
typedef struct { typedef struct
{
u32 slsn; u32 slsn;
u32 elsn; u32 elsn;
void *handle; void *handle;
} _multih; } _multih;
typedef struct { typedef struct
{
char filename[256]; char filename[256];
u32 type; u32 type;
u32 flags; u32 flags;

View File

@ -24,43 +24,52 @@
#include "CDVDiso.h" #include "CDVDiso.h"
void Compress(char *filename, int mode) { void Compress(char *filename, int mode)
{
struct stat buf; struct stat buf;
u32 lsn; u32 lsn;
u8 cdbuff[1024*16]; u8 cdbuff[1024*16];
char Zfile[256]; char Zfile[256];
int ret=0; int ret = 0;
isoFile *src; isoFile *src;
isoFile *dst; isoFile *dst;
if (mode == 1) { if (mode == 1)
{
sprintf(Zfile, "%s.Z2", filename); sprintf(Zfile, "%s.Z2", filename);
} else { }
else
{
sprintf(Zfile, "%s.BZ2", filename); sprintf(Zfile, "%s.BZ2", filename);
} }
if (stat(Zfile, &buf) != -1) { if (stat(Zfile, &buf) != -1)
{
printf("'%s' already exists\n", Zfile); printf("'%s' already exists\n", Zfile);
return; return;
/* sprintf(str, "'%s' already exists, overwrite?", Zfile); /* sprintf(str, "'%s' already exists, overwrite?", Zfile);
if (MessageBox(hDlg, str, "Question", MB_YESNO) != IDYES) { if (MessageBox(hDlg, str, "Question", MB_YESNO) != IDYES) {
return; return;
}*/ }*/
} }
printf("src %s; dst %s\n", filename, Zfile); printf("src %s; dst %s\n", filename, Zfile);
src = isoOpen(filename); src = isoOpen(filename);
if (src == NULL) return; if (src == NULL) return;
if (mode == 1) { if (mode == 1)
{
dst = isoCreate(Zfile, ISOFLAGS_Z2); dst = isoCreate(Zfile, ISOFLAGS_Z2);
} else { }
else
{
dst = isoCreate(Zfile, ISOFLAGS_BZ2); dst = isoCreate(Zfile, ISOFLAGS_BZ2);
} }
isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks); isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks);
if (dst == NULL) return; if (dst == NULL) return;
for (lsn = 0; lsn<src->blocks; lsn++) { for (lsn = 0; lsn < src->blocks; lsn++)
{
printf("block %d ", lsn); printf("block %d ", lsn);
putchar(13); putchar(13);
fflush(stdout); fflush(stdout);
@ -72,39 +81,44 @@ void Compress(char *filename, int mode) {
isoClose(src); isoClose(src);
isoClose(dst); isoClose(dst);
if (ret == -1) { if (ret == -1)
{
printf("Error compressing iso image\n"); printf("Error compressing iso image\n");
} else { }
else
{
printf("Iso image compressed OK\n"); printf("Iso image compressed OK\n");
} }
} }
void Decompress(char *filename) { void Decompress(char *filename)
{
struct stat buf; struct stat buf;
char file[256]; char file[256];
u8 cdbuff[10*2352]; u8 cdbuff[10*2352];
u32 lsn; u32 lsn;
isoFile *src; isoFile *src;
isoFile *dst; isoFile *dst;
int ret=0; int ret = 0;
src = isoOpen(filename); src = isoOpen(filename);
if (src == NULL) return; if (src == NULL) return;
strcpy(file, filename); strcpy(file, filename);
if (src->flags & ISOFLAGS_Z) { if (src->flags & ISOFLAGS_Z)
file[strlen(file) - 2] = 0; file[strlen(file) - 2] = 0;
} else else if (src->flags & ISOFLAGS_Z2)
if (src->flags & ISOFLAGS_Z2) {
file[strlen(file) - 3] = 0; file[strlen(file) - 3] = 0;
} else else if (src->flags & ISOFLAGS_BZ2)
if (src->flags & ISOFLAGS_BZ2) {
file[strlen(file) - 3] = 0; file[strlen(file) - 3] = 0;
} else { else
{
printf("%s is not a compressed image\n", filename); printf("%s is not a compressed image\n", filename);
return; return;
} }
if (stat(file, &buf) != -1) {
if (stat(file, &buf) != -1)
{
char str[256]; char str[256];
sprintf(str, "'%s' already exists", file); sprintf(str, "'%s' already exists", file);
isoClose(src); isoClose(src);
@ -115,7 +129,8 @@ void Decompress(char *filename) {
if (dst == NULL) return; if (dst == NULL) return;
isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks); isoSetFormat(dst, src->blockofs, src->blocksize, src->blocks);
for (lsn = 0; lsn<src->blocks; lsn++) { for (lsn = 0; lsn < src->blocks; lsn++)
{
printf("block %d ", lsn); printf("block %d ", lsn);
putchar(13); putchar(13);
fflush(stdout); fflush(stdout);
@ -128,25 +143,23 @@ void Decompress(char *filename) {
isoClose(src); isoClose(src);
isoClose(dst); isoClose(dst);
if (ret == -1) { if (ret == -1)
printf("Error decompressing iso image\n"); printf("Error decompressing iso image\n");
} else { else
printf("Iso image decompressed OK\n"); printf("Iso image decompressed OK\n");
}
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[])
{
if (argc < 3) return 0; if (argc < 3) return 0;
if (argv[1][0] == 'c') { switch (argv[1][0])
Compress(argv[2], 1); {
} else case 'c': Compress(argv[2], 1);
if (argv[1][0] == 'C') { case 'C': Compress(argv[2], 2);
Compress(argv[2], 2); case 'd': Decompress(argv[2]);
} else default: break;
if (argv[1][0] == 'd') {
Decompress(argv[2]);
} }
return 0; return 0;