//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; }
//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; }
/* 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; }
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 }
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 }