1 /* 2 AdPlug - Replayer for many OPL2/OPL3 audio file formats. 3 Copyright (C) 1999 - 2006 Simon Peter <dn.tlp@gmx.net>, et al. 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 19 cff.h - BoomTracker loader by Riven the Mage <riven@ok.ru> 20 */ 21 22 #include "protrack.h" 23 24 class CcffLoader: public CmodPlayer 25 { 26 public: 27 static CPlayer *factory(Copl *newopl); 28 CcffLoader(Copl * newopl)29 CcffLoader(Copl *newopl) : CmodPlayer(newopl) { }; 30 31 bool load(const std::string &filename, const CFileProvider &fp); 32 void rewind(int subsong); 33 34 std::string gettype(); 35 std::string gettitle(); 36 std::string getauthor(); 37 std::string getinstrument(unsigned int n); 38 unsigned int getinstruments(); 39 40 private: 41 42 class cff_unpacker 43 { 44 public: 45 46 long unpack(unsigned char *ibuf, unsigned char *obuf); 47 48 private: 49 50 unsigned long get_code(); 51 void translate_code(unsigned long code, unsigned char *string); 52 53 void cleanup(); 54 int startup(); 55 56 void expand_dictionary(unsigned char *string); 57 58 unsigned char *input; 59 unsigned char *output; 60 61 long output_length; 62 63 unsigned char code_length; 64 65 unsigned long bits_buffer; 66 unsigned int bits_left; 67 68 unsigned char *heap; 69 unsigned char **dictionary; 70 71 unsigned int heap_length; 72 unsigned int dictionary_length; 73 74 unsigned long old_code,new_code; 75 76 unsigned char the_string[256]; 77 }; 78 79 struct cff_header 80 { 81 char id[16]; 82 unsigned char version; 83 unsigned short size; 84 unsigned char packed; 85 unsigned char reserved[12]; 86 } header; 87 88 struct cff_instrument 89 { 90 unsigned char data[12]; 91 char name[21]; 92 } instruments[47]; 93 94 char song_title[20]; 95 char song_author[20]; 96 97 struct cff_event 98 { 99 unsigned char byte0; 100 unsigned char byte1; 101 unsigned char byte2; 102 }; 103 }; 104