SidConfig.h   SidConfig.h 
skipping to change at line 33 skipping to change at line 33
#ifndef SIDCONFIG_H #ifndef SIDCONFIG_H
#define SIDCONFIG_H #define SIDCONFIG_H
#include <stdint.h> #include <stdint.h>
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
class sidbuilder; class sidbuilder;
/** /**
* SidConfig * SidConfig
* *
* An instance of this class is used to transport emulator settings * An instance of this class is used to transport emulator settings
* to and from the interface class. * to and from the interface class.
*/ */
class SID_EXTERN SidConfig class SID_EXTERN SidConfig
{ {
public: public:
typedef enum {MONO = 1, STEREO} playback_t; typedef enum {MONO = 1, STEREO} playback_t;
typedef enum {MOS6581, MOS8580} sid_model_t; typedef enum {MOS6581, MOS8580} sid_model_t;
typedef enum {PAL, NTSC, OLD_NTSC, DREAN} c64_model_t; typedef enum {PAL, NTSC, OLD_NTSC, DREAN} c64_model_t;
typedef enum {INTERPOLATE, RESAMPLE_INTERPOLATE} sampling_method_t; typedef enum {INTERPOLATE, RESAMPLE_INTERPOLATE} sampling_method_t;
public: public:
/** /**
* Maximum power on delay * Maximum power on delay.
* - Delays <= MAX produce constant results * - Delays <= MAX produce constant results
* - Delays > MAX produce random results * - Delays > MAX produce random results
*/ */
static const uint_least16_t MAX_POWER_ON_DELAY = 0x1FFF; static const uint_least16_t MAX_POWER_ON_DELAY = 0x1FFF;
static const uint_least16_t DEFAULT_POWER_ON_DELAY = MAX_POWER_ON_DELAY + 1; static const uint_least16_t DEFAULT_POWER_ON_DELAY = MAX_POWER_ON_DELAY + 1;
static const uint_least32_t DEFAULT_SAMPLING_FREQ = 44100; static const uint_least32_t DEFAULT_SAMPLING_FREQ = 44100;
public: public:
/** /**
* Intended c64 model when unknown or forced * Intended c64 model when unknown or forced.
* - PAL * - PAL
* - NTSC * - NTSC
* - OLD_NTSC * - OLD_NTSC
* - DREAN * - DREAN
*/ */
c64_model_t defaultC64Model; c64_model_t defaultC64Model;
/** /**
* Force the model to #defaultC64Model ignoring tune's clock setting * Force the model to #defaultC64Model ignoring tune's clock setting.
*/ */
bool forceC64Model; bool forceC64Model;
/** /**
* Intended sid model when unknown or forced * Intended sid model when unknown or forced.
* - MOS6581 * - MOS6581
* - MOS8580 * - MOS8580
*/ */
sid_model_t defaultSidModel; sid_model_t defaultSidModel;
/** /**
* Force the sid model to #defaultSidModel * Force the sid model to #defaultSidModel.
*/ */
bool forceSidModel; bool forceSidModel;
/** /**
* Playbak mode * Playbak mode.
* - MONO * - MONO
* - STEREO * - STEREO
*/ */
playback_t playback; playback_t playback;
/** /**
* Sampling frequency * Sampling frequency.
*/ */
uint_least32_t frequency; uint_least32_t frequency;
/** /**
* Install a second SID chip at this address * Install a second SID chip at this address.
*/ */
uint_least16_t secondSidAddress; uint_least16_t secondSidAddress;
/** /**
* Pointer to selected emulation, * Pointer to selected emulation,
* reSIDfp, reSID or hardSID * reSIDfp, reSID or hardSID.
*/ */
sidbuilder *sidEmulation; sidbuilder *sidEmulation;
/** /**
* Left channel volume * Left channel volume.
*/ */
uint_least32_t leftVolume; uint_least32_t leftVolume;
/** /**
* Right channel volume * Right channel volume.
*/ */
uint_least32_t rightVolume; uint_least32_t rightVolume;
/** /**
* Power on delay cycles * Power on delay cycles.
*/ */
uint_least16_t powerOnDelay; uint_least16_t powerOnDelay;
/** /**
* Sampling method * Sampling method.
* - INTERPOLATE * - INTERPOLATE
* - RESAMPLE_INTERPOLATE * - RESAMPLE_INTERPOLATE
*/ */
sampling_method_t samplingMethod; sampling_method_t samplingMethod;
/** /**
* Faster low-quality emulation, * Faster low-quality emulation,
* available only for reSID * available only for reSID.
*/ */
bool fastSampling; bool fastSampling;
public: public:
SidConfig(); SidConfig();
}; };
#endif // SIDCONFIG_H #endif // SIDCONFIG_H
 End of changes. 15 change blocks. 
47 lines changed or deleted 47 lines changed or added


 SidDatabase.h   SidDatabase.h 
skipping to change at line 34 skipping to change at line 34
#define SIDDATABASE_H #define SIDDATABASE_H
#include <stdint.h> #include <stdint.h>
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
class SidTune; class SidTune;
class iniParser; class iniParser;
/** /**
* SidDatabase * SidDatabase
* An utility class to deal with the songlength DataBase. * An utility class to deal with the songlength DataBase.
*/ */
class SID_EXTERN SidDatabase class SID_EXTERN SidDatabase
{ {
private: private:
class parseError {}; class parseError {};
static const char *parseTime(const char *str, long &result); static const char *parseTime(const char *str, long &result);
private: private:
iniParser *m_parser; iniParser *m_parser;
const char *errorString; const char *errorString;
public: public:
SidDatabase(); SidDatabase();
~SidDatabase(); ~SidDatabase();
/** /**
* Open the songlength DataBase. * Open the songlength DataBase.
* *
* @param filename songlengthDB file name with full path. * @param filename songlengthDB file name with full path.
* @return false in case of errors, true otherwise. * @return false in case of errors, true otherwise.
*/ */
bool open(const char *filename); bool open(const char *filename);
/** /**
* Close the songlength DataBase. * Close the songlength DataBase.
*/ */
void close(); void close();
/** /**
* Get the length of the current subtune. * Get the length of the current subtune.
* *
* @param tune * @param tune
* @return tune length in seconds, -1 in case of errors. * @return tune length in seconds, -1 in case of errors.
*/ */
int_least32_t length(SidTune &tune); int_least32_t length(SidTune &tune);
/** /**
* Get the length of the selected subtune. * Get the length of the selected subtune.
* *
* @param md5 the md5 hash of the tune. * @param md5 the md5 hash of the tune.
* @param song the subtune. * @param song the subtune.
* @return tune length in seconds, -1 in case of errors. * @return tune length in seconds, -1 in case of errors.
*/ */
int_least32_t length(const char *md5, unsigned int song); int_least32_t length(const char *md5, unsigned int song);
/// Get descriptive error message. /**
* Get descriptive error message.
*/
const char *error() const { return errorString; } const char *error() const { return errorString; }
}; };
#endif // SIDDATABASE_H #endif // SIDDATABASE_H
 End of changes. 6 change blocks. 
22 lines changed or deleted 24 lines changed or added


 SidInfo.h   SidInfo.h 
