From 6aacb2899ce6b54909f5b5d1124f22ab31a4a08d Mon Sep 17 00:00:00 2001 From: arcum42 Date: Wed, 22 Jul 2009 12:06:32 +0000 Subject: [PATCH] More iso work. Timestamps work in Linux now (and use Paths.h). Worked on getting rid of other redundant code, moving the logging to the standard pcsx2 log functions, and misc cleanup. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1550 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/CDVD/CDVDaccess.cpp | 204 ++++++++++++++++------------------ pcsx2/CDVD/CDVDisoReader.cpp | 55 +++++---- pcsx2/CDVD/CDVDisoReader.h | 18 +-- pcsx2/CDVD/IsoFileFormats.cpp | 14 +-- pcsx2/CDVD/IsoFileFormats.h | 6 +- pcsx2/DebugTools/Debug.h | 3 + pcsx2/Linux/Pref.cpp | 2 + pcsx2/SourceLog.cpp | 1 + 8 files changed, 149 insertions(+), 154 deletions(-) diff --git a/pcsx2/CDVD/CDVDaccess.cpp b/pcsx2/CDVD/CDVDaccess.cpp index ce3360fa63..da1242ab6a 100644 --- a/pcsx2/CDVD/CDVDaccess.cpp +++ b/pcsx2/CDVD/CDVDaccess.cpp @@ -36,7 +36,7 @@ static int diskTypeCached=-1; int lastReadSize; -static int plsn=0; +static int plsn=0; // This never gets set, so it's always 0. static isoFile *blockDumpFile; @@ -62,15 +62,14 @@ int CheckDiskTypeFS(int baseType) buffer[size]='\0'; - pos=strstr(buffer, "BOOT2"); - if (pos==NULL){ - pos=strstr(buffer, "BOOT"); - if (pos==NULL) { - return CDVD_TYPE_ILLEGAL; - } + pos = strstr(buffer, "BOOT2"); + if (pos == NULL) + { + pos = strstr(buffer, "BOOT"); + if (pos == NULL) return CDVD_TYPE_ILLEGAL; return CDVD_TYPE_PSCD; } - return (baseType==CDVD_TYPE_DETCTCD)?CDVD_TYPE_PS2CD:CDVD_TYPE_PS2DVD; + return (baseType==CDVD_TYPE_DETCTCD) ? CDVD_TYPE_PS2CD : CDVD_TYPE_PS2DVD; } if (IsoFS_findFile("PSX.EXE;1", &tocEntry) == TRUE) @@ -90,8 +89,8 @@ static char bleh[2352]; int FindDiskType(int mType) { - int dataTracks=0; - int audioTracks=0; + int dataTracks = 0; + int audioTracks = 0; int iCDType = mType; @@ -99,69 +98,71 @@ int FindDiskType(int mType) CDVD.getTN(&tn); - if(tn.strack != tn.etrack) // multitrack == CD. + if (tn.strack != tn.etrack) // multitrack == CD. { iCDType = CDVD_TYPE_DETCTCD; } - else if(mType<0) + else if (mType < 0) { cdvdTD td; CDVD.getTD(0,&td); - if(td.lsn>452849) + if (td.lsn > 452849) { iCDType = CDVD_TYPE_DETCTDVDS; } - else if(DoCDVDreadSector((u8*)bleh,16,CDVD_MODE_2048)==0) + else if (DoCDVDreadSector((u8*)bleh,16,CDVD_MODE_2048) == 0) { struct cdVolDesc* volDesc=(struct cdVolDesc *)bleh; - if(volDesc) + if (volDesc) { - if(volDesc->rootToc.tocSize==2048) iCDType = CDVD_TYPE_DETCTCD; - else iCDType = CDVD_TYPE_DETCTDVDS; + if(volDesc->rootToc.tocSize==2048) + iCDType = CDVD_TYPE_DETCTCD; + else + iCDType = CDVD_TYPE_DETCTDVDS; } } } - if(iCDType == CDVD_TYPE_DETCTDVDS) + if (iCDType == CDVD_TYPE_DETCTDVDS) { - s32 dlt=0; - u32 l1s=0; + s32 dlt = 0; + u32 l1s = 0; if(CDVD.getDualInfo(&dlt,&l1s)==0) { - if(dlt>0) - iCDType = CDVD_TYPE_DETCTDVDD; + if (dlt > 0) iCDType = CDVD_TYPE_DETCTDVDD; } } switch(iCDType) { - case CDVD_TYPE_DETCTCD: - Console::Status(" * CDVD Disk Open: CD, %d tracks (%d to %d):", params tn.etrack-tn.strack+1,tn.strack,tn.etrack); - break; - case CDVD_TYPE_DETCTDVDS: - Console::Status(" * CDVD Disk Open: DVD, Single layer or unknown:"); - break; - case CDVD_TYPE_DETCTDVDD: - Console::Status(" * CDVD Disk Open: DVD, Double layer:"); - break; - + case CDVD_TYPE_DETCTCD: + Console::Status(" * CDVD Disk Open: CD, %d tracks (%d to %d):", params tn.etrack-tn.strack+1,tn.strack,tn.etrack); + break; + + case CDVD_TYPE_DETCTDVDS: + Console::Status(" * CDVD Disk Open: DVD, Single layer or unknown:"); + break; + + case CDVD_TYPE_DETCTDVDD: + Console::Status(" * CDVD Disk Open: DVD, Double layer:"); + break; } - audioTracks=dataTracks=0; - for(int i=tn.strack;i<=tn.etrack;i++) + audioTracks = dataTracks = 0; + for(int i = tn.strack; i <= tn.etrack; i++) { cdvdTD td,td2; CDVD.getTD(i,&td); - if(tn.etrack>i) + if (tn.etrack > i) CDVD.getTD(i+1,&td2); else CDVD.getTD(0,&td2); int tlength = td2.lsn - td.lsn; - if(td.type==CDVD_AUDIO_TRACK) + if (td.type == CDVD_AUDIO_TRACK) { audioTracks++; Console::Status(" * * Track %d: Audio (%d sectors)", params i,tlength); @@ -173,24 +174,24 @@ int FindDiskType(int mType) } } - if(dataTracks>0) + if (dataTracks > 0) { iCDType=CheckDiskTypeFS(iCDType); } - if(audioTracks>0) + if (audioTracks > 0) { - if(iCDType==CDVD_TYPE_PS2CD) + switch (iCDType) { - iCDType=CDVD_TYPE_PS2CDDA; - } - else if(iCDType==CDVD_TYPE_PSCD) - { - iCDType=CDVD_TYPE_PSCDDA; - } - else - { - iCDType=CDVD_TYPE_CDDA; + case CDVD_TYPE_PS2CD: + iCDType=CDVD_TYPE_PS2CDDA; + break; + case CDVD_TYPE_PSCD: + iCDType=CDVD_TYPE_PSCDDA; + break; + default: + iCDType=CDVD_TYPE_CDDA; + break; } } @@ -210,25 +211,28 @@ void DetectDiskType() switch(baseMediaType) // Paranoid mode: do not trust the plugin's detection system to work correctly. { - case CDVD_TYPE_CDDA: - case CDVD_TYPE_PSCD: - case CDVD_TYPE_PS2CD: - case CDVD_TYPE_PSCDDA: - case CDVD_TYPE_PS2CDDA: - mType=CDVD_TYPE_DETCTCD; - break; - case CDVD_TYPE_DVDV: - case CDVD_TYPE_PS2DVD: - mType=CDVD_TYPE_DETCTDVDS; - break; - case CDVD_TYPE_DETCTDVDS: - case CDVD_TYPE_DETCTDVDD: - case CDVD_TYPE_DETCTCD: - mType=baseMediaType; - break; - case CDVD_TYPE_NODISC: - diskTypeCached = CDVD_TYPE_NODISC; - return; + case CDVD_TYPE_CDDA: + case CDVD_TYPE_PSCD: + case CDVD_TYPE_PS2CD: + case CDVD_TYPE_PSCDDA: + case CDVD_TYPE_PS2CDDA: + mType = CDVD_TYPE_DETCTCD; + break; + + case CDVD_TYPE_DVDV: + case CDVD_TYPE_PS2DVD: + mType = CDVD_TYPE_DETCTDVDS; + break; + + case CDVD_TYPE_DETCTDVDS: + case CDVD_TYPE_DETCTDVDD: + case CDVD_TYPE_DETCTCD: + mType = baseMediaType; + break; + + case CDVD_TYPE_NODISC: + diskTypeCached = CDVD_TYPE_NODISC; + return; } diskTypeCached = FindDiskType(mType); @@ -239,7 +243,7 @@ void DetectDiskType() s32 DoCDVDinit() { - diskTypeCached=-1; + diskTypeCached = -1; if(CDVD.initCount) *CDVD.initCount++; // used to handle the case where the plugin was inited at boot, but then iso takes over return CDVD.init(); @@ -253,48 +257,22 @@ void DoCDVDshutdown() s32 DoCDVDopen(const char* pTitleFilename) { - int ret=0; - - ret = CDVD.open(pTitleFilename); - + int ret = CDVD.open(pTitleFilename); int cdtype = DoCDVDdetectDiskType(); if((Config.Blockdump)&&(cdtype != CDVD_TYPE_NODISC)) { - char fname_only[MAX_PATH]; + char fname_only[g_MaxPath]; if(CDVD.init == ISO.init) { #ifdef _WIN32 - char fname[MAX_PATH], ext[MAX_PATH]; + char fname[MAX_PATH], ext[g_MaxPath]; _splitpath(isoFileName, NULL, NULL, fname, ext); _makepath(fname_only, NULL, NULL, fname, NULL); #else - char* p, *plast; - - plast = p = strchr(isoFileName, '/'); - while (p != NULL) - { - plast = p; - p = strchr(p + 1, '/'); - } - - // Lets not create dumps in the plugin directory. - strcpy(fname_only, "../"); - if (plast != NULL) - strcat(fname_only, plast + 1); - else - strcat(fname_only, isoFileName); - - plast = p = strchr(fname_only, '.'); - - while (p != NULL) - { - plast = p; - p = strchr(p + 1, '.'); - } - - if (plast != NULL) *plast = 0; + getcwd(fname_only, ArraySize(fname_only)); // Base it out of the current directory for now. + strcat(fname_only, Path::GetFilenameWithoutExt(isoFileName).c_str()); #endif } else @@ -302,7 +280,8 @@ s32 DoCDVDopen(const char* pTitleFilename) strcpy(fname_only, "Untitled"); } -#if defined(_WIN32) && defined(ENABLE_TIMESTAMPS) +#ifdef ENABLE_TIMESTAMPS +#ifdef _WIN32 SYSTEMTIME time; GetLocalTime(&time); @@ -311,16 +290,27 @@ s32 DoCDVDopen(const char* pTitleFilename) " (%04d-%02d-%02d %02d-%02d-%02d).dump", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); - - // TODO: implement this for linux +#else + time_t rawtime; + struct tm * timeinfo; + + time(&rawtime); + timeinfo = localtime(&rawtime); + + sprintf( + fname_only+strlen(fname_only), + " (%04d-%02d-%02d %02d-%02d-%02d).dump", + timeinfo->tm_year + 1900, timeinfo->tm_mon, timeinfo->tm_mday, + timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); +#endif #else strcat(fname_only, ".dump"); #endif cdvdTD td; CDVD.getTD(0, &td); - int blockofs=0; - int blocksize=0; + int blockofs = 0; + int blocksize = 0; int blocks = td.lsn; switch(cdtype) @@ -332,6 +322,7 @@ s32 DoCDVDopen(const char* pTitleFilename) blockofs = 24; blocksize = 2048; break; + default: blockofs = 0; blocksize= 2352; @@ -399,7 +390,7 @@ s32 DoCDVDgetBuffer(u8* buffer) { int ret = CDVD.getBuffer2(buffer); - if(ret==0) + if (ret == 0) { if (blockDumpFile != NULL) { @@ -412,8 +403,7 @@ s32 DoCDVDgetBuffer(u8* buffer) s32 DoCDVDdetectDiskType() { - if(diskTypeCached<0) - DetectDiskType(); + if(diskTypeCached<0) DetectDiskType(); return diskTypeCached; } diff --git a/pcsx2/CDVD/CDVDisoReader.cpp b/pcsx2/CDVD/CDVDisoReader.cpp index d69216c586..4b8f9b21b2 100644 --- a/pcsx2/CDVD/CDVDisoReader.cpp +++ b/pcsx2/CDVD/CDVDisoReader.cpp @@ -29,7 +29,7 @@ #include "CDVDisoReader.h" -char isoFileName[256]; +char isoFileName[g_MaxPath]; u8 *pbuffer; int cdtype; @@ -59,11 +59,11 @@ void lba_to_msf(s32 lba, u8* m, u8* s, u8* f) *f = lba % 75; } -#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 btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */ +//#define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */ -#ifdef PCSX2_DEBUG +/*#ifdef PCSX2_DEBUG void __Log(char *fmt, ...) { va_list list; @@ -76,11 +76,11 @@ void __Log(char *fmt, ...) } #else #define __Log 0&& -#endif +#endif*/ s32 CALLBACK ISOinit() { -#ifdef PCSX2_DEBUG +/*#ifdef PCSX2_DEBUG cdvdLog = fopen("logs/cdvdLog.txt", "w"); if (cdvdLog == NULL) { @@ -91,18 +91,18 @@ s32 CALLBACK ISOinit() return -1; } } - setvbuf(cdvdLog, NULL, _IONBF, 0); + setvbuf(cdvdLog, NULL, _IONBF, 0);*/ CDVD_LOG("CDVDinit\n"); -#endif +/*#endif*/ return 0; } void CALLBACK ISOshutdown() { -#ifdef CDVD_LOG +/*#ifdef CDVD_LOG if (cdvdLog != NULL) fclose(cdvdLog); -#endif +#endif*/ } s32 CALLBACK ISOopen(const char* pTitle) @@ -116,12 +116,18 @@ s32 CALLBACK ISOopen(const char* pTitle) return -1; } - if (iso->type == ISOTYPE_DVD) - cdtype = CDVD_TYPE_PS2DVD; - else if (iso->type == ISOTYPE_AUDIO) - cdtype = CDVD_TYPE_CDDA; - else - cdtype = CDVD_TYPE_PS2CD; + switch (iso->type) + { + case ISOTYPE_DVD: + cdtype = CDVD_TYPE_PS2DVD; + break; + case ISOTYPE_AUDIO: + cdtype = CDVD_TYPE_CDDA; + break; + default: + cdtype = CDVD_TYPE_PS2CD; + break; + } return 0; } @@ -209,8 +215,7 @@ static void FindLayer1Start() layer1start=-2; } - if(layer1start>=0) - Console::Status("found at 0x%8.8x\n", params layer1start); + if(layer1start>=0) Console::Status("found at 0x%8.8x\n", params layer1start); } } @@ -346,11 +351,8 @@ s32 CALLBACK ISOreadSector(u8* tempbuffer, u32 lsn, int mode) { int _lsn = lsn; - if (_lsn < 0) - lsn = iso->blocks + _lsn; - - if(lsn > iso->blocks) - return -1; + if (_lsn < 0) lsn = iso->blocks + _lsn; + if (lsn > iso->blocks) return -1; if(mode == CDVD_MODE_2352) { @@ -389,11 +391,8 @@ s32 CALLBACK ISOreadTrack(u32 lsn, int mode) { int _lsn = lsn; - if (_lsn < 0) - lsn = iso->blocks + _lsn; - - if(lsn > iso->blocks) - return -1; + if (_lsn < 0) lsn = iso->blocks + _lsn; + if (lsn > iso->blocks) return -1; isoReadBlock(iso, cdbuffer + iso->blockofs, lsn); diff --git a/pcsx2/CDVD/CDVDisoReader.h b/pcsx2/CDVD/CDVDisoReader.h index 863633c6a3..cb0448d72a 100644 --- a/pcsx2/CDVD/CDVDisoReader.h +++ b/pcsx2/CDVD/CDVDisoReader.h @@ -29,20 +29,20 @@ #include "IsoFStools.h" #include "IsoFileFormats.h" -#define CDVD_LOG __Log +//#define CDVD_LOG __Log -#ifndef MAX_PATH -#define MAX_PATH 255 -#endif +//#ifndef MAX_PATH +//#define MAX_PATH 255 +//#endif -extern FILE *cdvdLog; +//extern FILE *cdvdLog; -void __Log(char *fmt, ...); +//void __Log(char *fmt, ...); -#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 itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */ +//#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */ -extern char isoFileName[256]; +extern char isoFileName[g_MaxPath]; extern isoFile *iso; #endif \ No newline at end of file diff --git a/pcsx2/CDVD/IsoFileFormats.cpp b/pcsx2/CDVD/IsoFileFormats.cpp index 980be79c2d..2eef41014e 100644 --- a/pcsx2/CDVD/IsoFileFormats.cpp +++ b/pcsx2/CDVD/IsoFileFormats.cpp @@ -183,7 +183,7 @@ int _isoReadDtable(isoFile *iso) for (int i = 0; i < iso->dtablesize; i++) { - _seekfile(iso->handle, 16 + (iso->blocksize + 4)*i, SEEK_SET); + _seekfile(iso->handle, 16 + (iso->blocksize + 4) * i, SEEK_SET); ret = _readfile(iso->handle, &iso->dtable[i], 4); if (ret < 4) return -1; } @@ -220,7 +220,7 @@ int isoDetect(isoFile *iso) // based on florin's CDVDbin detection code :) _readfile(iso->handle, &iso->blocks, 4); _readfile(iso->handle, &iso->blockofs, 4); _isoReadDtable(iso); - return detect(iso) == 1 ? 0 : -1; + return (detect(iso) == 1) ? 0 : -1; } else { @@ -266,7 +266,7 @@ isoFile *isoOpen(const char *filename) Console::WriteLn("detected blocksize = %d", params iso->blocksize); - if (strlen(iso->filename) > 3 && strncmp(iso->filename + (strlen(iso->filename) - 3), "I00", 3) == 0) + if ((strlen(iso->filename) > 3) && strncmp(iso->filename + (strlen(iso->filename) - 3), "I00", 3) == 0) { int i; @@ -299,8 +299,7 @@ isoFile *isoOpen(const char *filename) if (iso->flags == 0) { _seekfile(iso->handle, 0, SEEK_END); - iso->blocks = (u32)((_tellfile(iso->handle) - iso->offset) / - (iso->blocksize)); + iso->blocks = (u32)((_tellfile(iso->handle) - iso->offset) / (iso->blocksize)); } Console::WriteLn("isoOpen: %s ok", params iso->filename); @@ -327,7 +326,6 @@ isoFile *isoCreate(const char *filename, int flags) iso->flags = flags; iso->offset = 0; iso->blockofs = 24; - iso->blocksize = CD_FRAMESIZE_RAW; iso->blocksize = 2048; if (iso->flags & (ISOFLAGS_Z | ISOFLAGS_Z2 | ISOFLAGS_BZ2)) @@ -430,7 +428,7 @@ int _isoReadBlockD(isoFile *iso, u8 *dst, int lsn) { if (iso->dtable[i] != lsn) continue; - _seekfile(iso->handle, 16 + i*(iso->blocksize + 4) + 4, SEEK_SET); + _seekfile(iso->handle, 16 + i * (iso->blocksize + 4) + 4, SEEK_SET); ret = _readfile(iso->handle, dst, iso->blocksize); if (ret < iso->blocksize) return -1; @@ -449,7 +447,7 @@ int _isoReadBlockM(isoFile *iso, u8 *dst, int lsn) for (i = 0; i < 8; i++) { - if (lsn >= iso->multih[i].slsn && lsn <= iso->multih[i].elsn) + if ((lsn >= iso->multih[i].slsn) && (lsn <= iso->multih[i].elsn)) { break; } diff --git a/pcsx2/CDVD/IsoFileFormats.h b/pcsx2/CDVD/IsoFileFormats.h index 2db53a93c2..c7f33ca4ce 100644 --- a/pcsx2/CDVD/IsoFileFormats.h +++ b/pcsx2/CDVD/IsoFileFormats.h @@ -38,6 +38,8 @@ #pragma warning(disable:4018) #endif +#include "CDVD.h" + enum isoType { ISOTYPE_ILLEGAL = 0, @@ -59,8 +61,8 @@ enum isoFlags #define CD_FRAMESIZE_RAW 2352 #define DATA_SIZE (CD_FRAMESIZE_RAW-12) -#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 itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */ +//#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */ typedef struct { diff --git a/pcsx2/DebugTools/Debug.h b/pcsx2/DebugTools/Debug.h index 35e52e0e0c..d0a32073bc 100644 --- a/pcsx2/DebugTools/Debug.h +++ b/pcsx2/DebugTools/Debug.h @@ -112,6 +112,7 @@ extern bool SrcLog_MEMCARDS( const char* fmt, ... ); extern bool SrcLog_PAD( const char* fmt, ... ); extern bool SrcLog_GTE( const char* fmt, ... ); extern bool SrcLog_CDR( const char* fmt, ... ); +extern bool SrcLog_CDVD( const char* fmt, ... ); extern bool SrcLog_GPU( const char* fmt, ... ); #define CPU_LOG (varLog & 0x00000001) && SrcLog_CPU @@ -146,6 +147,7 @@ extern bool SrcLog_GPU( const char* fmt, ... ); #define GTE_LOG (varLog & 0x04000000) && SrcLog_GTE #define CDR_LOG (varLog & 0x08000000) && SrcLog_CDR #define GPU_LOG (varLog & 0x10000000) && SrcLog_GPU +#define CDVD_LOG SrcLog_CDVD // fixme - currently we don't log cache #define CACHE_LOG 0&& @@ -181,6 +183,7 @@ extern bool SrcLog_GPU( const char* fmt, ... ); #define PAD_LOG 0&& #define GTE_LOG 0&& #define CDR_LOG 0&& +#define CDVD_LOG 0&& #define GPU_LOG 0&& #define PSXCNT_LOG 0&& #define EECNT_LOG 0&& diff --git a/pcsx2/Linux/Pref.cpp b/pcsx2/Linux/Pref.cpp index d44b1c3b53..1f5d814a4c 100644 --- a/pcsx2/Linux/Pref.cpp +++ b/pcsx2/Linux/Pref.cpp @@ -111,6 +111,7 @@ int LoadConfig() GetValuel("vuFlagHack", Config.Hacks.vuFlagHack); GetValuel("vuMinMax", Config.Hacks.vuMinMax); GetValuel("IdleLoopFF", Config.Hacks.IdleLoopFF); + //GetValuel("BlockDump", Config.Blockdump); GetValuel("ESCExits", Config.Hacks.ESCExits); if (Config.Hacks.VUCycleSteal < 0 || Config.Hacks.VUCycleSteal > 4) @@ -182,6 +183,7 @@ void SaveConfig() SetValuel("INTCSTATSlow", Config.Hacks.INTCSTATSlow); SetValuel("VUCycleSteal", Config.Hacks.VUCycleSteal); SetValuel("IdleLoopFF", Config.Hacks.IdleLoopFF); + //SetValuel("BlockDump", Config.Blockdump); SetValuel("ESCExits", Config.Hacks.ESCExits); SetValuel("Fixes", Config.GameFixes); diff --git a/pcsx2/SourceLog.cpp b/pcsx2/SourceLog.cpp index 1a51490e9a..3aed290d74 100644 --- a/pcsx2/SourceLog.cpp +++ b/pcsx2/SourceLog.cpp @@ -180,6 +180,7 @@ IMPLEMENT_SOURCE_LOG( MEMCARDS, 'I', 7 ) IMPLEMENT_SOURCE_LOG( PAD, 'I', 7 ) IMPLEMENT_SOURCE_LOG( GTE, 'I', 3 ) IMPLEMENT_SOURCE_LOG( CDR, 'I', 8 ) +IMPLEMENT_SOURCE_LOG( CDVD, 'I', 8 )