libsidplayfp 2.6.0
SidTuneBase.h
1/*
2 * This file is part of libsidplayfp, a SID player engine.
3 *
4 * Copyright 2011-2021 Leandro Nini <drfiemost@users.sourceforge.net>
5 * Copyright 2007-2010 Antti Lankila
6 * Copyright 2000 Simon White
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 */
22
23#ifndef SIDTUNEBASE_H
24#define SIDTUNEBASE_H
25
26#include <stdint.h>
27#include <memory>
28#include <vector>
29#include <string>
30
31#include "sidplayfp/SidTuneInfo.h"
32#include "sidplayfp/siddefs.h"
33
34#include "SmartPtr.h"
35#include "SidTuneInfoImpl.h"
36
37#include "sidcxx11.h"
38
39namespace libsidplayfp
40{
41
42class sidmemory;
43template <class T> class SmartPtr_sidtt;
44
49{
50private:
51 const char* m_msg;
52public:
53 loadError(const char* msg) : m_msg(msg) {}
54 const char* message() const { return m_msg; }
55};
56
61{
62protected:
63 typedef std::vector<uint8_t> buffer_t;
64
65protected:
67 static const unsigned int MAX_SONGS = 256;
68
69 // Generic error messages
70 static const char ERR_TRUNCATED[];
71 static const char ERR_INVALID[];
72
73public: // ----------------------------------------------------------------
74 virtual ~SidTuneBase() {}
75
76 typedef void (*LoaderFunc)(const char* fileName, buffer_t& bufferRef);
77
94 static SidTuneBase* load(const char* fileName, const char **fileNameExt, bool separatorIsSlash);
95
110 static SidTuneBase* load(LoaderFunc loader, const char* fileName, const char **fileNameExt, bool separatorIsSlash);
111
122
130 unsigned int selectSong(unsigned int songNum);
131
135 const SidTuneInfo* getInfo() const;
136
143 const SidTuneInfo* getInfo(unsigned int songNum);
144
150 virtual void placeSidTuneInC64mem(sidmemory& mem);
151
159 virtual const char *createMD5(char *) { return nullptr; }
160
168 virtual const char *createMD5New(char *) { return nullptr; }
169
173 const uint_least8_t* c64Data() const { return &cache[fileOffset]; }
174
175protected: // -------------------------------------------------------------
176
177 std::unique_ptr<SidTuneInfoImpl> info;
178
179 uint_least8_t songSpeed[MAX_SONGS];
180 SidTuneInfo::clock_t clockSpeed[MAX_SONGS];
181
184
185 buffer_t cache;
186
187protected:
188 SidTuneBase();
189
198 static void loadFile(const char* fileName, buffer_t& bufferRef);
199
207 SidTuneInfo::clock_t clock = SidTuneInfo::CLOCK_PAL);
208
212 bool checkCompatibility();
213
217 bool checkRelocInfo();
218
225
243 virtual void acceptSidTune(const char* dataFileName, const char* infoFileName,
244 buffer_t& buf, bool isSlashedFileName);
245
250
251private: // ---------------------------------------------------------------
252
253#if !defined(SIDTUNE_NO_STDIN_LOADER)
254 static SidTuneBase* getFromStdIn();
255#endif
256 static SidTuneBase* getFromFiles(const char* name, const char **fileNameExtensions, bool separatorIsSlash);
257 static SidTuneBase* getFromFiles(LoaderFunc loader, const char* name, const char **fileNameExtensions, bool separatorIsSlash);
258
262 static SidTuneBase* getFromBuffer(const uint_least8_t* const buffer, uint_least32_t bufferLen);
263
271 static void createNewFileName(std::string& destString,
272 const char* sourceName, const char* sourceExt);
273
274private:
275 // prevent copying
276 SidTuneBase(const SidTuneBase&);
277 SidTuneBase& operator=(SidTuneBase&);
278};
279
280}
281
282#endif /* SIDTUNEBASE_H */
Definition SidTuneInfo.h:39
Definition EventCallback.h:36
Definition SidTuneBase.h:61
static const unsigned int MAX_SONGS
Also PSID file format limit.
Definition SidTuneBase.h:67
bool checkCompatibility()
Definition SidTuneBase.cpp:542
static SidTuneBase * read(const uint_least8_t *sourceBuffer, uint_least32_t bufferLen)
Definition SidTuneBase.cpp:117
virtual void acceptSidTune(const char *dataFileName, const char *infoFileName, buffer_t &buf, bool isSlashedFileName)
Definition SidTuneBase.cpp:279
const SidTuneInfo * getInfo() const
Definition SidTuneBase.cpp:122
void resolveAddrs(const uint_least8_t *c64data)
Definition SidTuneBase.cpp:507
virtual const char * createMD5New(char *)
Definition SidTuneBase.h:168
std::string petsciiToAscii(SmartPtr_sidtt< const uint8_t > &spPet)
Definition SidTuneBase.cpp:573
void convertOldStyleSpeedToTables(uint_least32_t speed, SidTuneInfo::clock_t clock=SidTuneInfo::CLOCK_PAL)
Definition SidTuneBase.cpp:439
virtual void placeSidTuneInC64mem(sidmemory &mem)
Definition SidTuneBase.cpp:168
virtual const char * createMD5(char *)
Definition SidTuneBase.h:159
const uint_least8_t * c64Data() const
Definition SidTuneBase.h:173
bool checkRelocInfo()
Definition SidTuneBase.cpp:460
unsigned int selectSong(unsigned int songNum)
Definition SidTuneBase.cpp:133
uint_least32_t fileOffset
For files with header: offset to real data.
Definition SidTuneBase.h:183
static void loadFile(const char *fileName, buffer_t &bufferRef)
Definition SidTuneBase.cpp:184
static SidTuneBase * load(const char *fileName, const char **fileNameExt, bool separatorIsSlash)
Definition SidTuneBase.cpp:97
Definition SidTuneBase.h:49
Definition sidmemory.h:34