skipping to change at line 29 skipping to change at line 29
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13 01 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13 01 USA
*/ */
#ifndef SIDINFO_H #ifndef SIDINFO_H
#define SIDINFO_H #define SIDINFO_H
#include <stdint.h> #include <stdint.h>
/** /**
* This interface is used to get sid engine informations. * This interface is used to get sid engine informations.
*/ */
class SidInfo class SidInfo
{ {
public: public:
/// Library name /// Library name
virtual const char *name() const =0; virtual const char *name() const =0;
/// Library version /// Library version
virtual const char *version() const =0; virtual const char *version() const =0;
/// Library credits /// Library credits
 End of changes. 1 change blocks. 
2 lines changed or deleted 2 lines changed or added


 SidTune.h   SidTune.h 
skipping to change at line 36 skipping to change at line 36
#include <stdint.h> #include <stdint.h>
#include <memory> #include <memory>
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
class SidTuneInfo; class SidTuneInfo;
class SidTuneBase; class SidTuneBase;
class sidmemory; class sidmemory;
/** /**
* SidTune * SidTune
*/ */
class SID_EXTERN SidTune class SID_EXTERN SidTune
{ {
public: public:
static const int MD5_LENGTH = 32; static const int MD5_LENGTH = 32;
private: private:
/// Filename extensions to append for various file types. /// Filename extensions to append for various file types.
static const char** fileNameExtensions; static const char** fileNameExtensions;
private: // ------------------------------------------------------------- private: // -------------------------------------------------------------
std::auto_ptr<SidTuneBase> tune; std::auto_ptr<SidTuneBase> tune;
const char* m_statusString; const char* m_statusString;
bool m_status; bool m_status;
public: // --------------------------------------------------------------- - public: // --------------------------------------------------------------- -
/** /**
* Load a sidtune from a file. * Load a sidtune from a file.
* *
* To retrieve data from standard input pass in filename "-". * To retrieve data from standard input pass in filename "-".
* If you want to override the default filename extensions use this * If you want to override the default filename extensions use this
* contructor. Please note, that if the specified "fileName" * contructor. Please note, that if the specified "fileName"
* does exist and the loader is able to determine its file format, * does exist and the loader is able to determine its file format,
* this function does not try to append any file name extension. * this function does not try to append any file name extension.
* See "SidTune.cpp" for the default list of file name extensions. * See "SidTune.cpp" for the default list of file name extensions.
* You can specify "fileName = 0", if you do not want to * You can specify "fileName = 0", if you do not want to
* load a sidtune. You can later load one with open(). * load a sidtune. You can later load one with open().
* *
* @param fileName * @param fileName
* @param fileNameExt * @param fileNameExt
* @param separatorIsSlash * @param separatorIsSlash
*/ */
SidTune(const char* fileName, const char **fileNameExt = 0, SidTune(const char* fileName, const char **fileNameExt = 0,
bool separatorIsSlash = false); bool separatorIsSlash = false);
/** /**
* Load a single-file sidtune from a memory buffer. * Load a single-file sidtune from a memory buffer.
* Currently supported: PSID format. * Currently supported: PSID format.
* *
* @param oneFileFormatSidtune the buffer that contains song data * @param oneFileFormatSidtune the buffer that contains song data
* @param sidtuneLength length of the buffer * @param sidtuneLength length of the buffer
*/ */
SidTune(const uint_least8_t* oneFileFormatSidtune, uint_least32_t sidtu neLength); SidTune(const uint_least8_t* oneFileFormatSidtune, uint_least32_t sidtu neLength);
virtual ~SidTune() {} virtual ~SidTune() {}
/** /**
* The SidTune class does not copy the list of file name extensions, * The SidTune class does not copy the list of file name extensions,
* so make sure you keep it. If the provided pointer is 0, the * so make sure you keep it. If the provided pointer is 0, the
* default list will be activated. This is a static list which * default list will be activated. This is a static list which
* is used by all SidTune objects. * is used by all SidTune objects.
* *
* @param fileNameExt * @param fileNameExt
*/ */
void setFileNameExtensions(const char **fileNameExt); void setFileNameExtensions(const char **fileNameExt);
/** /**
* Load a sidtune into an existing object from a file. * Load a sidtune into an existing object from a file.
* *
* @param fileName * @param fileName
* @param separatorIsSlash * @param separatorIsSlash
*/ */
void load(const char* fileName, bool separatorIsSlash = false); void load(const char* fileName, bool separatorIsSlash = false);
/** /**
* Load a sidtune into an existing object from a buffer. * Load a sidtune into an existing object from a buffer.
* *
* @param sourceBuffer the buffer that contains song data * @param sourceBuffer the buffer that contains song data
* @param bufferLen length of the buffer * @param bufferLen length of the buffer
*/ */
void read(const uint_least8_t* sourceBuffer, uint_least32_t bufferLen); void read(const uint_least8_t* sourceBuffer, uint_least32_t bufferLen);
/** /**
* Select sub-song. * Select sub-song.
* *
* @param songNum the selected song (0 = default starting song) * @param songNum the selected song (0 = default starting song)
* @return active song number, 0 if no tune is loaded. * @return active song number, 0 if no tune is loaded.
*/ */
unsigned int selectSong(unsigned int songNum); unsigned int selectSong(unsigned int songNum);
/** /**
* Retrieve current active sub-song specific information. * Retrieve current active sub-song specific information.
* *
* @return a pointer to #SidTuneInfo, 0 if no tune is loaded. The pointe * @return a pointer to #SidTuneInfo, 0 if no tune is loaded. The point
r must not be deleted. er must not be deleted.
*/ */
const SidTuneInfo* getInfo() const; const SidTuneInfo* getInfo() const;
/** /**
* Select sub-song and retrieve information. * Select sub-song and retrieve information.
* *
* @param songNum the selected song (0 = default starting song) * @param songNum the selected song (0 = default starting song)
* @return a pointer to #SidTuneInfo, 0 if no tune is loaded. The pointe * @return a pointer to #SidTuneInfo, 0 if no tune is loaded. The point
r must not be deleted. er must not be deleted.
*/ */
const SidTuneInfo* getInfo(unsigned int songNum); const SidTuneInfo* getInfo(unsigned int songNum);
/** /**
* Determine current state of object. * Determine current state of object.
* Upon error condition use #statusString to get a descriptive * Upon error condition use #statusString to get a descriptive
* text string. * text string.
* *
* @return current state (true = okay, false = error) * @return current state (true = okay, false = error)
*/ */
bool getStatus() const; bool getStatus() const;
/** /**
* Error/status message of last operation * Error/status message of last operation.
*/ */
const char* statusString() const; const char* statusString() const;
/** /**
* Copy sidtune into C64 memory (64 KB). * Copy sidtune into C64 memory (64 KB).
*/ */
bool placeSidTuneInC64mem(sidmemory* mem); bool placeSidTuneInC64mem(sidmemory* mem);
/** /**
* Calculates the MD5 hash of the tune. * Calculates the MD5 hash of the tune.
* Not providing an md5 buffer will cause the internal one to be used. * Not providing an md5 buffer will cause the internal one to be used.
* If provided, buffer must be MD5_LENGTH + 1 * If provided, buffer must be MD5_LENGTH + 1
* *
* @return a pointer to the buffer containing the md5 string, 0 if no tu * @return a pointer to the buffer containing the md5 string, 0 if no t
ne is loaded. une is loaded.
*/ */
const char *createMD5(char *md5 = 0); const char *createMD5(char *md5 = 0);
private: // prevent copying private: // prevent copying
SidTune(const SidTune&); SidTune(const SidTune&);
SidTune& operator=(SidTune&); SidTune& operator=(SidTune&);
}; };
#endif /* SIDTUNE_H */ #endif /* SIDTUNE_H */
 End of changes. 13 change blocks. 
73 lines changed or deleted 73 lines changed or added


 SidTuneInfo.h   SidTuneInfo.h 
skipping to change at line 29 skipping to change at line 29
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13 01 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13 01 USA
*/ */
#ifndef SIDTUNEINFO_H #ifndef SIDTUNEINFO_H
#define SIDTUNEINFO_H #define SIDTUNEINFO_H
#include <stdint.h> #include <stdint.h>
/** /**
* This interface is used to get values from SidTune objects. * This interface is used to get values from SidTune objects.
* *
* You must read (i.e. activate) sub-song specific information * You must read (i.e. activate) sub-song specific information
* via: * via:
* const SidTuneInfo* tuneInfo = SidTune.getInfo(); * const SidTuneInfo* tuneInfo = SidTune.getInfo();
* const SidTuneInfo* tuneInfo = SidTune.getInfo(songNumber); * const SidTuneInfo* tuneInfo = SidTune.getInfo(songNumber);
*/ */
class SidTuneInfo class SidTuneInfo
{ {
public: public:
typedef enum { typedef enum {
CLOCK_UNKNOWN, CLOCK_UNKNOWN,
CLOCK_PAL, CLOCK_PAL,
CLOCK_NTSC, CLOCK_NTSC,
CLOCK_ANY CLOCK_ANY
} clock_t; } clock_t;
skipping to change at line 68 skipping to change at line 68
} compatibility_t; } compatibility_t;
public: public:
/// Vertical-Blanking-Interrupt /// Vertical-Blanking-Interrupt
static const int SPEED_VBI = 0; static const int SPEED_VBI = 0;
/// CIA 1 Timer A /// CIA 1 Timer A
static const int SPEED_CIA_1A = 60; static const int SPEED_CIA_1A = 60;
public: public:
/// Load Address /**
* Load Address.
*/
virtual uint_least16_t loadAddr() const =0; virtual uint_least16_t loadAddr() const =0;
/// Init Address /**
* Init Address.
*/
virtual uint_least16_t initAddr() const =0; virtual uint_least16_t initAddr() const =0;
/// Play Address /**
* Play Address.
*/
virtual uint_least16_t playAddr() const =0; virtual uint_least16_t playAddr() const =0;
/** /**
* The number of songs. * The number of songs.
*/ */
virtual unsigned int songs() const =0; virtual unsigned int songs() const =0;
/** /**
* The default starting song. * The default starting song.
*/ */
virtual unsigned int startSong() const =0; virtual unsigned int startSong() const =0;
/** /**
* The tune that has been initialized. * The tune that has been initialized.
*/ */
virtual unsigned int currentSong() const =0; virtual unsigned int currentSong() const =0;
/** /**
* @name Base addresses * @name Base addresses
* The SID chip base address(es) used by the sidtune. * The SID chip base address(es) used by the sidtune.
*/ */
//@{ //@{
virtual uint_least16_t sidChipBase1() const =0; ///< 0xD400 (normal, 1st SID) virtual uint_least16_t sidChipBase1() const =0; ///< 0xD400 (normal, 1st SID)
virtual uint_least16_t sidChipBase2() const =0; ///< 0xD?00 (2nd SID ) or 0 (no 2nd SID) virtual uint_least16_t sidChipBase2() const =0; ///< 0xD?00 (2nd SID ) or 0 (no 2nd SID)
//@} //@}
/** /**
* Whether sidtune uses two SID chips. * Whether sidtune uses two SID chips.
*/ */
virtual bool isStereo() const=0; virtual bool isStereo() const=0;
/** /**
* Intended speed. * Intended speed.
*/ */
virtual int songSpeed() const =0; virtual int songSpeed() const =0;
/** /**
* First available page for relocation. * First available page for relocation.
*/ */
virtual uint_least8_t relocStartPage() const =0; virtual uint_least8_t relocStartPage() const =0;
/** /**
* Number of pages available for relocation. * Number of pages available for relocation.
*/ */
virtual uint_least8_t relocPages() const =0; virtual uint_least8_t relocPages() const =0;
/** /**
* @name SID model * @name SID model
* The SID chip model(s) requested by the sidtune. * The SID chip model(s) requested by the sidtune.
*/ */
//@{ //@{
virtual model_t sidModel1() const =0; ///< first SID virtual model_t sidModel1() const =0; ///< first SID
virtual model_t sidModel2() const =0; ///< second SID virtual model_t sidModel2() const =0; ///< second SID
//@} //@}
/** /**
* Compatibility requirements. * Compatibility requirements.
*/ */
virtual compatibility_t compatibility() const =0; virtual compatibility_t compatibility() const =0;
/** /**
* @name Tune infos * @name Tune infos
* Song title, credits, ... * Song title, credits, ...
* - 0 = Title * - 0 = Title
* - 1 = Author * - 1 = Author
* - 2 = Released * - 2 = Released
*/ */
//@{ //@{
virtual unsigned int numberOfInfoStrings() const =0; ///< the numbe r of available text info lines virtual unsigned int numberOfInfoStrings() const =0; ///< the numbe r of available text info lines
virtual const char* infoString(unsigned int i) const =0; ///< text info from the format headers etc. virtual const char* infoString(unsigned int i) const =0; ///< text info from the format headers etc.
//@} //@}
/** /**
* @name Tune comments * @name Tune comments
* MUS comments. * MUS comments.
*/ */
//@{ //@{
virtual unsigned int numberOfCommentStrings() const =0; ///< Number of comments virtual unsigned int numberOfCommentStrings() const =0; ///< Number of comments
virtual const char* commentString(unsigned int i) const =0; ///< Used to stash the MUS comment somewhere. virtual const char* commentString(unsigned int i) const =0; ///< Used to stash the MUS comment somewhere.
//@} //@}
/** /**
* Length of single-file sidtune file. * Length of single-file sidtune file.
*/ */
virtual uint_least32_t dataFileLen() const =0; virtual uint_least32_t dataFileLen() const =0;
/** /**
* Length of raw C64 data without load address. * Length of raw C64 data without load address.
*/ */
virtual uint_least32_t c64dataLen() const =0; virtual uint_least32_t c64dataLen() const =0;
/** /**
* The tune clock speed. * The tune clock speed.
*/ */
virtual clock_t clockSpeed() const =0; virtual clock_t clockSpeed() const =0;
/** /**
* The name of the identified file format. * The name of the identified file format.
*/ */
virtual const char* formatString() const =0; virtual const char* formatString() const =0;
/** /**
* Whether load address might be duplicate. * Whether load address might be duplicate.
*/ */
virtual bool fixLoad() const =0; virtual bool fixLoad() const =0;
/** /**
* Path to sidtune files. * Path to sidtune files.
*/ */
virtual const char* path() const =0; virtual const char* path() const =0;
/** /**
* A first file: e.g. "foo.sid" or "foo.mus". * A first file: e.g. "foo.sid" or "foo.mus".
*/ */
virtual const char* dataFileName() const =0; virtual const char* dataFileName() const =0;
/** /**
* A second file: e.g. "foo.str". * A second file: e.g. "foo.str".
* Returns 0 if none. * Returns 0 if none.
*/ */
virtual const char* infoFileName() const =0; virtual const char* infoFileName() const =0;
protected: protected:
~SidTuneInfo() {} ~SidTuneInfo() {}
}; };
#endif /* SIDTUNEINFO_H */ #endif /* SIDTUNEINFO_H */
 End of changes. 23 change blocks. 
