int main(int argc, const char *argv[]) { FILE *file; uint8 buffer[128]; size_t size; ParseStatus status; if ( argc != 2 ) { fprintf(stderr, "Synopsis: %s <file>\n", argv[0]); exit(1); } file = fopen(argv[1], "rb"); if ( file == NULL ) { fputs("File error\n", stderr); exit(2); } parseInit(); while ( !feof(file) ) { size = fread(buffer, 1, 128, file); status = parse(buffer, size); if ( status != PARSE_SUCCESS ) { fprintf(stderr, "Parse error %d\n", status); exit(3); } } // terminate fclose(file); return 0; }
bool CSeqParser::parseClassConstruct( char* &start, char *end, wd::CSeqLog &log, std::list< std::pair< char*, std::string > > &error_info ) { std::string str; gotoNextChar( start, end ); for( char chr = *start; chr != '\0'; chr = *start ) { switch ( chr ) { case '}': ++start; return true; case '\r': case '\n': case ' ': case '\t': gotoNextChar( start, end ); break; case '=': { CSeqInit data; data.eleName = str; str.clear(); parseInit( ++start, end, data, error_info ); if ( data.eleName.empty() ) { pushErrorInfo( error_info, start, "缺少变量名" ); break; } if ( data.eleDefault.empty() ) { pushErrorInfo( error_info, start, "变量缺少符值" ); break; } log.initList.push_back( data ); } break; case ';': gotoNextLine( start, end ); break; default: if ( !str.empty() ) pushErrorInfo( error_info, start, ( "字符串 [" + str + "] 解释器未正确使用" ).c_str() ); str = takeNextWord( start, end ); break; } } return false; }
void OutProgressiveOGG::sendHeader(){ HTTP_S.Clean(); //make sure no parts of old requests are left in any buffers HTTP_S.SetHeader("Content-Type", "video/ogg"); HTTP_S.protocol = "HTTP/1.0"; myConn.SendNow(HTTP_S.BuildResponse("200", "OK")); //no SetBody = unknown length - this is intentional, we will stream the entire file std::map<int, std::deque<std::string> > initData; OGG::oggSegment newSegment; for (std::set<long unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ parseInit(myMeta.tracks[*it].init, initData[*it]); if (myMeta.tracks[*it].codec == "theora"){ //get size and position of init data for this page. pageBuffer[*it].codec = OGG::THEORA; pageBuffer[*it].totalFrames = 1; //starts at frame number 1, according to weird offDetectMeta function. std::string tempStr = initData[*it][0]; theora::header tempHead((char *)tempStr.c_str(), 42); pageBuffer[*it].split = tempHead.getKFGShift(); INFO_MSG("got theora KFG shift: %d", pageBuffer[*it].split); //looks OK. } else if (myMeta.tracks[*it].codec == "vorbis"){ pageBuffer[*it].codec = OGG::VORBIS; pageBuffer[*it].totalFrames = 0; pageBuffer[*it].sampleRate = myMeta.tracks[*it].rate; pageBuffer[*it].prevBlockFlag = -1; vorbis::header tempHead((char *)initData[*it][0].data(), initData[*it][0].size()); pageBuffer[*it].blockSize[0] = std::min(tempHead.getBlockSize0(), tempHead.getBlockSize1()); pageBuffer[*it].blockSize[1] = std::max(tempHead.getBlockSize0(), tempHead.getBlockSize1()); char audioChannels = tempHead.getAudioChannels(); //? vorbis::header tempHead2((char *)initData[*it][2].data(), initData[*it][2].size()); pageBuffer[*it].vorbisModes = tempHead2.readModeDeque(audioChannels);//getting modes } else if (myMeta.tracks[*it].codec == "opus"){ pageBuffer[*it].totalFrames = 0; //? pageBuffer[*it].codec = OGG::OPUS; } pageBuffer[*it].clear(OGG::BeginOfStream, 0, *it, 0); //CREATES a (map)pageBuffer object, *it = id, pagetype=BOS newSegment.dataString = initData[*it][0]; pageBuffer[*it].oggSegments.push_back(newSegment); pageBuffer[*it].sendTo(myConn, 0); //granule position of 0 } for (std::set<long unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ newSegment.dataString = initData[*it][1]; pageBuffer[*it].oggSegments.push_back(newSegment); newSegment.dataString = initData[*it][2]; pageBuffer[*it].oggSegments.push_back(newSegment); while (pageBuffer[*it].oggSegments.size()){ pageBuffer[*it].sendTo(myConn, 0); //granule position of 0 } } sentHeader = true; }
int CMuseDataFile::readFromFile(char *filename) { FILE * file=fopen(filename,"rt"); if(file==NULL){ MUSEERROR(err_OpenInputFile,0,0); return -1; } if(parseInit()!=0){ fclose(file); MUSEERROR(err_ParsingAbborted,0,0); return -1; } else { if(parseLoop(file)!=0){ fclose(file); MUSEERROR(err_ParsingAbborted,0,0); return -1; } } fclose(file); MUSEERROR(err_ParsingCompleted,0,0); return 0; }