/usr/include/tse3/TSE3MDL.h is in libtse3-dev 0.3.1-4.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | /*
* @(#)TSE3MDL.h 3.00 20 August 2000
*
* Copyright (c) 2000 Pete Goodliffe (pete@cthree.org)
*
* This file is part of TSE3 - the Trax Sequencer Engine version 3.00.
*
* This library is modifiable/redistributable under the terms of the GNU
* General Public License.
*
* You should have received a copy of the GNU General Public License along
* with this program; see the file COPYING. If not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#ifndef TSE3_TSE3MDL_H
#define TSE3_TSE3MDL_H
#include "tse3/Serializable.h"
#include <string>
#include <cstddef>
#include <iostream>
namespace TSE3
{
class Song;
/**
* The TSE3MDL object provides file operations for the @ref TSE3 library,
* being the main entry point for saving/loading in the TSE3MDL file
* format.
*
* It uses the @ref Serializable interface implemented by the various TSE3
* classes.
*
* @short Object used to load/save TSE3MDL song files
* @author Pete Goodliffe
* @version 1.00
* @see Serializable
*/
class TSE3MDL
{
public:
/**
* Create a TSE3MDL file operations object.
*
* @param appname Name of the application using TSE3.
* This is saved into the TSE3MDL file header
* @param verbose Diagnostic level, normally you want to ignore
* this and accept the default value
* @param diag Where to send any diagnostic output
*/
TSE3MDL(const std::string &appname = "",
int verbose = 0,
std::ostream &diag = std::cout);
/**
* Save the given @ref Song to the file specified. If the file
* already exists it will be overwritten.
*
* This will save the appropriate fill header and then call the
* @ref Song class's save method.
*
* @param filename Filename to save to
* @param song Song object to save
* @throws SerializableError
*/
void save(const std::string &filename, const Song *song);
/**
* As @ref save above, but you specify the ostream.
*/
void save(std::ostream &out, const Song *song);
/**
* Load a @ref Song from the file specified. The returned @ref Song
* will have been newed from the free store, and so when you have
* finished with it it is your responsibility to delete it.
*
* @param filename Filename to save to
* @param progress The progress callback to keep informed of
* progress, or zero for no callback
* @return The loaded @ref Song - you must delete it
* @throws SerializableError
*/
Song *load(const std::string &filename, Progress *progress = 0);
static const int MajorVersion = 100;
static const int MinorVersion = 100;
private:
/**
* An internal class for saving and loading the TSE3MDL file
* header.
*
* The notable feature of this class is that it is the only one
* that actually writes into most of the @ref SerializableLoadInfo
* structure.
*/
class Header : public Serializable
{
public:
Header(const std::string &originator);
virtual ~Header();
virtual void save(std::ostream &out, int indentLevel);
virtual void load(std::istream &in,
SerializableLoadInfo &info);
private:
std::string originator;
Header &operator=(const Header &);
Header(const Header &);
} header;
int verbose;
std::ostream &diag;
};
/**
* The FileRegoniser class will return information about a given file.
*
* It can recognise three file types - the three types that TSE3 provides
* support for. These are:
* @li Native TSE3MDL files
* @li TSE2MDL (the file format of TSE2)
* @li Standard MIDI files
*
* @short Object used to work out a file's type
* @author Pete Goodliffe
* @version 1.00
*/
class FileRecogniser
{
public:
/**
* Creates a FileRecogniser for a particular file.
*
* @param filename The name of the file to query
*/
FileRecogniser(const std::string &filename);
enum
{
Type_Error, // file could not be read (does it exist?)
Type_Unknown, // file type not recognised
Type_TSE3MDL, // TSE3MDL file
Type_TSE2MDL, // TSEMDL (TSE2) file
Type_Midi // MIDI file
};
/**
* Returns the type of the file. The value will be one of the
* below:
* @li Type_Unknown - No recognised music file type
* @li Type_TSE3MDL - A TSE3MDL file
* @li Type_TSE2MDL - A TSEMDL file (from TSE2)
* @li Type_Midi - A standard MIDI file
*
* @return The type of the specified file
*/
int type() const { return _type; }
/**
* Returns the size of the file.
*
* @return The size of the file in bytes.
*/
size_t size() const { return _size; }
/**
* Loads the file in the appropriate way.
*
* This will use either the @ref TSE3MDL, @ref MidiImport or
* @ref TSE2MDL classes to create a @ref Song from the data in
* the file.
*
* If the file is of an unknown type, this will return zero.
*
* Any exception that may be thrown by the three file loading
* classes may pass from this method.
*
* The loaded @ref Song will have been created with new, it is
* now your responsibility to delete it.
*
* @param progress A callback progress interface, or zero for none
* @return A newly loaded @ref Song, or zero for faliure
*/
Song *load(Progress *progress);
private:
std::string filename;
int _type;
size_t _size;
};
}
#endif
|