55 lines changed or deleted 61 lines changed or added


 event.h   event.h 
skipping to change at line 33 skipping to change at line 33
#ifndef EVENT_H #ifndef EVENT_H
#define EVENT_H #define EVENT_H
#include <stdint.h> #include <stdint.h>
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
typedef int_fast64_t event_clock_t; typedef int_fast64_t event_clock_t;
/** /**
* C64 system runs actions at system clock high and low * C64 system runs actions at system clock high and low
* states. The PHI1 corresponds to the auxiliary chip activity * states. The PHI1 corresponds to the auxiliary chip activity
* and PHI2 to CPU activity. For any clock, PHI1s are before * and PHI2 to CPU activity. For any clock, PHI1s are before
* PHI2s. * PHI2s.
*/ */
typedef enum {EVENT_CLOCK_PHI1 = 0, EVENT_CLOCK_PHI2 = 1} event_phase_t; typedef enum {EVENT_CLOCK_PHI1 = 0, EVENT_CLOCK_PHI2 = 1} event_phase_t;
/** /**
* Event scheduler (based on alarm from Vice). Created in 2001 by Simon A. * Event scheduler (based on alarm from Vice). Created in 2001 by Simon A.
* White. * White.
* *
* Optimized EventScheduler and corresponding Event class by Antti S. Lankil * Optimized EventScheduler and corresponding Event class by Antti S. Lanki
a la
* in 2009. * in 2009.
* *
* @author Antti Lankila * @author Antti Lankila
*/ */
class SID_EXTERN Event class SID_EXTERN Event
{ {
friend class EventScheduler; friend class EventScheduler;
private: private:
/** Describe event for humans. */ /**
* Describe event for humans.
*/
const char * const m_name; const char * const m_name;
/** The clock this event fires */ /**
* The clock this event fires.
*/
event_clock_t triggerTime; event_clock_t triggerTime;
/** The next event in sequence */ /**
* The next event in sequence.
*/
Event *next; Event *next;
public: public:
/** /**
* Events are used for delayed execution. Name is * Events are used for delayed execution. Name is
* not used by code, but is useful for debugging. * not used by code, but is useful for debugging.
* *
* @param name Descriptive string of the event. * @param name Descriptive string of the event.
*/ */
Event(const char * const name) : Event(const char * const name) :
m_name(name) {} m_name(name) {}
/** /**
* Event code to be executed. Events are allowed to safely * Event code to be executed. Events are allowed to safely
* reschedule themselves with the EventScheduler during * reschedule themselves with the EventScheduler during
* invocations. * invocations.
*/ */
virtual void event() = 0; virtual void event() = 0;
protected: protected:
~Event() {} ~Event() {}
}; };
/** /**
* Fast EventScheduler, which maintains a linked list of Events. * Fast EventScheduler, which maintains a linked list of Events.
* This scheduler takes neglible time even when it is used to * This scheduler takes neglible time even when it is used to
* schedule events for nearly every clock. * schedule events for nearly every clock.
* *
* Events occur on an internal clock which is 2x the visible clock. * Events occur on an internal clock which is 2x the visible clock.
* The visible clock is divided to two phases called phi1 and phi2. * The visible clock is divided to two phases called phi1 and phi2.
* *
* The phi1 clocks are used by VIC and CIA chips, phi2 clocks by CPU. * The phi1 clocks are used by VIC and CIA chips, phi2 clocks by CPU.
* *
* Scheduling an event for a phi1 clock when system is in phi2 causes the * Scheduling an event for a phi1 clock when system is in phi2 causes the
* event to be moved to the next phi1 cycle. Correspondingly, requesting * event to be moved to the next phi1 cycle. Correspondingly, requesting
* a phi1 time when system is in phi2 returns the value of the next phi1. * a phi1 time when system is in phi2 returns the value of the next phi1.
* *
* @author Antti S. Lankila * @author Antti S. Lankila
*/ */
class EventContext class EventContext
{ {
public: public:
/** /**
* Cancel the specified event. * Cancel the specified event.
* *
* @param event the event to cancel * @param event the event to cancel
*/ */
virtual void cancel(Event &event) = 0; virtual void cancel(Event &event) = 0;
/** /**
* Add event to pending queue. * Add event to pending queue.
* *
* At PHI2, specify cycles=0 and Phase=PHI1 to fire on the very next PHI * At PHI2, specify cycles=0 and Phase=PHI1 to fire on the very next PH
1. I1.
* *
* @param event the event to add * @param event the event to add
* @param cycles how many cycles from now to fire * @param cycles how many cycles from now to fire
* @param phase the phase when to fire the event * @param phase the phase when to fire the event
*/ */
virtual void schedule(Event &event, event_clock_t cycles, virtual void schedule(Event &event, event_clock_t cycles,
event_phase_t phase) = 0; event_phase_t phase) = 0;
/** /**
* Add event to pending queue in the same phase as current event. * Add event to pending queue in the same phase as current event.
* *
* @param event the event to add * @param event the event to add
* @param cycles how many cycles from now to fire * @param cycles how many cycles from now to fire
*/ */
virtual void schedule(Event &event, event_clock_t cycles) = 0; virtual void schedule(Event &event, event_clock_t cycles) = 0;
/** /**
* Is the event pending in this scheduler? * Is the event pending in this scheduler?
* *
* @param event the event * @param event the event
* @return true when pending * @return true when pending
*/ */
virtual bool isPending(Event &event) const = 0; virtual bool isPending(Event &event) const = 0;
/** /**
* Get time with respect to a specific clock phase. * Get time with respect to a specific clock phase.
* *
* @param phase the phase * @param phase the phase
* @return the time according to specified phase. * @return the time according to specified phase.
*/ */
virtual event_clock_t getTime(event_phase_t phase) const = 0; virtual event_clock_t getTime(event_phase_t phase) const = 0;
/** /**
* Get clocks since specified clock in given phase. * Get clocks since specified clock in given phase.
* *
* @param clock the time to compare to * @param clock the time to compare to
* @param phase the phase to comapre to * @param phase the phase to comapre to
* @return the time between specified clock and now * @return the time between specified clock and now
*/ */
virtual event_clock_t getTime(event_clock_t clock, event_phase_t phase) const = 0; virtual event_clock_t getTime(event_clock_t clock, event_phase_t phase) const = 0;
/** /**
* Return current clock phase. * Return current clock phase.
* *
* @return The current phase * @return The current phase
*/ */
virtual event_phase_t phase() const = 0; virtual event_phase_t phase() const = 0;
protected: protected:
~EventContext() {} ~EventContext() {}
}; };
#endif // EVENT_H #endif // EVENT_H
 End of changes. 15 change blocks. 
