//saves the store into a datastream, be it memory or file
int STOImporter::PutStore(DataStream *stream, Store *store)
{
	int ret;

	if (!stream || !store) {
		return -1;
	}

	ret = PutHeader( stream, store);
	if (ret) {
		return ret;
	}

	ret = PutDrinks( stream, store);
	if (ret) {
		return ret;
	}

	ret = PutCures( stream, store);
	if (ret) {
		return ret;
	}

	ret = PutPurchasedCategories (stream, store);
	if (ret) {
		return ret;
	}

	ret = PutItems( stream, store);

	return ret;
}
Beispiel #2
0
//saves the store into a datastream, be it memory or file
bool STOImporter::PutStore(DataStream *stream, Store *store)
{
    if (!stream || !store) {
        return false;
    }

    CalculateStoredFileSize(store);
    PutHeader(stream, store);
    PutDrinks(stream, store);
    PutCures(stream, store);
    PutPurchasedCategories(stream, store);
    PutItems(stream, store);

    return true;
}
Beispiel #3
0
/* processes messages from modem on serial port */
int process_modem(int fd)
{
	unsigned char buffer_in[MAXMSG];
	unsigned char buffer_out[MAXMSG];
	int err, group, cmd;
	int length;		// message length
	int len_read, len_write;

/*	DBGLOG("process_modem");*/
	/* read first 6 bytes of message (header) */
	len_read = Read(buffer_in, 6, IPC_TIMEOUT);
	if (len_read != 6)
		return -1;	// Error

	length = *(unsigned short *)(buffer_in + 4);
	if (length) {
		/* read the rest of data (if exists) */
		len_read = Read(buffer_in + 6, length, IPC_TIMEOUT);
		if (len_read != length)
			return -1;	// Error
	}
	group = buffer_in[1];
	cmd = buffer_in[2];
	DBGLOG("%02X %02X %02X", group, cmd, buffer_in[6]);

//	if (buffer_in[0] != IPC_DEST_DSY)
//		return -1;	/* Error - packet is not for us */

	/* Process IPC message from Egold */
	err = HandleIndication(buffer_in, buffer_out);

	/* send ACK response to modem */
	PutHeader(buffer_out, buffer_in[1], buffer_in[2], 6);
	length = 6;	// + *(unsigned short *)(buffer_out + 4);
	len_write = Write(buffer_out, length);
	if (len_write != length)
		return -1;

	return 0;
}
Beispiel #4
0
SndAiff::SndAiff(char* name, short mode, short channels, short bits,
				 SndObj** inputlist, float spos, int vecsize, float sr):
          SndFIO(name, mode, channels, bits, inputlist, spos, vecsize, sr)
{

  m_selfdesc = 1; // yes, this is a self-describing  format !!!!
  m_isaiff = false;
 if(m_mode != READ){     // OUTPUT
  m_framesize = (short)((m_bits/8)*m_channels);
  m_header = PutHeader();

 if(m_mode != APPEND){
 fwrite((char *)&m_form, sizFormHdr, 1, m_file); 
 fwrite((char *)&m_comm1, sizCommChunk1, 1, m_file);
 fwrite((char *)&m_comm2, sizCommChunk2, 1, m_file);
 fwrite((char *)&m_ssnd, sizSoundDataHdr, 1, m_file);
 m_datapos = ftell(m_file); 
  if(spos > 0) SetPos(spos);     
 }
 } // OUTPUT

 else {  // INPUT
 
if(m_filestat==SFERROR) {
	  m_dataframes = 0;
	  m_sr = 0.f;
	  m_bits = 0;
	  m_channels = 0;
      m_error = 21;
      return;
 }

 long IDchk;
 fread(&IDchk, 4, 1, m_file);
 if(!is_aiff_form(IDchk)){
	 m_filestat = SFERROR;
     m_sr = 0.f;
     m_bits = 0;
     m_channels = 0;
     m_dataframes = 0;
     m_error = 25;
	 return;
 }

 fseek(m_file, 4, SEEK_CUR);
 fread(&IDchk, 4, 1, m_file);
 if(IDchk != *(long *) FORM_TYPE){
         m_filestat = SFERROR;
         m_sr = 0.f;
         m_bits = 0;
         m_channels = 0;
	     m_dataframes =0;
         m_error = 26;
	    m_output = 0;
	    return;
 }

 fseek(m_file, 0, SEEK_SET);
 if(!ReadHeader()){
        m_dataframes = 0;
        m_error = 27;
	    m_output = 0; 
        return; 

 }
 m_bits = m_header.size;
 m_channels = m_header.nchns;
 m_dataframes = m_header.numSampleFrames;
 int datasize = m_dataframes*m_channels*m_sampsize;
 m_isaiff = true;
 m_itemsleft = (datasize%m_buffsize)/m_sampsize;
 m_spos=spos;          
 m_datapos = ftell(m_file);
    if(spos > 0) SetPos(spos); 

 delete[] m_output;
 delete[] m_buffer;

 m_samples = m_vecsize*m_channels;
 if(!(m_output = new float[m_samples])){
	m_error = 1;
	cout << ErrorMessage();
	return;
 }

 m_buffsize = (m_bits/8)*m_samples;
 if(!(m_buffer = new char[m_buffsize])){
     m_error = 11;
	 cout << ErrorMessage();
	 return;
 }
 
 // these are the pointers used to read the buffer
 m_cp = (char *) m_buffer;
 m_sp = (short *) m_buffer;
 m_lp = (long *) m_buffer;
 m_s24p = (_24Bit *) m_buffer;

 }  // INPUT

}
Beispiel #5
0
SndSinIO::SndSinIO(char* name, int maxtracks, float threshold, int windowtype, short mode, 
		   short channels, int channelmask, short bits, int format,
		   SndObj** inputlist, float framepos, int hopsize, 
		   int fftsize, float sr):
  SndWaveX(name,mode,channels,channelmask, bits, format,
	   inputlist,framepos, maxtracks*3, sr)
{
	
  short cbsize;
  m_len = 64;
  m_format = WAVE_FORMAT_EXTENSIBLE;
  m_hdrsize = 84;
	
  if(mode != READ){ // if output
		
    int mask;
    short sbits;      
		
    m_hopsize = hopsize;
    SetVectorSize(maxtracks*3);
    GUID subfmt;
    cbsize = SHORT_LE((short)46);
    PutHeader(0,m_hdrsize,m_len, m_format);
    sbits = SHORT_LE((short)m_bits);
    mask = LONG_LE((long) (m_ChannelMask = channelmask));
    subfmt.Data1 = LONG_LE(0x443a4b58);
    subfmt.Data2 = SHORT_LE(0x21a2);
    subfmt.Data2 = SHORT_LE(0x324b); 
    subfmt.Data4[0] = 0x00;
    subfmt.Data4[1] =0x00;
    subfmt.Data4[2] = 0x00;
    subfmt.Data4[3] = 0x01;
    subfmt.Data4[4] = 0xAA;
    subfmt.Data4[5] = 0x02;
    subfmt.Data4[6] = 0xBB;
    subfmt.Data4[7] = 0x03;
    m_SubFormat = subfmt;
		
    m_sinheader.dwVersion =  LONG_LE(1);
    m_sinheader.data.wWordFormat =  SHORT_LE((short)(m_bits != 64 ? IEEE_FLOAT_T : IEEE_DOUBLE_T));  
    m_sinheader.data.wWindowType =  SHORT_LE((short)windowtype); 
    m_sinheader.data.dwWindowSize =  LONG_LE((long)fftsize);
    m_sinheader.data.wMaxtracks =SHORT_LE((short) maxtracks);
    m_sinheader.data.wHopsize =  LONG_LE((long)m_hopsize);
    m_sinheader.data.fAnalysisRate = FLOAT32_LE(m_sr/m_hopsize);
    m_sinheader.data.fThreshold = FLOAT32_LE(threshold);
		
    if(mode != APPEND){
      fseek(m_file, sizeof(wave_head), SEEK_SET);
      fwrite(&cbsize, sizeof(short), 1, m_file);
      fwrite(&sbits, sizeof(short), 1, m_file);
      fwrite(&mask, sizeof(int), 1, m_file);
      fwrite(&subfmt, sizeof(GUID), 1, m_file);
      fwrite(&m_sinheader, sizeof(sinusex), 1, m_file);  
      m_wchkpos = ftell(m_file);
      fwrite(&m_wdata, sizeof(wave_data), 1, m_file);
      m_datapos = ftell(m_file);
			
    } else m_wchkpos = sizeof(wave_head) + 22 + sizeof(sinusex) + 2;
		
  } // output
	
  else { // if INPUT
    m_tracks = new int[m_channels];
    m_trkindx = new int*[m_channels];
		
		
    fseek(m_file, sizeof(wave_head)+2+22, SEEK_SET); 	  
    fread(&m_sinheader, sizeof(sinusex),1, m_file);
		
    if(GUIDcheck(KSDATAFORMAT_SUBTYPE_SINUS)){ // check for GUID
      m_sinheader.dwVersion =  LONG_LE(m_sinheader.dwVersion );
      m_sinheader.data.wWordFormat =  SHORT_LE(m_sinheader.data.wWordFormat );
      m_sinheader.data.wHopsize =  SHORT_LE(m_sinheader.data.wHopsize );
      m_sinheader.data.wWindowType =  SHORT_LE(m_sinheader.data.wWindowType );
      m_sinheader.data.wMaxtracks =  SHORT_LE(m_sinheader.data.wMaxtracks);
      m_sinheader.data.dwWindowSize =  LONG_LE(m_sinheader.data.dwWindowSize );
      m_sinheader.data.fThreshold = FLOAT32_LE(m_sinheader.data.fThreshold);
			
    }
    fseek(m_file, m_datapos, SEEK_SET);
    if(framepos > 0) SetTimePos(framepos);    
    m_maxtracks = m_sinheader.data.wMaxtracks; 
    for(int i = 0; i < m_channels; i++) m_trkindx[i] = new int[m_maxtracks];
  }   // INPUT
}