comparison Plugins/Input/adplug/core/xad.cxx @ 1713:a4d7227231e3 trunk

[svn] More .cpp -> .cxx. Noticed by Chainsaw. Shame on me that I forgot some ;).
author js
date Sat, 16 Sep 2006 07:33:28 -0700
parents Plugins/Input/adplug/core/xad.cpp@705d4c089fce
children
comparison
equal deleted inserted replaced
1712:2e7c9f6d9923 1713:a4d7227231e3
1 /*
2 Adplug - Replayer for many OPL2/OPL3 audio file formats.
3 Copyright (C) 1999 - 2003 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 xad.cpp - XAD shell player by Riven the Mage <riven@ok.ru>
20 */
21
22 #include "xad.h"
23 #include "debug.h"
24
25 /* -------- Public Methods -------------------------------- */
26
27 CxadPlayer::CxadPlayer(Copl * newopl) : CPlayer(newopl)
28 {
29 tune = 0;
30 }
31
32 CxadPlayer::~CxadPlayer()
33 {
34 if (tune)
35 delete [] tune;
36 }
37
38 bool CxadPlayer::load(const std::string &filename, const CFileProvider &fp)
39 {
40 binistream *f = fp.open(filename); if(!f) return false;
41 bool ret = false;
42
43 // load header
44 xad.id = f->readInt(4);
45 f->readString(xad.title, 36);
46 f->readString(xad.author, 36);
47 xad.fmt = f->readInt(2);
48 xad.speed = f->readInt(1);
49 xad.reserved_a = f->readInt(1);
50
51 // 'XAD!' - signed ?
52 if(xad.id != 0x21444158) { fp.close(f); return false; }
53
54 // get file size
55 tune_size = fp.filesize(f) - 80;
56
57 // load()
58 tune = new unsigned char [tune_size];
59 f->readString((char *)tune, tune_size);
60 fp.close(f);
61
62 ret = xadplayer_load();
63
64 if (ret)
65 rewind(0);
66
67 return ret;
68 }
69
70 void CxadPlayer::rewind(int subsong)
71 {
72 opl->init();
73
74 plr.speed = xad.speed;
75 plr.speed_counter = 1;
76 plr.playing = 1;
77 plr.looping = 0;
78
79 // rewind()
80 xadplayer_rewind(subsong);
81
82 #ifdef DEBUG
83 AdPlug_LogWrite("-----------\n");
84 #endif
85 }
86
87 bool CxadPlayer::update()
88 {
89 if (--plr.speed_counter)
90 goto update_end;
91
92 plr.speed_counter = plr.speed;
93
94 // update()
95 xadplayer_update();
96
97 update_end:
98 return (plr.playing && (!plr.looping));
99 }
100
101 float CxadPlayer::getrefresh()
102 {
103 return xadplayer_getrefresh();
104 }
105
106 std::string CxadPlayer::gettype()
107 {
108 return xadplayer_gettype();
109 }
110
111 std::string CxadPlayer::gettitle()
112 {
113 return xadplayer_gettitle();
114 }
115
116 std::string CxadPlayer::getauthor()
117 {
118 return xadplayer_getauthor();
119 }
120
121 std::string CxadPlayer::getinstrument(unsigned int i)
122 {
123 return xadplayer_getinstrument(i);
124 }
125
126 unsigned int CxadPlayer::getinstruments()
127 {
128 return xadplayer_getinstruments();
129 }
130
131 /* -------- Protected Methods ------------------------------- */
132
133 void CxadPlayer::opl_write(int reg, int val)
134 {
135 adlib[reg] = val;
136 #ifdef DEBUG
137 AdPlug_LogWrite("[ %02X ] = %02X\n",reg,val);
138 #endif
139 opl->write(reg,val);
140 }