annotate Plugins/Input/console/abstract_file.cpp @ 352:f13ab2d8e9cf trunk

[svn] various fixes :(
author nenolod
date Mon, 26 Dec 2005 14:12:35 -0800
parents 252843aac42f
children 0b9507985f0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 #include "abstract_file.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 #include <assert.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5 #include <string.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #include <stddef.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8 /* Copyright (C) 2005 by Shay Green. Permission is hereby granted, free of
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 charge, to any person obtaining a copy of this software module and associated
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 documentation files (the "Software"), to deal in the Software without
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 restriction, including without limitation the rights to use, copy, modify,
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 merge, publish, distribute, sublicense, and/or sell copies of the Software, and
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 to permit persons to whom the Software is furnished to do so, subject to the
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 following conditions: The above copyright notice and this permission notice
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 shall be included in all copies or substantial portions of the Software. THE
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 #ifndef RAISE_ERROR
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 #define RAISE_ERROR( str ) return str
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 typedef Data_Reader::error_t error_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 error_t Data_Reader::read( void* p, long s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 long result = read_avail( p, s );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 if ( result != s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 if ( result >= 0 && result < s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 RAISE_ERROR( "Unexpected end-of-file" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 RAISE_ERROR( "Read error" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 long File_Reader::remain() const
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 return size() - tell();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 error_t Data_Reader::skip( long count )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 char buf [512];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 while ( count )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 int n = sizeof buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 if ( n > count )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 n = count;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 count -= n;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 RAISE_ERROR( read( buf, n ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 error_t File_Reader::skip( long n )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 assert( n >= 0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 if ( n )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 RAISE_ERROR( seek( tell() + n ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 // Subset_Reader
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 Subset_Reader::Subset_Reader( Data_Reader* in_, long size ) :
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75 in( in_ ),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 remain_( in_->remain() )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 if ( remain_ > size )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79 remain_ = size;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 long Subset_Reader::remain() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 return remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86 long Subset_Reader::read_avail( void* p, long s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88 if ( s > remain_ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 s = remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 remain_ -= s;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91 return in->read_avail( p, s );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94 // Mem_File_Reader
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96 Mem_File_Reader::Mem_File_Reader( const void* p, long s ) :
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97 begin( (const char*) p ),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 pos( 0 ),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
99 size_( s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
102
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
103 long Mem_File_Reader::size() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
104 return size_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
106
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 long Mem_File_Reader::read_avail( void* p, long s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109 long r = remain();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110 if ( s > r )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111 s = r;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112 memcpy( p, begin + pos, s );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 pos += s;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114 return s;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117 long Mem_File_Reader::tell() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
118 return pos;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
119 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121 error_t Mem_File_Reader::seek( long n )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
123 if ( n > size_ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
124 RAISE_ERROR( "Tried to go past end of file" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125 pos = n;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129 // Std_File_Reader
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131 Std_File_Reader::Std_File_Reader() : file( NULL ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 Std_File_Reader::~Std_File_Reader() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
135 close();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
136 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 error_t Std_File_Reader::open( const char* path )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 file = fopen( path, "rb" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141 if ( !file )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
142 RAISE_ERROR( "Couldn't open file" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
143 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
144 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
145
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
146 long Std_File_Reader::size() const
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
147 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
148 long pos = tell();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
149 fseek( file, 0, SEEK_END );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
150 long result = tell();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
151 fseek( file, pos, SEEK_SET );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
152 return result;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
153 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
154
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
155 long Std_File_Reader::read_avail( void* p, long s ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
156 return fread( p, 1, s, file );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
157 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
158
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
159 long Std_File_Reader::tell() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
160 return ftell( file );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
161 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
162
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
163 error_t Std_File_Reader::seek( long n )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
164 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
165 if ( fseek( file, n, SEEK_SET ) != 0 )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
166 RAISE_ERROR( "Error seeking in file" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
167 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
168 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
169
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
170 void Std_File_Reader::close()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
171 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
172 if ( file ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
173 fclose( file );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
174 file = NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
175 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
176 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
177
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
178 // Std_File_Writer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
179
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
180 Std_File_Writer::Std_File_Writer() : file( NULL ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
181 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
182
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
183 Std_File_Writer::~Std_File_Writer() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
184 close();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
185 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
186
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
187 error_t Std_File_Writer::open( const char* path )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
188 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
189 file = fopen( path, "wb" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
190 if ( !file )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
191 RAISE_ERROR( "Couldn't open file for writing" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
192
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
193 // to do: increase file buffer size
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
194 //setvbuf( file, NULL, _IOFBF, 32 * 1024L );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
195
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
196 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
197 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
198
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
199 error_t Std_File_Writer::write( const void* p, long s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
200 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
201 long result = fwrite( p, 1, s, file );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
202 if ( result != s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
203 RAISE_ERROR( "Couldn't write to file" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
204 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
205 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
206
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
207 void Std_File_Writer::close()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
208 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
209 if ( file ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
210 fclose( file );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
211 file = NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
212 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
213 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
214
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
215 // Mem_Writer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
216
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
217 Mem_Writer::Mem_Writer( void* p, long s, int b ) :
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
218 out( p ),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
219 remain_( s ),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
220 ignore_excess( b )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
221 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
222 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
223
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
224 error_t Mem_Writer::write( const void* p, long s )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
225 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
226 if ( s > remain_ )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
227 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
228 if ( !ignore_excess )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
229 RAISE_ERROR( "Tried to write more data than expected" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
230 s = remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
231 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
232 remain_ -= s;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
233 memcpy( out, p, s );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
234 out = (char*) out + s;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
235 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
236 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
237
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
238 long Mem_Writer::remain() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
239 return remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
240 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
241
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
242 // Null_Writer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
243
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
244 error_t Null_Writer::write( const void*, long ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
245 return NULL;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
246 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
247