winamp/Src/burnlib/common.cpp

261 lines
11 KiB
C++

#include "./main.h"
#include "./resource.h"
#include "./primosdk.h"
#include <strsafe.h>
DWORD BeginBurn(obj_primo *primoSDK, DWORD drive, WABURNSTRUCT *burnstruct)
{
burnstruct->primoSDK = primoSDK;
burnstruct->drive = drive;
DWORD rc[3] = { PRIMOSDK_ERROR, PRIMOSDK_ERROR, PRIMOSDK_ERROR};
burnstruct->blocker = (PBYTE)("WINAMPBURNER v1.0");
DWORD retCode = PRIMOSDK_OK;
// init Sonic PrimoSDK
if (!primoSDK)
return PRIMOSDK_NOTLOADED;
// block drive
rc[0] = primoSDK->UnitVxBlock(&burnstruct->drive, PRIMOSDK_LOCK, burnstruct->blocker);
if (PRIMOSDK_OK != rc[0]) retCode = rc[0];
else
{
rc[1] = primoSDK->UnitAIN(&burnstruct->drive, PRIMOSDK_LOCK);
if (PRIMOSDK_OK != rc[1]) retCode = rc[1];
else
{
rc[2] = primoSDK->UnitLock(&burnstruct->drive, PRIMOSDK_LOCK);
if (PRIMOSDK_OK != rc[2]) retCode = rc[2];
}
}
if (PRIMOSDK_OK != retCode)
{
if (PRIMOSDK_OK == rc[2]) primoSDK->UnitLock(&burnstruct->drive, PRIMOSDK_UNLOCK);
if (PRIMOSDK_OK == rc[1]) primoSDK->UnitAIN(&burnstruct->drive, PRIMOSDK_UNLOCK);
if (PRIMOSDK_OK == rc[0]) primoSDK->UnitVxBlock(&burnstruct->drive, PRIMOSDK_UNLOCK, burnstruct->blocker);
burnstruct->drive = 0x0000;
burnstruct->blocker = NULL;
burnstruct->primoSDK = NULL;
}
return retCode;
}
DWORD EndBurn(WABURNSTRUCT *burnstruct)
{
if (!burnstruct) return PRIMOSDK_ERROR;
if (0x0000 == burnstruct->drive) return PRIMOSDK_OK;
DWORD rc[4];
rc[0] = burnstruct->primoSDK->UnitLock(&burnstruct->drive, PRIMOSDK_UNLOCK);
rc[1] = burnstruct->primoSDK->MoveMedium(&burnstruct->drive,
PRIMOSDK_IMMEDIATE | ((burnstruct->eject) ? PRIMOSDK_OPENTRAYEJECT : 0));
if (0 == burnstruct->eject)
rc[1] = PRIMOSDK_OK;
rc[2] = burnstruct->primoSDK->UnitAIN(&burnstruct->drive, PRIMOSDK_UNLOCK);
rc[3] = burnstruct->primoSDK->UnitVxBlock(&burnstruct->drive, PRIMOSDK_UNLOCK, burnstruct->blocker);
burnstruct->drive = 0x0000;
burnstruct->blocker = NULL;
int len = sizeof(rc)/sizeof(DWORD);
for (int i = 0; i < len; i++) { if (PRIMOSDK_OK != rc[i]) return rc[i]; }
return PRIMOSDK_OK;
}
DWORD GetMediumInfo(obj_primo *primoSDK, DWORD *drive, WAMEDIUMINFO *info)
{
DWORD retCode(PRIMOSDK_OK), erasable(0);
if (MAXDWORD != info->mediumType || MAXDWORD != info->mediumFormat || MAXDWORD != info->erasable ||
MAXDWORD != info->tracks || MAXDWORD != info->usedSectors || MAXDWORD != info->freeSectors || MAXDWORD != info->recordable)
{
retCode = primoSDK->DiscInfoEx(drive, 0,(MAXDWORD == info->mediumType && MAXDWORD == info->recordable) ? NULL : &info->mediumType,
(MAXDWORD == info->mediumFormat) ? NULL : &info->mediumFormat,
&erasable,
(MAXDWORD == info->tracks) ? NULL : &info->tracks,
(MAXDWORD == info->usedSectors) ? NULL : &info->usedSectors,
(MAXDWORD == info->freeSectors) ? NULL : &info->freeSectors);
if (MAXDWORD != info->erasable) info->erasable = (TRUE == erasable);
if (MAXDWORD != info->recordable) info->recordable = (PRIMOSDK_COMPLIANTGOLD == info->mediumType || PRIMOSDK_BLANK == info->mediumType);
if (PRIMOSDK_OK != retCode) return retCode;
}
DWORD medium, rfu3;
BOOL needMediumInfo = (MAXDWORD != info->medium || MAXDWORD != info->isCD || MAXDWORD != info->isDCD || MAXDWORD != info->isDVD || MAXDWORD != info->isDLDVD);
if (MAXDWORD != info->protectedDVD || needMediumInfo)
{
retCode = primoSDK->DiscInfo2(drive, !needMediumInfo ? NULL : &medium,
(MAXDWORD == info->protectedDVD) ? NULL : &info->protectedDVD,
NULL,
!needMediumInfo ? NULL : &info->medium,
&rfu3);
}
if (MAXDWORD != info->isCD) info->isCD = (PRIMOSDK_CDROM == info->medium || PRIMOSDK_CDR == info->medium || PRIMOSDK_CDRW == info->medium);
if (MAXDWORD != info->isDCD) info->isDCD = (PRIMOSDK_DDCDR == info->medium || PRIMOSDK_DDCDRW == info->medium);
if (MAXDWORD != info->isDVD) info->isDVD = (PRIMOSDK_DDCDROM == info->medium || PRIMOSDK_DVDR == info->medium || PRIMOSDK_DVDROM == info->medium || PRIMOSDK_DVDRAM == info->medium ||
PRIMOSDK_DVDRW == info->medium || PRIMOSDK_DVDPRW == info->medium || PRIMOSDK_DVDPR == info->medium);
if (MAXDWORD != info->isDLDVD) info->isDLDVD = (PRIMOSDK_DVDPR9 == info->medium);
return retCode;
}
wchar_t* GetMediumText(wchar_t *buffer, unsigned int cchBuffer,DWORD medium)
{
UINT uid = IDS_UNKNOWN;
switch(medium)
{
case PRIMOSDK_CDROM: uid = IDS_MEDIUM_CD; break;
case PRIMOSDK_CDR: uid = IDS_MEDIUM_CDR; break;
case PRIMOSDK_CDRW: uid = IDS_MEDIUM_CDRW; break;
case PRIMOSDK_DVDR: uid = IDS_MEDIUM_DVDR; break;
case PRIMOSDK_DVDROM: uid = IDS_MEDIUM_DVD; break;
case PRIMOSDK_DVDRAM: uid = IDS_MEDIUM_DVDRAM; break;
case PRIMOSDK_DVDRW: uid = IDS_MEDIUM_DVDRW; break;
case PRIMOSDK_DVDPRW: uid = IDS_MEDIUM_DVDPRW; break;
case PRIMOSDK_DVDPR: uid = IDS_MEDIUM_DVDPR; break;
case PRIMOSDK_DDCDROM: uid = IDS_MEDIUM_DDCD; break;
case PRIMOSDK_DDCDR: uid = IDS_MEDIUM_DDCDR; break;
case PRIMOSDK_DDCDRW: uid = IDS_MEDIUM_DDCDRW; break;
case PRIMOSDK_DVDPR9: uid = IDS_MEDIUM_DVDPR9; break;
case PRIMOSDK_DVDR9: uid = IDS_MEDIUM_DVDR9; break;
case PRIMOSDK_BDR: uid = IDS_MEDIUM_BDR; break;
case PRIMOSDK_BDRE: uid = IDS_MEDIUM_BDRE; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t*GetMediumTypeText(wchar_t *buffer, unsigned int cchBuffer, DWORD type)
{
UINT uid = IDS_UNKNOWN;
switch(type)
{
case PRIMOSDK_SILVER: uid = IDS_MEDIUMTYPE_SILVER; break;
case PRIMOSDK_COMPLIANTGOLD: uid = IDS_MEDIUMTYPE_COMPILATIONGOLD; break;
case PRIMOSDK_OTHERGOLD: uid = IDS_MEDIUMTYPE_OTHERGOLD; break;
case PRIMOSDK_BLANK: uid = IDS_MEDIUMTYPE_BLANK; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t* GetMediumFormatText(wchar_t *buffer, unsigned int cchBuffer, DWORD format)
{
UINT uid = IDS_UNKNOWN;
switch(format)
{
case PRIMOSDK_B1: uid = IDS_MEDIUMFORMAT_B1; break;
case PRIMOSDK_D1: uid = IDS_MEDIUMFORMAT_D1; break;
case PRIMOSDK_D2: uid = IDS_MEDIUMFORMAT_D2; break;
case PRIMOSDK_D3: uid = IDS_MEDIUMFORMAT_D3; break;
case PRIMOSDK_D4: uid = IDS_MEDIUMFORMAT_D4; break;
case PRIMOSDK_D5: uid = IDS_MEDIUMFORMAT_D5; break;
case PRIMOSDK_D6: uid = IDS_MEDIUMFORMAT_D6; break;
case PRIMOSDK_D7: uid = IDS_MEDIUMFORMAT_D7; break;
case PRIMOSDK_D8: uid = IDS_MEDIUMFORMAT_D8; break;
case PRIMOSDK_D9: uid = IDS_MEDIUMFORMAT_D9; break;
case PRIMOSDK_A1: uid = IDS_MEDIUMFORMAT_A1; break;
case PRIMOSDK_A2: uid = IDS_MEDIUMFORMAT_A2; break;
case PRIMOSDK_A3: uid = IDS_MEDIUMFORMAT_A3; break;
case PRIMOSDK_A4: uid = IDS_MEDIUMFORMAT_A4; break;
case PRIMOSDK_A5: uid = IDS_MEDIUMFORMAT_A5; break;
case PRIMOSDK_M1: uid = IDS_MEDIUMFORMAT_M1; break;
case PRIMOSDK_M2: uid = IDS_MEDIUMFORMAT_M2; break;
case PRIMOSDK_M3: uid = IDS_MEDIUMFORMAT_M3; break;
case PRIMOSDK_M4: uid = IDS_MEDIUMFORMAT_M4; break;
case PRIMOSDK_M5: uid = IDS_MEDIUMFORMAT_M5; break;
case PRIMOSDK_M6: uid = IDS_MEDIUMFORMAT_M6; break;
case PRIMOSDK_F1: uid = IDS_MEDIUMFORMAT_F1; break;
case PRIMOSDK_F2: uid = IDS_MEDIUMFORMAT_F2; break;
case PRIMOSDK_F3: uid = IDS_MEDIUMFORMAT_F3; break;
case PRIMOSDK_F4: uid = IDS_MEDIUMFORMAT_F4; break;
case PRIMOSDK_F5: uid = IDS_MEDIUMFORMAT_F5; break;
case PRIMOSDK_F8: uid = IDS_MEDIUMFORMAT_F8; break;
case PRIMOSDK_FA: uid = IDS_MEDIUMFORMAT_FA; break;
case PRIMOSDK_GENERICCD: uid = IDS_MEDIUMFORMAT_GENERICCD; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t* GetPrimoCodeText(wchar_t *buffer, unsigned int cchBuffer, DWORD primoCode)
{
UINT uid = IDS_UNKNOWN;
switch(primoCode)
{
case PRIMOSDK_OK: uid = IDS_PRIMOCODE_OK; break;
case PRIMOSDK_CMDSEQUENCE: uid = IDS_PRIMOCODE_CMDSEQUENCE; break;
case PRIMOSDK_NOASPI: uid = IDS_PRIMOCODE_NOASPI; break; //PRIMOSDK_NO_DRIVER - is the same code
case PRIMOSDK_INTERR: uid = IDS_PRIMOCODE_INTERR; break;
case PRIMOSDK_BADPARAM: uid = IDS_PRIMOCODE_BADPARAM; break;
case PRIMOSDK_ALREADYEXIST: uid = IDS_PRIMOCODE_ALREADYEXIST; break;
case PRIMOSDK_NOTREADABLE: uid = IDS_PRIMOCODE_NOTREADABLE; break;
case PRIMOSDK_NOSPACE: uid = IDS_PRIMOCODE_NOSPACE; break;
case PRIMOSDK_INVALIDMEDIUM: uid = IDS_PRIMOCODE_INVALIDMEDIUM; break;
case PRIMOSDK_RUNNING: uid = IDS_PRIMOCODE_RUNNING; break;
case PRIMOSDK_BUR: uid = IDS_PRIMOCODE_BUR; break;
case PRIMOSDK_SCSIERROR: uid = IDS_PRIMOCODE_SCSIERROR; break;
case PRIMOSDK_UNITERROR: uid = IDS_PRIMOCODE_UNITERROR; break;
case PRIMOSDK_NOTREADY: uid = IDS_PRIMOCODE_NOTREADY; break;
case PRIMOSDK_INVALIDSOURCE: uid = IDS_PRIMOCODE_INVALIDSOURCE; break;
case PRIMOSDK_INCOMPATIBLE: uid = IDS_PRIMOCODE_INCOMPATIBLE; break;
case PRIMOSDK_FILEERROR: uid = IDS_PRIMOCODE_FILEERROR; break;
case PRIMOSDK_ITSADEMO: uid = IDS_PRIMOCODE_ITSADEMO; break;
case PRIMOSDK_USERABORT: uid = IDS_PRIMOCODE_USERABORT; break;
case PRIMOSDK_BADHANDLE: uid = IDS_PRIMOCODE_BADHANDLE; break;
case PRIMOSDK_BADUNIT: uid = IDS_PRIMOCODE_BADUNIT; break;
case PRIMOSDK_ERRORLOADING: uid = IDS_PRIMOCODE_ERRORLOADING; break;
case PRIMOSDK_NOAINCONTROL: uid = IDS_PRIMOCODE_NOAINCONTROL; break;
case PRIMOSDK_READERROR: uid = IDS_PRIMOCODE_READERROR; break;
case PRIMOSDK_WRITEERROR: uid = IDS_PRIMOCODE_WRITEERROR; break;
case PRIMOSDK_TMPOVERFLOW: uid = IDS_PRIMOCODE_TMPOVERFLOW; break;
case PRIMOSDK_DVDSTRUCTERROR: uid = IDS_PRIMOCODE_DVDSTRUCTERROR; break;
case PRIMOSDK_FILETOOLARGE: uid = IDS_PRIMOCODE_FILETOOLARGE; break;
case PRIMOSDK_CACHEFULL: uid = IDS_PRIMOCODE_CACHEFULL; break;
case PRIMOSDK_FEATURE_NOT_SUPPORTED: uid = IDS_PRIMOCODE_FEATURE_NOT_SUPPORTED; break;
case PRIMOSDK_FEATURE_DISABLED: uid = IDS_PRIMOCODE_FEATURE_DISABLED; break;
case PRIMOSDK_CALLBACK_ERROR: uid = IDS_PRIMOCODE_CALLBACK_ERROR; break;
case PRIMOSDK_PROTECTEDWMA: uid = IDS_PRIMOCODE_PROTECTEDWMA; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t* GetBussText(wchar_t *buffer, unsigned int cchBuffer, DWORD bussType)
{
UINT uid = IDS_UNKNOWN;
switch(bussType)
{
case PRIMOSDK_ATAPI: uid = IDS_BUSSTYPE_ATAPI; break;
case PRIMOSDK_SCSI: uid = IDS_BUSSTYPE_SCSI; break;
case PRIMOSDK_1394: uid = IDS_BUSSTYPE_1394; break;
case PRIMOSDK_USB: uid = IDS_BUSSTYPE_USB; break;
case PRIMOSDK_USB2: uid = IDS_BUSSTYPE_USB2; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t* GetTrackTypeText(wchar_t *buffer, unsigned int cchBuffer, DWORD trackType)
{
UINT uid = IDS_UNKNOWN;
switch(trackType)
{
case PRIMOSDK_AUDIO_TRACK: uid = IDS_TRACKTYPE_AUDIO; break;
case PRIMOSDK_MODE1_TRACK: uid = IDS_TRACKTYPE_TRACK2; break;
case PRIMOSDK_MODE2_TRACK: uid = IDS_TRACKTYPE_TRACK2; break;
}
LoadStringW(hResource, uid, buffer, cchBuffer);
return buffer;
}
wchar_t* GetTimeString(wchar_t *string, unsigned int cchLen, unsigned int timesec)
{
unsigned int min = timesec / 60;
if (min > 0) timesec = timesec % 60;
unsigned int hour = min / 60;
if (hour > 0) min = min % 60;
StringCchPrintfW(string, cchLen, L"%02d:%02d:%02d", hour, min, timesec);
return string;
}