Previous 199869 Revisions Next

r22562 Friday 26th April, 2013 at 17:54:55 UTC by Wilbert Pol
Formatting (nw)
[src/lib/formats]csw_cas.c

trunk/src/lib/formats/csw_cas.c
r22561r22562
4040
4141static int mycaslen;
4242
43static int csw_cas_to_wav_size( const UINT8 *casdata, int caslen ) {
44UINT32 SampleRate;
45UINT32 NumberOfPulses;
46UINT8  MajorRevision;
47UINT8  MinorRevision;
48UINT8  CompressionType;
49UINT8  Flags;
50UINT8  HeaderExtensionLength;
51UINT8 *gz_ptr = NULL;
43static int csw_cas_to_wav_size( const UINT8 *casdata, int caslen )
44{
45   UINT32 SampleRate;
46   UINT32 NumberOfPulses;
47   UINT8  MajorRevision;
48   UINT8  MinorRevision;
49   UINT8  CompressionType;
50   UINT8  Flags;
51   UINT8  HeaderExtensionLength;
52   UINT8  *gz_ptr = NULL;
5253
53int         total_size;
54z_stream    d_stream;
55int         err;
56UINT8       *in_ptr;
57int         bsize=0;
54   int         total_size;
55   z_stream    d_stream;
56   int         err;
57   UINT8       *in_ptr;
58   int         bsize=0;
5859
59   if ( memcmp( casdata, CSW_HEADER, sizeof(CSW_HEADER) ) ) {
60   if ( memcmp( casdata, CSW_HEADER, sizeof(CSW_HEADER) ) )
61   {
6062      LOG_FORMATS( "csw_cas_to_wav_size: cassette image has incompatible header\n" );
6163      goto cleanup;
6264   }
6365
64   if (casdata[0x16]!=0x1a) {
66   if (casdata[0x16]!=0x1a)
67   {
6568      LOG_FORMATS( "csw_cas_to_wav_size: Terminator Code Not Found\n" );
6669      goto cleanup;
6770   }
r22561r22562
7174
7275   LOG_FORMATS("Version %d : %d\n",MajorRevision,MinorRevision);
7376
74   if (casdata[0x17]!=2){
77   if (casdata[0x17]!=2)
78   {
7579      LOG_FORMATS( "csw_cas_to_wav_size: Unsuported Major Version\n" );
7680      goto cleanup;
7781   }
r22561r22562
110114   d_stream.data_type=0;
111115
112116   err = inflateInit( &d_stream );
113   if ( err != Z_OK ) {
117   if ( err != Z_OK )
118   {
114119      LOG_FORMATS( "inflateInit2 error: %d\n", err );
115120      goto cleanup;
116121   }
r22561r22562
122127      d_stream.next_out = gz_ptr;
123128      d_stream.avail_out=1;
124129      err=inflate( &d_stream, Z_SYNC_FLUSH );
125      if (err==Z_OK) {
130      if (err==Z_OK)
131      {
126132         bsize=gz_ptr[0];
127         if (bsize==0) {
133         if (bsize==0)
134         {
128135            d_stream.avail_out=4;
129136            d_stream.next_out = gz_ptr;
130137            err=inflate( &d_stream, Z_SYNC_FLUSH );
r22561r22562
135142   }
136143   while (err==Z_OK);
137144
138   if ( err != Z_STREAM_END ) {
145   if ( err != Z_STREAM_END )
146   {
139147      LOG_FORMATS( "inflate error: %d\n", err );
140148      goto cleanup;
141149   }
142150
143151   err = inflateEnd( &d_stream );
144   if ( err != Z_OK ) {
152   if ( err != Z_OK )
153   {
145154      LOG_FORMATS( "inflateEnd error: %d\n", err );
146155      goto cleanup;
147156   }
148157
149
150
151
152
153
154   if ( gz_ptr ) {
158   if ( gz_ptr )
159   {
155160      free( gz_ptr );
156161      gz_ptr = NULL;
157162   }
158163
159
160
161164   return total_size;
162165
163166cleanup:
164   if ( gz_ptr ) {
167   if ( gz_ptr )
168   {
165169      free( gz_ptr );
166170      gz_ptr = NULL;
167171   }
168172   return -1;
169
170173}
171174
172static int csw_cas_fill_wave( INT16 *buffer, int length, UINT8 *bytes ) {
173UINT32 SampleRate;
174UINT32 NumberOfPulses;
175UINT8  CompressionType;
176UINT8  Flags;
177UINT8  HeaderExtensionLength;
178INT8   Bit;
175static int csw_cas_fill_wave( INT16 *buffer, int length, UINT8 *bytes )
176{
177   UINT32 SampleRate;
178   UINT32 NumberOfPulses;
179   UINT8  CompressionType;
180   UINT8  Flags;
181   UINT8  HeaderExtensionLength;
182   INT8   Bit;
179183
180UINT8 *gz_ptr = NULL;
181int         total_size;
182z_stream    d_stream;
183int         err;
184UINT8       *in_ptr;
185int         bsize=0;
186int     i;
184   UINT8 *gz_ptr = NULL;
185   int         total_size;
186   z_stream    d_stream;
187   int         err;
188   UINT8       *in_ptr;
189   int         bsize=0;
190   int     i;
187191
188192
189193   LOG_FORMATS("Length %d\n",length);
r22561r22562
201205   if ((Flags&0)==0)
202206   {
203207      Bit=-100;
204   } else {
208   }
209   else
210   {
205211      Bit=100;
206212   }
207213
r22561r22562
213219
214220   gz_ptr = (UINT8*)malloc( 8 );
215221
216
217222   d_stream.next_in = (unsigned char *)in_ptr;
218223   d_stream.avail_in = mycaslen - ( in_ptr - bytes );
219224   d_stream.total_in=0;
r22561r22562
228233   d_stream.data_type=0;
229234
230235   err = inflateInit( &d_stream );
231   if ( err != Z_OK ) {
236   if ( err != Z_OK )
237   {
232238      LOG_FORMATS( "inflateInit2 error: %d\n", err );
233239      goto cleanup;
234240   }
r22561r22562
240246      d_stream.next_out = gz_ptr;
241247      d_stream.avail_out=1;
242248      err=inflate( &d_stream, Z_SYNC_FLUSH );
243      if (err==Z_OK) {
249      if (err==Z_OK)
250      {
244251         bsize=gz_ptr[0];
245         if (bsize==0) {
252         if (bsize==0)
253         {
246254            d_stream.avail_out=4;
247255            d_stream.next_out = gz_ptr;
248256            err=inflate( &d_stream, Z_SYNC_FLUSH );
r22561r22562
257265   }
258266   while (err==Z_OK);
259267
260   if ( err != Z_STREAM_END ) {
268   if ( err != Z_STREAM_END )
269   {
261270      LOG_FORMATS( "inflate error: %d\n", err );
262271      goto cleanup;
263272   }
264273
265274   err = inflateEnd( &d_stream );
266   if ( err != Z_OK ) {
275   if ( err != Z_OK )
276   {
267277      LOG_FORMATS( "inflateEnd error: %d\n", err );
268278      goto cleanup;
269279   }
270280
271
272
273
274
275
276   if ( gz_ptr ) {
281   if ( gz_ptr )
282   {
277283      free( gz_ptr );
278284      gz_ptr = NULL;
279285   }
280286
281
282
283
284287   return length;
285288
286
287
288   cleanup:
289      if ( gz_ptr ) {
290         free( gz_ptr );
291         gz_ptr = NULL;
292      }
289cleanup:
290   if ( gz_ptr )
291   {
292      free( gz_ptr );
293      gz_ptr = NULL;
294   }
293295   return -1;
294296}
295297
r22561r22562
304306   0                       /* trailer_samples */
305307};
306308
307static casserr_t csw_cassette_identify( cassette_image *cassette, struct CassetteOptions *opts ) {
309static casserr_t csw_cassette_identify( cassette_image *cassette, struct CassetteOptions *opts )
310{
308311   return cassette_legacy_identify( cassette, opts, &csw_legacy_fill_wave );
309312}
310313
311static casserr_t csw_cassette_load( cassette_image *cassette ) {
314static casserr_t csw_cassette_load( cassette_image *cassette )
315{
312316   return cassette_legacy_construct( cassette, &csw_legacy_fill_wave );
313317}
314318

Previous 199869 Revisions Next


© 1997-2024 The MAME Team