79 lines changed or deleted 85 lines changed or added


 hardsid.h   hardsid.h 
skipping to change at line 30 skipping to change at line 30
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA.
*/ */
#ifndef HARDSID_H #ifndef HARDSID_H
#define HARDSID_H #define HARDSID_H
#include "sidplayfp/sidbuilder.h" #include "sidplayfp/sidbuilder.h"
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
/** /**
* HardSID Builder Class * HardSID Builder Class
*/ */
class SID_EXTERN HardSIDBuilder : public sidbuilder class SID_EXTERN HardSIDBuilder : public sidbuilder
{ {
private: private:
static bool m_initialised; static bool m_initialised;
#ifndef _WIN32 #ifndef _WIN32
static unsigned int m_count; static unsigned int m_count;
#endif #endif
int init (); int init ();
public: public:
HardSIDBuilder(const char * const name); HardSIDBuilder(const char * const name);
~HardSIDBuilder(); ~HardSIDBuilder();
/** /**
* Available sids. * Available sids.
* *
* @return the number of available sids, 0 = endless. * @return the number of available sids, 0 = endless.
*/ */
unsigned int availDevices() const; unsigned int availDevices() const;
const char *credits() const; const char *credits() const;
void flush(); void flush();
/// enable/disable filter. /**
* enable/disable filter.
*/
void filter(bool enable); void filter(bool enable);
/** /**
* Create the sid emu. * Create the sid emu.
* *
* @param sids the number of required sid emu * @param sids the number of required sid emu
*/ */
unsigned int create(unsigned int sids); unsigned int create(unsigned int sids);
}; };
#endif // HARDSID_H #endif // HARDSID_H
 End of changes. 4 change blocks. 
11 lines changed or deleted 13 lines changed or added


 resid.h   resid.h 
skipping to change at line 30 skipping to change at line 30
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA.
*/ */
#ifndef RESID_H #ifndef RESID_H
#define RESID_H #define RESID_H
#include "sidplayfp/sidbuilder.h" #include "sidplayfp/sidbuilder.h"
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
/** /**
* ReSID Builder Class * ReSID Builder Class
*/ */
class SID_EXTERN ReSIDBuilder : public sidbuilder class SID_EXTERN ReSIDBuilder : public sidbuilder
{ {
public: public:
ReSIDBuilder(const char * const name) : ReSIDBuilder(const char * const name) :
sidbuilder(name) {} sidbuilder(name) {}
~ReSIDBuilder(); ~ReSIDBuilder();
/** /**
* Available sids. * Available sids.
* *
* @return the number of available sids, 0 = endless. * @return the number of available sids, 0 = endless.
*/ */
unsigned int availDevices() const { return 0; } unsigned int availDevices() const { return 0; }
unsigned int create(unsigned int sids); unsigned int create(unsigned int sids);
const char *credits() const; const char *credits() const;
/// @name global settings /// @name global settings
/// Settings that affect all SIDs /// Settings that affect all SIDs
//@{ //@{
/// enable/disable filter /**
* enable/disable filter.
*/
void filter(bool enable); void filter(bool enable);
/** /**
* The bias is given in millivolts, and a maximum reasonable * The bias is given in millivolts, and a maximum reasonable
* control range is approximately -500 to 500. * control range is approximately -500 to 500.
*/ */
void bias(double dac_bias); void bias(double dac_bias);
//@} //@}
}; };
#endif // RESID_H #endif // RESID_H
 End of changes. 4 change blocks. 
10 lines changed or deleted 12 lines changed or added


 residfp.h   residfp.h 
skipping to change at line 30 skipping to change at line 30
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1, USA.
*/ */
#ifndef RESIDFP_H #ifndef RESIDFP_H
#define RESIDFP_H #define RESIDFP_H
#include "sidplayfp/sidbuilder.h" #include "sidplayfp/sidbuilder.h"
#include "sidplayfp/siddefs.h" #include "sidplayfp/siddefs.h"
/** /**
* ReSIDfp Builder Class * ReSIDfp Builder Class
*/ */
class SID_EXTERN ReSIDfpBuilder: public sidbuilder class SID_EXTERN ReSIDfpBuilder: public sidbuilder
{ {
public: public:
ReSIDfpBuilder(const char * const name) : ReSIDfpBuilder(const char * const name) :
sidbuilder(name) {} sidbuilder(name) {}
~ReSIDfpBuilder(); ~ReSIDfpBuilder();
/** /**
* Available sids. * Available sids.
* *
* @return the number of available sids, 0 = endless. * @return the number of available sids, 0 = endless.
*/ */
unsigned int availDevices() const { return 0; } unsigned int availDevices() const { return 0; }
/** /**
* Create the sid emu. * Create the sid emu.
* *
* @param sids the number of required sid emu * @param sids the number of required sid emu
*/ */
unsigned int create(unsigned int sids); unsigned int create(unsigned int sids);
const char *credits() const; const char *credits() const;
/// @name global settings /// @name global settings
/// Settings that affect all SIDs. /// Settings that affect all SIDs.
//@{ //@{
/// enable/disable filter. /**
* enable/disable filter.
*/
void filter(bool enable); void filter(bool enable);
/** /**
* Set 6581 filter curve. * Set 6581 filter curve.
* *
* @param filterCurve from 0.0 (light) to 1.0 (dark) (default 0.5) * @param filterCurve from 0.0 (light) to 1.0 (dark) (default 0.5)
*/ */
void filter6581Curve(double filterCurve); void filter6581Curve(double filterCurve);
/** /**
* Set 8580 filter curve. * Set 8580 filter curve.
* *
* @param filterCurve curve center frequency (default 12500) * @param filterCurve curve center frequency (default 12500)
*/ */
void filter8580Curve(double filterCurve); void filter8580Curve(double filterCurve);
//@} //@}
}; };
#endif // RESIDFP_H #endif // RESIDFP_H
 End of changes. 6 change blocks. 
