- wxInt32 FCC1, FCC2;
- wxUint32 datalen ;
- static const char *rifftxt = "RIFF";
- static const char *listtxt = "LIST";
- static const char *anihtxt = "anih";
-
- wxInt32 riff32 = (wxInt32) rifftxt;
- wxInt32 list32 = (wxInt32) listtxt;
- wxInt32 anih32 = (wxInt32) anihtxt;
-
- stream.SeekI(0);
- if ( !stream.Read(&FCC1, 4) )
- return FALSE;
-
- if ( FCC1 != riff32 )
- return FALSE;
-
- // we have a riff file:
- while ( stream.IsOk() )
- {
- if ( FCC1 == anih32 )
- return TRUE;
- // we always have a data size:
- stream.Read(&datalen, 4);
- datalen = wxINT32_SWAP_ON_BE(datalen) ;
- //data should be padded to make even number of bytes
- if (datalen % 2 == 1) datalen ++ ;
- // now either data or a FCC:
- if ( (FCC1 == riff32) || (FCC1 == list32) )
- {
- stream.Read(&FCC2, 4);
- }
- else
- {
- stream.SeekI(stream.TellI() + datalen);
- }
-
- // try to read next data chunk:
- if ( !stream.Read(&FCC1, 4) )
- {
- // reading failed -- either EOF or IO error, bail out anyhow
- return FALSE;
- }
- }
-
- return FALSE;