www.pudn.com > NEROSDK5582.ZIP > parameters.cpp
/******************************************************************************
|* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|* PARTICULAR PURPOSE.
|*
|* Copyright 1995-2002 Ahead Software AG. All Rights Reserved.
|*-----------------------------------------------------------------------------
|* NeroSDK / NeroCmd
|*
|* PROGRAM: parameters.cpp
|*
|* PURPOSE: Constructor for PARAMETERS class,
|* setters and getters for data members
******************************************************************************/
#include "parameters.h"
// This is a constructor for our PARAMETERS struct which holds
// our command line arguments. All values are here set to some
// reasonable defaults.
PARAMETERS::PARAMETERS ()
{
// Set this flag to prevent destruction of strings because we
// don't own them.
m_FileList.m_bOwnData = false;
m_Command = COMMAND_UNKNOWN;
m_psDriveName = NULL;
m_bReal = false;
m_bTAO = false;
m_bUnderRunProt = false;
m_psArtist = NULL;
m_psTitle = NULL;
m_iSpeed = 0; // 0 is maximum speed
m_bCDExtra = false;
m_eEraseMode = NEROAPI_ERASE_QUICK;
m_bEnableAbort = false;
m_bSpeedTest = false;
m_bCloseSession = false;
m_iSessionToImport = -1;
m_bDetectNonEmptyCDRW = false;
m_bCDText = false;
m_bUseRockridge = false;
m_bCreateIsoFS = false;
m_bCreateUdfFS = false;
m_bImportRockridge = false;
m_bImportIsoOnly = false;
m_bPreferRockridge = false;
m_bDisableEject = false;
m_bVerify = false;
m_bDVD = false;
m_bAudioSelected = false;
m_bISOSelected = false;
m_psVolumeName = NULL;
m_bJoliet = true;
m_bMode2 = false;
m_bVolumeNameSupplied = false;
m_BurnType = BURNTYPE_UNKNOWN;
m_psImageFilename = NULL;
m_iNumTracks = 0;
m_bProcessedParameterFile = false;
m_bWriteNeroErrorLog = true;
m_psErrorLogFilename = NULL;
m_bNeroLogTimestamp = false;
m_bForceEraseCDRW = false;
}
int PARAMETERS::GetFileListSize() const
{
return m_FileList.GetSize();
}
const CSimpleStringArray& PARAMETERS::GetFileList() const
{
return m_FileList;
}
CSimpleStringArray& PARAMETERS::GetFileList()
{
return m_FileList;
}
LPCSTR PARAMETERS::GetErrorLogName() const
{
return m_psErrorLogFilename;
}
COMMAND_LINE_ERRORS PARAMETERS::SetErrorLogName(int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_ERROR_LOG_PARAMETER;
}
argc--;
argv++;
m_psErrorLogFilename = *argv;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::SetWriteErrorLog()
{
m_bWriteNeroErrorLog = false;
return CLE_NO_ERROR;
}
bool PARAMETERS::GetWriteErrorLog() const
{
return m_bWriteNeroErrorLog;
}
COMMAND_LINE_ERRORS PARAMETERS::SetProcessedParameterFile()
{
if (COMMAND_UNKNOWN != m_Command)
{
return CLE_MULTIPLE_COMMANDS_SPECIFIED;
}
m_bProcessedParameterFile = true;
return CLE_NO_ERROR;
}
bool PARAMETERS::GetProcessedParameterFile()
{
return m_bProcessedParameterFile;
}
const TRACK PARAMETERS::GetTrack(int iTrack) const
{
return m_Tracks[iTrack];
}
const bool PARAMETERS::StillTrackSpaceLeft() const
{
if (m_iNumTracks >= sizeof (m_Tracks)/sizeof (m_Tracks[0]))
{
return false;
}
else
{
return true;
}
}
TRACK& PARAMETERS::GetTrack (int iTrack)
{
return m_Tracks[iTrack];
}
const int PARAMETERS::GetTrackNumber(int iTrack) const
{
return m_Tracks[iTrack].m_iTrack;
}
const LPCSTR PARAMETERS::GetTrackFileName (int iTrack) const
{
return m_Tracks[iTrack].m_psFilename;
}
const NERO_TRACKMODE_TYPE PARAMETERS::GetTrackMode(int iTrack) const
{
return m_Tracks[iTrack].m_Mode;
}
COMMAND_LINE_ERRORS PARAMETERS::SetTrackFileName(int iTrack, const char *psName)
{
m_Tracks[iTrack].m_psFilename = psName;
return CLE_NO_ERROR;
}
const int PARAMETERS::GetNumberOfTracks() const
{
return m_iNumTracks;
}
COMMAND_LINE_ERRORS PARAMETERS::SetTrackMode(int iTrack, NERO_TRACKMODE_TYPE eType)
{
m_Tracks[iTrack].m_Mode = eType;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::IncrementNumberOfTracks()
{
m_iNumTracks++;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::SetTrackNumber(int iTrack, int iNumber)
{
m_Tracks[iTrack].m_iTrack = iNumber;
return CLE_NO_ERROR;
}
const NEROAPI_CDRW_ERASE_MODE PARAMETERS::GetEraseMode() const
{
return m_eEraseMode;
}
COMMAND_LINE_ERRORS PARAMETERS::SetEraseMode(NEROAPI_CDRW_ERASE_MODE eMode)
{
if (GetEraseMode() == eMode)
{
return CLE_MULTIPLE_COMMANDS_SPECIFIED;
}
m_eEraseMode = eMode;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::SetImageFileName(const char *psName)
{
m_psImageFilename = psName;
return CLE_NO_ERROR;
}
const LPCSTR PARAMETERS::GetImageFileName() const
{
return m_psImageFilename;
}
COMMAND_LINE_ERRORS PARAMETERS::SetBurnType(BURNTYPE Type)
{
// The Burn type cannot be set twice
// BURNTYPE_ISOAUDIO is an exception to this rule.
// However, settings for ISO/Audio and mixed more are handled
// in SetAudioSelected and SetISOSelected directly.
// So we do not have to worry about that here.
// Another exception is BURNTYPE_FREESTYLE, where every
// track can be written in a different mode.
// So it is legal to provide that type more than once.
if (BURNTYPE_UNKNOWN != GetBurnType())
{
if (BURNTYPE_FREESTYLE != GetBurnType())
{
// A burn type other than freestyle has been set already.
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
else
{
// The burn type set before is freestyle.
// If the new type is not BURNTYPE_FREESTYLE
// we need to return an error.
if (BURNTYPE_FREESTYLE != Type)
{
// Illegal combination of types
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
}
}
// Burn type has not been specified yet, so just set it
m_BurnType = Type;
return CLE_NO_ERROR;
}
const BURNTYPE PARAMETERS::GetBurnType() const
{
return m_BurnType;
}
const COMMAND PARAMETERS::GetCommand() const
{
return m_Command;
}
COMMAND_LINE_ERRORS PARAMETERS::SetCommand (COMMAND Command)
{
if (GetCommand() == COMMAND_UNKNOWN)
{
m_Command = Command;
}
else
{
return CLE_MULTIPLE_COMMANDS_SPECIFIED;
}
return CLE_NO_ERROR;
}
const LPCSTR PARAMETERS::GetDriveName() const
{
return m_psDriveName;
}
COMMAND_LINE_ERRORS PARAMETERS::SetDriveName (int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_DRIVE_NAME_PARAMETER;
}
argc--;
argv++;
m_psDriveName = *argv;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseReal() const
{
return m_bReal;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseReal ()
{
m_bReal = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseTAO() const
{
return m_bTAO;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseTAO ()
{
m_bTAO = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseUnderRunProt() const
{
return m_bUnderRunProt;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseUnderRunProt ()
{
m_bUnderRunProt = true;
return CLE_NO_ERROR;
}
const LPCSTR PARAMETERS::GetArtist() const
{
return m_psArtist;
}
COMMAND_LINE_ERRORS PARAMETERS::SetArtist (int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_ARTIST_PARAMETER;
}
argc--;
argv++;
m_psArtist = *argv;
return CLE_NO_ERROR;
}
const LPCSTR PARAMETERS::GetTitle() const
{
return m_psTitle;
}
COMMAND_LINE_ERRORS PARAMETERS::SetTitle (int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_TITLE_PARAMETER;
}
argc--;
argv++;
m_psTitle = *argv;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetAudioSelected() const
{
return m_bAudioSelected;
}
COMMAND_LINE_ERRORS PARAMETERS::SetAudioSelected ()
{
// Audio can only be used in combination with ISO
if (BURNTYPE_UNKNOWN != GetBurnType())
{
if (false == GetISOSelected())
{
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
}
m_bAudioSelected = true;
m_BurnType = BURNTYPE_ISOAUDIO;
return CLE_NO_ERROR;
}
const int PARAMETERS::GetSpeed() const
{
return m_iSpeed;
}
COMMAND_LINE_ERRORS PARAMETERS::SetSpeed (int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_SPEED_PARAMETER;
}
argc--;
argv++;
m_iSpeed = atoi(*argv);
// check if conversion went right
if (GetSpeed() < 0)
{
return CLE_INVALID_SPEED_PARAMETER;
}
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseCDExtra() const
{
return m_bCDExtra;
}
COMMAND_LINE_ERRORS PARAMETERS::SetCDExtra ()
{
m_bCDExtra = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetEnableAbort() const
{
return m_bEnableAbort;
}
COMMAND_LINE_ERRORS PARAMETERS::SetEnableAbort ()
{
m_bEnableAbort = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseSpeedTest() const
{
return m_bSpeedTest;
}
COMMAND_LINE_ERRORS PARAMETERS::SetSpeedTest ()
{
m_bSpeedTest = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetCloseSession() const
{
return m_bCloseSession;
}
COMMAND_LINE_ERRORS PARAMETERS::SetCloseSession ()
{
m_bCloseSession = true;
return CLE_NO_ERROR;
}
const int PARAMETERS::GetSessionToImport() const
{
return m_iSessionToImport;
}
COMMAND_LINE_ERRORS PARAMETERS::SetSessionToImport (int& argc, char**& argv)
{
if (argc <= 0)
{
return CLE_MISSING_IMPORT_PARAMETER;
}
argc--;
argv++;
m_iSessionToImport = atoi(*argv);
if (GetSessionToImport() < 0)
{
return CLE_INVALID_IMPORT_PARAMETER;
}
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetDetectNonEmptyCDRW() const
{
return m_bDetectNonEmptyCDRW;
}
COMMAND_LINE_ERRORS PARAMETERS::SetDetectNonEmptyCDRW ()
{
m_bDetectNonEmptyCDRW = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseCDText() const
{
return m_bCDText;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseCDText ()
{
m_bCDText = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseRockridge() const
{
return m_bUseRockridge;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseRockridge ()
{
m_bUseRockridge = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetCreateIsoFs() const
{
return m_bCreateIsoFS;
}
COMMAND_LINE_ERRORS PARAMETERS::SetCreateIsoFs ()
{
m_bCreateIsoFS = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetCreateUdfFS() const
{
return m_bCreateUdfFS;
}
COMMAND_LINE_ERRORS PARAMETERS::SetCreateUdfFs ()
{
m_bCreateUdfFS = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetImportRockridge() const
{
return m_bImportRockridge;
}
COMMAND_LINE_ERRORS PARAMETERS::SetImportRockridge ()
{
m_bImportRockridge = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetImportIsoOnly() const
{
return m_bImportIsoOnly;
}
COMMAND_LINE_ERRORS PARAMETERS::SetImportIsoOnly ()
{
m_bImportIsoOnly = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetPreferRockRidge() const
{
return m_bPreferRockridge;
}
COMMAND_LINE_ERRORS PARAMETERS::SetPreferRockridge ()
{
m_bPreferRockridge = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetDisableEject() const
{
return m_bDisableEject;
}
COMMAND_LINE_ERRORS PARAMETERS::SetDisableEject ()
{
m_bDisableEject = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetVerify() const
{
return m_bVerify;
}
COMMAND_LINE_ERRORS PARAMETERS::SetVerify ()
{
m_bVerify = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetISOSelected() const
{
return m_bISOSelected;
}
COMMAND_LINE_ERRORS PARAMETERS::SetISOSelected (int& argc, char**& argv)
{
// ISO can be used in combination with
// any other burn type except BURNTYPE_IMAGE.
if (BURNTYPE_UNKNOWN != GetBurnType())
{
// If ISO has been set already return an error
if (true == GetISOSelected())
{
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
else
{
// The other illegal type in this case
// is BURNTYPE_IMAGE.
if (BURNTYPE_IMAGE == GetBurnType())
{
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
}
}
else
{
// No burn type set before
m_BurnType = BURNTYPE_ISOAUDIO;
}
if (argc <= 0)
{
return CLE_MISSING_ISO_PARAMETER;
}
argc--;
argv++;
COMMAND_LINE_ERRORS ecl = SetVolumeName(*argv);
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
ecl = SetVolumeNameSupplied();
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
m_bISOSelected = true;
return CLE_NO_ERROR;
}
const LPCSTR PARAMETERS::GetVolumeName() const
{
return m_psVolumeName;
}
COMMAND_LINE_ERRORS PARAMETERS::SetVolumeName (char* psName)
{
m_psVolumeName = psName;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseJoliet() const
{
return m_bJoliet;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseJoliet ()
{
m_bJoliet = false;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseMode2() const
{
return m_bMode2;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseMode2 ()
{
m_bMode2 = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetVolumeNameSupplied() const
{
return m_bVolumeNameSupplied;
}
COMMAND_LINE_ERRORS PARAMETERS::SetVolumeNameSupplied ()
{
m_bVolumeNameSupplied = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetUseDVD() const
{
return m_bDVD;
}
COMMAND_LINE_ERRORS PARAMETERS::SetUseDVD ()
{
m_bDVD = true;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::SetImageBurnType(int &argc, char **&argv)
{
COMMAND_LINE_ERRORS ecl = SetBurnType(BURNTYPE_IMAGE);
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
if (argc <= 0)
{
return CLE_MISSING_IMAGE_PARAMETER;
}
argc--;
argv++;
return SetImageFileName(*argv);
}
COMMAND_LINE_ERRORS PARAMETERS::SetFreestyleBurnType(int &argc, char **&argv)
{
// make sure that the burn type has not been
// specified already
if (GetBurnType() != BURNTYPE_UNKNOWN && GetBurnType() != BURNTYPE_FREESTYLE)
{
return CLE_BURN_TYPE_ALREADY_SPECIFIED;
}
// set the track mode
COMMAND_LINE_ERRORS ecl;
if (!stricmp (*argv, "--freestyle_mode1"))
{
ecl = SetTrackMode(GetNumberOfTracks(), NERO_TRACKMODE_MODE1);
}
else if (!stricmp (*argv, "--freestyle_mode2"))
{
ecl = SetTrackMode(GetNumberOfTracks(), NERO_TRACKMODE_MODE2_FORM1);
}
else if (!stricmp (*argv, "--freestyle_audio"))
{
ecl = SetTrackMode(GetNumberOfTracks(), NERO_TRACKMODE_AUDIO);
}
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
// the file name must be specified after the track mode
if (argc <= 0)
{
return CLE_MISSING_IMAGE_PARAMETER;
}
// make sure that we can add another track
if (StillTrackSpaceLeft() == false)
{
return CLE_MAXIMUM_NUMBER_OF_TRACKS_REACHED;
}
// Get the track filename
argc--;
argv++;
ecl = SetTrackFileName(GetNumberOfTracks(), *argv);
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
ecl = IncrementNumberOfTracks();
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
// finally, set the burn type
return SetBurnType(BURNTYPE_FREESTYLE);
}
COMMAND_LINE_ERRORS PARAMETERS::AddAudioReadTrack(int &argc, char **&argv)
{
bool bOK = false;
if (strlen (*argv) <= 4 &&
'0' <= (*argv)[2] && (*argv)[2] <= '9' &&
'0' <= (*argv)[3] && (*argv)[3] <= '9')
{
if (StillTrackSpaceLeft() == false)
{
return CLE_MAXIMUM_NUMBER_OF_TRACKS_REACHED;
}
COMMAND_LINE_ERRORS ecl = SetTrackNumber(GetNumberOfTracks(), atoi (&(*argv)[2]));
if (GetTrackNumber(GetNumberOfTracks()) > 0)
{
if (argc <= 0)
{
return CLE_MISSING_TRACK_PARAMETER;
}
argc--;
argv++;
ecl = SetTrackFileName(GetNumberOfTracks(), *argv);
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
ecl = IncrementNumberOfTracks();
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
bOK = true;
}
}
if (!bOK)
{
return CLE_INVALID_PARAMETER;
}
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::AddAudioIsoFreestyleWriteTrack(int &argc, char **&argv)
{
if (false == GetVolumeNameSupplied() && GetBurnType() != BURNTYPE_FREESTYLE)
{
// If volume name was not yet supplied, the parameter is an audio file.
if (StillTrackSpaceLeft() == false)
{
return CLE_MAXIMUM_NUMBER_OF_TRACKS_REACHED;
}
COMMAND_LINE_ERRORS ecl = SetTrackFileName(GetNumberOfTracks(), *argv);
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
ecl = IncrementNumberOfTracks();
if (CLE_NO_ERROR != ecl)
{
return ecl;
}
}
else
{
// This is a data file so simply add it to the back of the array.
GetFileList().Add (*argv);
}
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetNeroLogTimestamp() const
{
return m_bNeroLogTimestamp;
}
COMMAND_LINE_ERRORS PARAMETERS::SetNeroLogTimestamp()
{
m_bNeroLogTimestamp = true;
return CLE_NO_ERROR;
}
COMMAND_LINE_ERRORS PARAMETERS::SetForceEraseCDRW()
{
m_bForceEraseCDRW = true;
return CLE_NO_ERROR;
}
const bool PARAMETERS::GetForceEraseCDRW() const
{
return m_bForceEraseCDRW;
}