19 lines changed or deleted 21 lines changed or added


 sidbuilder.h   sidbuilder.h 
skipping to change at line 35 skipping to change at line 35
#include <set> #include <set>
#include <string> #include <string>
#include "sidplayfp/SidConfig.h" #include "sidplayfp/SidConfig.h"
class sidemu; class sidemu;
class EventContext; class EventContext;
/** /**
* Base class for sid builders. * Base class for sid builders.
*/ */
class sidbuilder class sidbuilder
{ {
protected: protected:
typedef std::set<sidemu*> emuset_t; typedef std::set<sidemu*> emuset_t;
private: private:
const char * const m_name; const char * const m_name;
protected: protected:
std::string m_errorBuffer; std::string m_errorBuffer;
emuset_t sidobjs; emuset_t sidobjs;
bool m_status; bool m_status;
protected: protected:
/** /**
* Utility class for setting emu parameters in builders. * Utility class for setting emu parameters in builders.
*/ */
template<class Temu, typename Tparam> template<class Temu, typename Tparam>
class applyParameter class applyParameter
{ {
protected: protected:
Tparam m_param; Tparam m_param;
void (Temu::*m_method)(Tparam); void (Temu::*m_method)(Tparam);
public: public:
applyParameter(void (Temu::*method)(Tparam), Tparam param) : applyParameter(void (Temu::*method)(Tparam), Tparam param) :
m_param(param), m_param(param),
skipping to change at line 78 skipping to change at line 78
}; };
public: public:
sidbuilder(const char * const name) : sidbuilder(const char * const name) :
m_name(name), m_name(name),
m_errorBuffer("N/A"), m_errorBuffer("N/A"),
m_status (true) {} m_status (true) {}
virtual ~sidbuilder() {} virtual ~sidbuilder() {}
/** /**
* The number of used devices. * The number of used devices.
* *
* @return number of used sids, 0 if none. * @return number of used sids, 0 if none.
*/ */
unsigned int usedDevices() const { return sidobjs.size (); } unsigned int usedDevices() const { return sidobjs.size (); }
/** /**
* Available devices. * Available devices.
* *
* @return the number of available sids, 0 = endless. * @return the number of available sids, 0 = endless.
*/ */
virtual unsigned int availDevices() const = 0; virtual unsigned int availDevices() const = 0;
/** /**
* Create the sid emu. * Create the sid emu.
* *
* @param sids the number of required sid emu * @param sids the number of required sid emu
*/ */
virtual unsigned int create(unsigned int sids) = 0; virtual unsigned int create(unsigned int sids) = 0;
/** /**
* Find a free SID of the required specs * Find a free SID of the required specs
* *
* @param env the event context * @param env the event context
* @param model the required sid model * @param model the required sid model
* @return pointer to the locked sid emu * @return pointer to the locked sid emu
*/ */
sidemu *lock(EventContext *env, SidConfig::sid_model_t model); sidemu *lock(EventContext *env, SidConfig::sid_model_t model);
/** /**
* Release this SID. * Release this SID.
* *
* @param device the sid emu to unlock * @param device the sid emu to unlock
*/ */
void unlock(sidemu *device); void unlock(sidemu *device);
/** /** Remove all SID emulations. */
* Remove all SID emulations.
*/
void remove(); void remove();
/** /**
* Get the builder's name. * Get the builder's name.
* *
* @return the name * @return the name
*/ */
const char *name() const { return m_name; } const char *name() const { return m_name; }
/** /**
* Error message. * Error message.
* *
* @return string error message. * @return string error message.
*/ */
const char *error() const { return m_errorBuffer.c_str(); } const char *error() const { return m_errorBuffer.c_str(); }
/** /**
* Determine current state of object. * Determine current state of object.
* *
* @return true = okay, false = error * @return true = okay, false = error
*/ */
bool getStatus() const { return m_status; } bool getStatus() const { return m_status; }
/** /**
* Get the builder's credits. * Get the builder's credits.
* *
* @return credits * @return credits
*/ */
virtual const char *credits() const = 0; virtual const char *credits() const = 0;
/** /**
* Toggle sid filter emulation. * Toggle sid filter emulation.
* *
* @param enable true = enable, false = disable * @param enable true = enable, false = disable
*/ */
virtual void filter(bool enable) = 0; virtual void filter(bool enable) = 0;
}; };
#endif // SIDBUILDER_H #endif // SIDBUILDER_H
 End of changes. 13 change blocks. 
49 lines changed or deleted 47 lines changed or added


 sidplayfp.h   sidplayfp.h 
skipping to change at line 44 skipping to change at line 44
class SidInfo; class SidInfo;
class EventContext; class EventContext;
// Private Sidplayer // Private Sidplayer
namespace SIDPLAYFP_NAMESPACE namespace SIDPLAYFP_NAMESPACE
{ {
class Player; class Player;
} }
/** /**
* sidplayfp * sidplayfp
*/ */
class SID_EXTERN sidplayfp class SID_EXTERN sidplayfp
{ {
private: private:
SIDPLAYFP_NAMESPACE::Player &sidplayer; SIDPLAYFP_NAMESPACE::Player &sidplayer;
public: public:
sidplayfp(); sidplayfp();
~sidplayfp(); ~sidplayfp();
/** /**
* Get the current engine configuration. * Get the current engine configuration.
* *
* @return a const reference to the current configuration. * @return a const reference to the current configuration.
*/ */
const SidConfig &config() const; const SidConfig &config() const;
/** /**
* Get the current player informations. * Get the current player informations.
* *
* @return a const reference to the current info. * @return a const reference to the current info.
*/ */
const SidInfo &info() const; const SidInfo &info() const;
/** /**
* Configure the engine. * Configure the engine.
* Check #error for detailed message if something goes wrong. * Check #error for detailed message if something goes wrong.
* *
* @param cfg the new configuration * @param cfg the new configuration
* @return true on success, false otherwise. * @return true on success, false otherwise.
*/ */
bool config(const SidConfig &cfg); bool config(const SidConfig &cfg);
/** /**
* Error message. * Error message.
* *
* @return string error message. * @return string error message.
*/ */
const char *error() const; const char *error() const;
/** /**
* Set the fast-forward factor. * Set the fast-forward factor.
* *
* @param percent * @param percent
*/ */
bool fastForward(unsigned int percent); bool fastForward(unsigned int percent);
/** /**
* Load a tune. * Load a tune.
* Check #error for detailed message if something goes wrong. * Check #error for detailed message if something goes wrong.
* *
* @param tune the SidTune to load, 0 unloads current tune. * @param tune the SidTune to load, 0 unloads current tune.
* @return true on sucess, false otherwise. * @return true on sucess, false otherwise.
*/ */
bool load(SidTune *tune); bool load(SidTune *tune);
/** /**
* Produce samples to play. * Produce samples to play.
* *
* @param buffer pointer to the buffer to fill with samples. * @param buffer pointer to the buffer to fill with samples.
* @param count the size of the buffer measured in 16 bit samples. * @param count the size of the buffer measured in 16 bit samples.
* @return the number of produced samples. * @return the number of produced samples.
*/ */
uint_least32_t play(short *buffer, uint_least32_t count); uint_least32_t play(short *buffer, uint_least32_t count);
/** /**
* Check if the engine is playing or stopped. * Check if the engine is playing or stopped.
* *
* @return true if playing, false otherwise. * @return true if playing, false otherwise.
*/ */
bool isPlaying() const; bool isPlaying() const;
/** /** Stop the engine. */
* Stop the engine.
*/
void stop(); void stop();
/** /**
* Control debugging. * Control debugging.
* Only has effect if library have been compiled * Only has effect if library have been compiled
* with the --enable-debug option. * with the --enable-debug option.
* *
* @param enable enable/disable debugging. * @param enable enable/disable debugging.
* @param out the file where to redirect the debug info. * @param out the file where to redirect the debug info.
*/ */
void debug(bool enable, FILE *out); void debug(bool enable, FILE *out);
/** /**
* Mute/unmute a SID channel. * Mute/unmute a SID channel.
* *
* @param sidNum the SID chip, 0 for the first one, 1 for the second. * @param sidNum the SID chip, 0 for the first one, 1 for the second.
* @param voice the channel to mute/unmute. * @param voice the channel to mute/unmute.
* @param enable true unmutes the channel, false mutes it. * @param enable true unmutes the channel, false mutes it.
*/ */
void mute(unsigned int sidNum, unsigned int voice, bool enable); void mute(unsigned int sidNum, unsigned int voice, bool enable);
/** /**
* Get the current playing time with respect to resolution returned by t * Get the current playing time with respect to resolution returned by
imebase. timebase.
* *
* @return the current playing time. * @return the current playing time.
*/ */
uint_least32_t time() const; uint_least32_t time() const;
/** /**
* Set ROMs. * Set ROMs.
* The ROMs are validate against known ones. * The ROMs are validate against known ones.
* *
* @param kernal pointer to Kernal ROM. * @param kernal pointer to Kernal ROM.
* @param basic pointer to Basic ROM, generally needed only for BASIC tu * @param basic pointer to Basic ROM, generally needed only for BASIC t
nes. unes.
* @param character pointer to character generator ROM. * @param character pointer to character generator ROM.
*/ */
void setRoms(const uint8_t* kernal, const uint8_t* basic=0, const uint8 _t* character=0); void setRoms(const uint8_t* kernal, const uint8_t* basic=0, const uint8 _t* character=0);
/** /**
* Get the event scheduler. * Get the event scheduler.
* *
* @return pointer to the scheduler. * @return pointer to the scheduler.
*/ */
EventContext *getEventContext(); EventContext *getEventContext();
/** /**
* Get the CIA 1 Timer A programmed value. * Get the CIA 1 Timer A programmed value.
*/ */
uint_least16_t getCia1TimerA() const; uint_least16_t getCia1TimerA() const;
}; };
#endif // SIDPLAYFP_H #endif // SIDPLAYFP_H
 End of changes. 16 change blocks. 
75 lines changed or deleted 73 lines changed or added


 sidversion.h   sidversion.h 
#ifndef LIBSIDPLAYFP_VERSION_H #ifndef LIBSIDPLAYFP_VERSION_H
#define LIBSIDPLAYFP_VERSION_H #define LIBSIDPLAYFP_VERSION_H
#ifndef SIDPLAYFP_H #ifndef SIDPLAYFP_H
# error Do not include directly. # error Do not include directly.
#endif #endif
#define LIBSIDPLAYFP_VERSION_MAJ 1 #define LIBSIDPLAYFP_VERSION_MAJ 1
#define LIBSIDPLAYFP_VERSION_MIN 4 #define LIBSIDPLAYFP_VERSION_MIN 5
#define LIBSIDPLAYFP_VERSION_LEV 2 #define LIBSIDPLAYFP_VERSION_LEV 0
#endif #endif
 End of changes. 1 change blocks. 
2 lines changed or deleted 2 lines changed or added


 stil.h   stil.h 
skipping to change at line 33 skipping to change at line 33
#define STIL_H #define STIL_H
#include <string> #include <string>
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <iosfwd> #include <iosfwd>
#include "stildefs.h" #include "stildefs.h"
/** /**
* STIL class * STIL class
* *
* @author LaLa <LaLa@C64.org> * @author LaLa <LaLa@C64.org>
* @copyright 1998, 2002 by LaLa * @copyright 1998, 2002 by LaLa
* *
* *
* Given the location of HVSC this class can extract STIL information for a * Given the location of HVSC this class can extract STIL information for a
* given tune of a given SID file. (Sounds simple, huh?) * given tune of a given SID file. (Sounds simple, huh?)
* *
* PLEASE, READ THE ACCOMPANYING README.TXT FILE BEFORE PROCEEDING!!!! * PLEASE, READ THE ACCOMPANYING README.TXT FILE BEFORE PROCEEDING!!!!
*/ */
class STIL_EXTERN STIL class STIL_EXTERN STIL
{ {
public: public:
/// Enum to use for asking for specific fields. /// Enum to use for asking for specific fields.
enum STILField enum STILField
{ {
all, all,
name, name,
author, author,
skipping to change at line 82 skipping to change at line 82
NO_STIL_DIRS, ///< Failed to get sections (subdirs) when pars ing STIL.txt. NO_STIL_DIRS, ///< Failed to get sections (subdirs) when pars ing STIL.txt.
NO_BUG_DIRS ///< Failed to get sections (subdirs) when pars ing BUGlist.txt. NO_BUG_DIRS ///< Failed to get sections (subdirs) when pars ing BUGlist.txt.
}; };
/// To turn debug output on /// To turn debug output on
bool STIL_DEBUG; bool STIL_DEBUG;
//----// //----//
/** /**
* Allocates necessary memory. * Allocates necessary memory.
* *
* @param stilPath relative path to STIL file * @param stilPath relative path to STIL file
* @param bugsPath relative path to BUG file * @param bugsPath relative path to BUG file
*/ */
STIL(const char *stilPath = DEFAULT_PATH_TO_STIL, const char *bugsPath = DEFAULT_PATH_TO_BUGLIST); STIL(const char *stilPath = DEFAULT_PATH_TO_STIL, const char *bugsPath = DEFAULT_PATH_TO_BUGLIST);
/** /**
* Returns a formatted string telling what the version * Returns a formatted string telling what the version
* number is for the STIL class and other info. * number is for the STIL class and other info.
* If it is called after setBaseDir(), the string also * If it is called after setBaseDir(), the string also
* has the STIL.txt file's version number in it. * has the STIL.txt file's version number in it.
* *
* @return * @return
* printable formatted string with version and copyright * printable formatted string with version and copyright
* info * info
* (It's kinda dangerous to return a pointer that points * (It's kinda dangerous to return a pointer that points
* to an internal structure, but I trust you. :) * to an internal structure, but I trust you. :)
*/ */
const char *getVersion(); const char *getVersion();
/** /**
* Returns a floating number telling what the version * Returns a floating number telling what the version
* number is of this STIL class. * number is of this STIL class.
* *
* @return * @return
* version number * version number
*/ */
float getVersionNo(); float getVersionNo();
/** /**
* Tell the object where the HVSC base directory is - it * Tell the object where the HVSC base directory is - it
* figures that the STIL should be in /DOCUMENTS/STIL.txt * figures that the STIL should be in /DOCUMENTS/STIL.txt
* and that the BUGlist should be in /DOCUMENTS/BUGlist.txt. * and that the BUGlist should be in /DOCUMENTS/BUGlist.txt.
* It should not matter whether the path is given in UNIX, * It should not matter whether the path is given in UNIX,
* WinDOS, or Mac format (ie. '\' vs. '/' vs. ':') * WinDOS, or Mac format (ie. '\' vs. '/' vs. ':')
* *
* @param pathToHVSC = HVSC base directory in your machine's format * @param pathToHVSC = HVSC base directory in your machine's format
* @return * @return
* - false - Problem opening or parsing STIL/BUGlist * - false - Problem opening or parsing STIL/BUGlist
* - true - All okay * - true - All okay
*/ */
bool setBaseDir(const char *pathToHVSC); bool setBaseDir(const char *pathToHVSC);
/** /**
* Returns a floating number telling what the version * Returns a floating number telling what the version
* number is of the STIL.txt file. * number is of the STIL.txt file.
* To be called only after setBaseDir()! * To be called only after setBaseDir()!
* *
* @return * @return
* version number (0.0 if setBaseDir() was not called, yet) * version number (0.0 if setBaseDir() was not called, yet)
*/ */
float getSTILVersionNo(); float getSTILVersionNo();
/** /**
* Given an HVSC pathname, a tune number and a * Given an HVSC pathname, a tune number and a
* field designation, it returns a formatted string that * field designation, it returns a formatted string that
* contains the STIL field for the tune number (if exists). * contains the STIL field for the tune number (if exists).
* If it doesn't exist, returns a NULL. * If it doesn't exist, returns a NULL.
* *
* @param relPathToEntry = relative to the HVSC base dir, starting with * @param relPathToEntry = relative to the HVSC base dir, starting with
* a slash * a slash
* @param tuneNo = song number within the song (default=0). * @param tuneNo = song number within the song (default=0).
* @param field = which field to retrieve (default=all). * @param field = which field to retrieve (default=all).
* *
* What the possible combinations of tuneNo and field represent: * What the possible combinations of tuneNo and field represent:
* *
* - tuneNo = 0, field = all : all of the STIL entry is returned. * - tuneNo = 0, field = all : all of the STIL entry is returned.
* - tuneNo = 0, field = comment : the file-global comment is returned. * - tuneNo = 0, field = comment : the file-global comment is returned.
* (For single-tune entries, this returns nothing!) * (For single-tune entries, this returns nothing!)
* - tuneNo = 0, field = <other> : INVALID! (NULL is returned) * - tuneNo = 0, field = <other> : INVALID! (NULL is returned)
* - tuneNo != 0, field = all : all fields of the STIL entry for the * - tuneNo != 0, field = all : all fields of the STIL entry for the
* given tune number are returned. (For single-tune entries, this is * given tune number are returned. (For single-tune entries, this is
* equivalent to saying tuneNo = 0, field = all.) * equivalent to saying tuneNo = 0, field = all.)
* However, the file-global comment is *NOT* returned with it any * However, the file-global comment is *NOT* returned with it any
* more! (Unlike in versions before v2.00.) It led to confusions: * more! (Unlike in versions before v2.00.) It led to confusions:
* eg. when a comment was asked for tune #3, it returned the * eg. when a comment was asked for tune #3, it returned the
* file-global comment even if there was no specific entry for tune #3 * file-global comment even if there was no specific entry for tune #
! 3!
* - tuneNo != 0, field = <other> : the specific field of the specific * - tuneNo != 0, field = <other> : the specific field of the specific
* tune number is returned. If the tune number doesn't exist (eg. if * tune number is returned. If the tune number doesn't exist (eg. if
* tuneNo=2 for single-tune entries, or if tuneNo=2 when there's no * tuneNo=2 for single-tune entries, or if tuneNo=2 when there's no
* STIL entry for tune #2 in a multitune entry), returns NULL. * STIL entry for tune #2 in a multitune entry), returns NULL.
* *
* NOTE: For older versions of STIL (older than v2.59) the tuneNo and * NOTE: For older versions of STIL (older than v2.59) the tuneNo and
* field parameters are ignored and are assumed to be tuneNo=0 and * field parameters are ignored and are assumed to be tuneNo=0 and
* field=all to maintain backwards compatibility. * field=all to maintain backwards compatibility.
* *
* @return * @return
* - pointer to a printable formatted string containing * - pointer to a printable formatted string containing
* the STIL entry * the STIL entry
* (It's kinda dangerous to return a pointer that points * (It's kinda dangerous to return a pointer that points
* to an internal structure, but I trust you. :) * to an internal structure, but I trust you. :)
* - NULL if there's absolutely no STIL entry for the tune * - NULL if there's absolutely no STIL entry for the tune
*/ */
const char *getEntry(const char *relPathToEntry, int tuneNo = 0, STILFi eld field = all); const char *getEntry(const char *relPathToEntry, int tuneNo = 0, STILFi eld field = all);
/** /**
* Same as #getEntry, but with an absolute path given * Same as #getEntry, but with an absolute path given
* given in your machine's format. * given in your machine's format.
*/ */
const char *getAbsEntry(const char *absPathToEntry, int tuneNo = 0, STI LField field = all); const char *getAbsEntry(const char *absPathToEntry, int tuneNo = 0, STI LField field = all);
/** /**
* Given an HVSC pathname and tune number it returns a * Given an HVSC pathname and tune number it returns a
* formatted string that contains the section-global * formatted string that contains the section-global
* comment for the tune number (if it exists). If it * comment for the tune number (if it exists). If it
* doesn't exist, returns a NULL. * doesn't exist, returns a NULL.
* *
* @param relPathToEntry = relative to the HVSC base dir starting with * @param relPathToEntry = relative to the HVSC base dir starting with
* a slash * a slash
* @return * @return
* - pointer to a printable formatted string containing * - pointer to a printable formatted string containing
* the section-global comment * the section-global comment
* (It's kinda dangerous to return a pointer that points * (It's kinda dangerous to return a pointer that points
* to an internal structure, but I trust you. :) * to an internal structure, but I trust you. :)
* - NULL if there's absolutely no section-global comment * - NULL if there's absolutely no section-global comment
* for the tune * for the tune
*/ */
const char *getGlobalComment(const char *relPathToEntry); const char *getGlobalComment(const char *relPathToEntry);
/** /**
* Same as #getGlobalComment, but with an absolute path * Same as #getGlobalComment, but with an absolute path
* given in your machine's format. * given in your machine's format.
*/ */
const char *getAbsGlobalComment(const char *absPathToEntry); const char *getAbsGlobalComment(const char *absPathToEntry);
/** /**
* Given an HVSC pathname and tune number it returns a * Given an HVSC pathname and tune number it returns a
* formatted string that contains the BUG entry for the * formatted string that contains the BUG entry for the
* tune number (if exists). If it doesn't exist, returns * tune number (if exists). If it doesn't exist, returns
* a NULL. * a NULL.
* *
* @param relPathToEntry = relative to the HVSC base dir starting with * @param relPathToEntry = relative to the HVSC base dir starting with
* a slash * a slash
* @param tuneNo = song number within the song (default=0) * @param tuneNo = song number within the song (default=0)
* If tuneNo=0, returns all of the BUG entry. * If tuneNo=0, returns all of the BUG entry.
* *
* NOTE: For older versions of STIL (older than v2.59) tuneNo is * NOTE: For older versions of STIL (older than v2.59) tuneNo is
* ignored and is assumed to be 0 to maintain backwards * ignored and is assumed to be 0 to maintain backwards
* compatibility. * compatibility.
* *
* @return * @return
* - pointer to a printable formatted string containing * - pointer to a printable formatted string containing
* the BUG entry * the BUG entry
* (It's kinda dangerous to return a pointer that points * (It's kinda dangerous to return a pointer that points
* to an internal structure, but I trust you. :) * to an internal structure, but I trust you. :)
* - NULL if there's absolutely no BUG entry for the tune * - NULL if there's absolutely no BUG entry for the tune
*/ */
const char *getBug(const char *relPathToEntry, int tuneNo = 0); const char *getBug(const char *relPathToEntry, int tuneNo = 0);
/** /**
* Same as #getBug, but with an absolute path * Same as #getBug, but with an absolute path
* given in your machine's format. * given in your machine's format.
*/ */
const char *getAbsBug(const char *absPathToEntry, int tuneNo = 0); const char *getAbsBug(const char *absPathToEntry, int tuneNo = 0);
/** /**
* Returns a specific error number identifying the problem * Returns a specific error number identifying the problem
* that happened at the last invoked public method. * that happened at the last invoked public method.
* *
* @return * @return
* STILerror - an enumerated error value * STILerror - an enumerated error value
*/ */
inline STILerror getError() const {return (lastError);} inline STILerror getError() const {return (lastError);}
/** /**
* Returns true if the last error encountered was critical * Returns true if the last error encountered was critical
* (ie. not one that the STIL class can recover from). * (ie. not one that the STIL class can recover from).
* *
* @return * @return
* true if the last error encountered was critical * true if the last error encountered was critical
*/ */
inline bool hasCriticalError() const inline bool hasCriticalError() const
{ {
return ((lastError >= CRITICAL_STIL_ERROR) ? true : false); return ((lastError >= CRITICAL_STIL_ERROR) ? true : false);
} }
/** /**
* Returns an ASCII error string containing the * Returns an ASCII error string containing the
* description of the error that happened at the last * description of the error that happened at the last
* invoked public method. * invoked public method.
* *
* @return * @return
* pointer to string with the error description * pointer to string with the error description
*/ */
inline const char *getErrorStr() const {return (STIL_ERROR_STR[lastErro r]);} inline const char *getErrorStr() const {return (STIL_ERROR_STR[lastErro r]);}
private: private:
typedef std::map<std::string, std::streampos> dirList; typedef std::map<std::string, std::streampos> dirList;
/// Path to STIL. /// Path to STIL.
const char *PATH_TO_STIL; const char *PATH_TO_STIL;
/// Path to BUGlist. /// Path to BUGlist.
const char *PATH_TO_BUGLIST; const char *PATH_TO_BUGLIST;
/// Version number/copyright string /// Version number/copyright string
std::string versionString; std::string versionString;
/// STIL.txt's version number /// STIL.txt's version number
float STILVersion; float STILVersion;
/// Base dir /// Base dir
std::string baseDir; std::string baseDir;
/** /// Maps of sections (subdirs) for easier positioning.
* Maps of sections (subdirs) for easier positioning.
*/
//@{ //@{
dirList stilDirs; dirList stilDirs;
dirList bugDirs; dirList bugDirs;
//@} //@}
/** /**
* This tells us what the line delimiter is in STIL.txt. * This tells us what the line delimiter is in STIL.txt.
* (It may be two chars!) * (It may be two chars!)
*/ */
char STIL_EOL; char STIL_EOL;
char STIL_EOL2; char STIL_EOL2;
/// Error number of the last error that happened. /// Error number of the last error that happened.
STILerror lastError; STILerror lastError;
/// Error strings containing the description of the possible errors in STIL. /// Error strings containing the description of the possible errors in STIL.
static const char *STIL_ERROR_STR[]; static const char *STIL_ERROR_STR[];
//////////////// ////////////////
skipping to change at line 328 skipping to change at line 326
/// Buffers to hold the resulting strings /// Buffers to hold the resulting strings
std::string resultEntry; std::string resultEntry;
std::string resultBug; std::string resultBug;
//////////////// ////////////////
void setVersionString(); void setVersionString();
/** /**
* Determines what the EOL char is (or are) from STIL.txt. * Determines what the EOL char is (or are) from STIL.txt.
* It is assumed that BUGlist.txt will use the same EOL. * It is assumed that BUGlist.txt will use the same EOL.
* *
* @return * @return
* - false - something went wrong * - false - something went wrong
* - true - everything is okay * - true - everything is okay
*/ */
bool determineEOL(std::ifstream &stilFile); bool determineEOL(std::ifstream &stilFile);
/** /**
* Populates the given dirList array with the directories * Populates the given dirList array with the directories
* obtained from 'inFile' for faster positioning within * obtained from 'inFile' for faster positioning within
* 'inFile'. * 'inFile'.
* *
* @param inFile - where to read the directories from * @param inFile - where to read the directories from
* @param dirs - the dirList array that should be populated with the * @param dirs - the dirList array that should be populated with the
* directory list * directory list
* @param isSTILFile - is this the STIL or the BUGlist we are parsing * @param isSTILFile - is this the STIL or the BUGlist we are parsing
* @return * @return
* - false - No entries were found or otherwise failed to process * - false - No entries were found or otherwise failed to process
* inFile * inFile
* - true - everything is okay * - true - everything is okay
*/ */
bool getDirs(std::ifstream &inFile, dirList &dirs, bool isSTILFile); bool getDirs(std::ifstream &inFile, dirList &dirs, bool isSTILFile);
/** /**
* Positions the file pointer to the given entry in 'inFile' * Positions the file pointer to the given entry in 'inFile'
* using the 'dirs' dirList for faster positioning. * using the 'dirs' dirList for faster positioning.
* *
* @param entryStr - the entry to position to * @param entryStr - the entry to position to
* @param inFile - position the file pointer in this file * @param inFile - position the file pointer in this file
* @param dirs - the list of dirs in inFile for easier positioning * @param dirs - the list of dirs in inFile for easier positioning
* @return * @return
* - true - if successful * - true - if successful
* - false - otherwise * - false - otherwise
*/ */
bool positionToEntry(const char *entryStr, std::ifstream &inFile, dirLi st &dirs); bool positionToEntry(const char *entryStr, std::ifstream &inFile, dirLi st &dirs);
/** /**
* Reads the entry from 'inFile' into 'buffer'. 'inFile' should * Reads the entry from 'inFile' into 'buffer'. 'inFile' should
* already be positioned to the entry to be read. * already be positioned to the entry to be read.
* *
* @param inFile - filehandle of file to read from * @param inFile - filehandle of file to read from
* @param entryStr - the entry needed to be read * @param entryStr - the entry needed to be read
* @param buffer - where to put the result to * @param buffer - where to put the result to
*/ */
void readEntry(std::ifstream &inFile, std::string &buffer); void readEntry(std::ifstream &inFile, std::string &buffer);
/** /**
* Given a STIL formatted entry in 'buffer', a tune number, * Given a STIL formatted entry in 'buffer', a tune number,
* and a field designation, it returns the requested * and a field designation, it returns the requested
* STIL field into 'result'. * STIL field into 'result'.
* If field=all, it also puts the file-global comment (if it exists) * If field=all, it also puts the file-global comment (if it exists)
* as the first field into 'result'. * as the first field into 'result'.
* *
* @param result - where to put the resulting string to (if any) * @param result - where to put the resulting string to (if any)
* @param buffer - pointer to the first char of what to search for * @param buffer - pointer to the first char of what to search for
* the field. Should be a buffer in standard STIL * the field. Should be a buffer in standard STIL
* format. * format.
* @param tuneNo - song number within the song (default=0) * @param tuneNo - song number within the song (default=0)
* @param field - which field to retrieve (default=all). * @param field - which field to retrieve (default=all).
* @return * @return
* - false - if nothing was put into 'result' * - false - if nothing was put into 'result'
* - true - 'result' has the resulting field * - true - 'result' has the resulting field
*/ */
bool getField(std::string &result, const char *buffer, int tuneNo = 0, STILField field = all); bool getField(std::string &result, const char *buffer, int tuneNo = 0, STILField field = all);
/** /**
* @param result - where to put the resulting string to (if any) * @param result - where to put the resulting string to (if any)
* @param start - pointer to the first char of what to search for * @param start - pointer to the first char of what to search for
* the field. Should be a buffer in standard STIL * the field. Should be a buffer in standard STIL
* format. * format.
* @param end - pointer to the last+1 char of what to search for * @param end - pointer to the last+1 char of what to search for
* the field. ('end-1' should be a '\n'!) * the field. ('end-1' should be a '\n'!)
* @param field - which specific field to retrieve * @param field - which specific field to retrieve
* @return * @return
* - false - if nothing was put into 'result' * - false - if nothing was put into 'result'
* - true - 'result' has the resulting field * - true - 'result' has the resulting field
*/ */
bool getOneField(std::string &result, const char *start, const char *en d, STILField field); bool getOneField(std::string &result, const char *start, const char *en d, STILField field);
/** /**
* Extracts one line from 'infile' to 'line[]'. The end of * Extracts one line from 'infile' to 'line[]'. The end of
* the line is marked by endOfLineChar. Also eats up * the line is marked by endOfLineChar. Also eats up
* additional EOL-like chars. * additional EOL-like chars.
* *
* @param infile - filehandle (streampos should already be positioned * @param infile - filehandle (streampos should already be positioned
* to the start of the desired line) * to the start of the desired line)
* @param line - char array to put the line into * @param line - char array to put the line into
*/ */
void getStilLine(std::ifstream &infile, std::string &line); void getStilLine(std::ifstream &infile, std::string &line);
private: private:
/** /**
* Converts slashes to the one the OS uses to access files. * Converts slashes to the one the OS uses to access files.
* *
* @param * @param
* str - what to convert * str - what to convert
*/ */
static void convertSlashes(std::string &str) { std::replace(str.begin() , str.end(), '/', SLASH); } static void convertSlashes(std::string &str) { std::replace(str.begin() , str.end(), '/', SLASH); }
/** /**
* Converts OS specific dir separators to slashes. * Converts OS specific dir separators to slashes.
* *
* @param * @param
* str - what to convert * str - what to convert
*/ */
static void convertToSlashes(std::string &str) { std::replace(str.begin (), str.end(), SLASH, '/'); } static void convertToSlashes(std::string &str) { std::replace(str.begin (), str.end(), SLASH, '/'); }
}; };
#endif // STIL_H #endif // STIL_H
 End of changes. 26 change blocks. 
243 lines changed or deleted 241 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/