void ExtractAddressFromLine(char *finder,char **storeto,char **storetonick) { if(finder==NULL) { *storeto=*storetonick=NULL; return; } while(WS(finder)) finder++; if((*finder)!='<') { char *finderend=finder+1; do { if(ENDLINEWS(finderend)) //after endline information continues finderend+=2; while(!ENDLINE(finderend) && !EOS(finderend)) finderend++; //seek to the end of line or to the end of string }while(ENDLINEWS(finderend)); finderend--; while(WS(finderend) || ENDLINE(finderend)) finderend--; //find the end of text, no whitespace if(*finderend!='>') //not '>' at the end of line CopyToHeader(finder,finderend+1,storeto,MIME_MAIL); else //at the end of line, there's '>' { char *finder2=finderend; while((*finder2!='<') && (finder2>finder)) finder2--; //go to matching '<' or to the start CopyToHeader(finder2,finderend+1,storeto,MIME_MAIL); if(*finder2=='<') //if we found '<', the rest copy as from nick { finder2--; while(WS(finder2) || ENDLINE(finder2)) finder2--; //parse whitespace CopyToHeader(finder,finder2+1,storetonick,MIME_MAIL); //and store nickname } } } else { char *finderend=finder+1; do { if(ENDLINEWS(finderend)) //after endline information continues finderend+=2; while(!ENDLINE(finderend) && (*finderend!='>') && !EOS(finderend)) finderend++; //seek to the matching < or to the end of line or to the end of string }while(ENDLINEWS(finderend)); CopyToHeader(finder,finderend+1,storeto,MIME_MAIL); //go to first '>' or to the end and copy finder=finderend+1; while(WS(finder)) finder++; //parse whitespace if(!ENDLINE(finder) && !EOS(finder)) //if there are chars yet, it's nick { finderend=finder+1; while(!ENDLINE(finderend) && !EOS(finderend)) finderend++; //seek to the end of line or to the end of string finderend--; while(WS(finderend)) finderend--; //find the end of line, no whitespace CopyToHeader(finder,finderend+1,storetonick,MIME_MAIL); } } }
int Context::NotifyVideoEOS(StreamVideo* pSource) { if (m_bEOSVideo) return 0; #if 0 odbgstream os; os << "mux::eosvideo" << endl; #endif m_bEOSVideo = true; if (m_file.GetStream() == 0) __noop; else if ((m_pAudio == 0) || m_bEOSAudio) { for (;;) { if ((m_pVideo != 0) && !m_pVideo->GetFrames().empty()) CreateNewCluster(0); else if ((m_pAudio != 0) && !m_pAudio->GetFrames().empty()) CreateNewClusterAudioOnly(); else break; } } return EOS(pSource); }
unsigned long Token:: line () const { if (*this == eos) throw EOS (); return line_; }
Token:: operator char () const { if (*this == eos) throw EOS (); return traits::to_char_type (c_); }
void OMXAudioPlayer::WaitCompletion() { //ofLogVerbose(__func__) << "OMXAudioPlayer::WaitCompletion"; if(!decoder) { return; } unsigned int nTimeOut = 2.0f * 1000; while(nTimeOut) { if(EOS()) { ofLog(OF_LOG_VERBOSE, "%s::%s - got eos\n", "OMXAudioPlayer", __func__); break; } if(nTimeOut == 0) { ofLog(OF_LOG_ERROR, "%s::%s - wait for eos timed out\n", "OMXAudioPlayer", __func__); break; } omxClock->sleep(50); nTimeOut -= 50; } }
void ExtractStringFromLine(char *finder,char **storeto) { if(finder==NULL) { *storeto=NULL; return; } while(WS(finder)) finder++; char *finderend=finder; do { if(ENDLINEWS(finderend)) finderend++; //after endline information continues while(!ENDLINE(finderend) && !EOS(finderend)) finderend++; }while(ENDLINEWS(finderend)); finderend--; while(WS(finderend)) finderend--; //find the end of line, no whitespace CopyToHeader(finder,finderend+1,storeto,MIME_PLAIN); }
HRESULT CBufferFilterOutputPin::DeliverEndOfStream() { CallQueue(EOS()); }
void WINAPI TranslateHeaderFcn(char *stream,int len,struct CMimeItem **head) { try { char *finder=stream; char *prev1,*prev2,*prev3; struct CMimeItem *Item=NULL; while(finder<=(stream+len)) { while(ENDLINEWS(finder)) finder++; //at the start of line if (DOTLINE(finder+1)) //at the end of stream break; prev1=finder; while(*finder != ':' && !EOS(finder)) finder++; if (!EOS(finder)) prev2=finder++; else break; while(WS(finder) && !EOS(finder)) finder++; if (!EOS(finder)) prev3=finder; else break; do { if (ENDLINEWS(finder)) finder+=2; //after endline information continues while(!ENDLINE(finder) && !EOS(finder)) finder++; }while(ENDLINEWS(finder)); if (Item != NULL) { if (NULL==(Item->Next=new struct CMimeItem)) break; Item=Item->Next; } else { Item = new CMimeItem; *head = Item; } Item->Next=NULL; Item->name=new char [prev2-prev1+1]; lstrcpynA(Item->name,prev1,prev2-prev1+1); Item->value=new char [finder-prev3+1]; lstrcpynA(Item->value,prev3,finder-prev3+1); if (EOS(finder)) break; finder++; if (ENDLINE(finder)) { finder++; if (ENDLINE(finder)) { // end of headers. message body begins finder++; if (ENDLINE(finder))finder++; prev1 = finder; while (!DOTLINE(finder+1))finder++; if (ENDLINE(finder))finder--; prev2 = finder; if (prev2>prev1) { // yes, we have body if (NULL==(Item->Next=new struct CMimeItem)) break; // Cant create new item?! Item=Item->Next; Item->Next=NULL;//just in case; Item->name=new char[5]; strncpy(Item->name,"Body",5); Item->value=new char [prev2-prev1]; lstrcpynA(Item->value,prev1,prev2-prev1-1); } break; // there is nothing else } } } } catch(...) { MessageBoxA(NULL,"Translate header error","",0); } }
//================================================================================== int32 InPlaceParser::ProcessLine(int32 lineno,char *line,InPlaceParserInterface *callback) { int32 ret = 0; const char *argv[MAXARGS]; int32 argc = 0; char *foo = line; while ( !EOS(*foo) && argc < MAXARGS ) { foo = SkipSpaces(foo); // skip any leading spaces if ( EOS(*foo) ) break; if ( *foo == mQuoteChar ) // if it is an open quote { ++foo; if ( argc < MAXARGS ) { argv[argc++] = foo; } while ( !EOS(*foo) && *foo != mQuoteChar ) ++foo; if ( !EOS(*foo) ) { *foo = 0; // replace close quote with zero byte EOS ++foo; } } else { foo = AddHard(argc,argv,foo); // add any hard separators, skip any spaces if ( IsNonSeparator(*foo) ) // add non-hard argument. { bool quote = false; if ( *foo == mQuoteChar ) { ++foo; quote = true; } if ( argc < MAXARGS ) { argv[argc++] = foo; } if ( quote ) { while (*foo && *foo != mQuoteChar ) ++foo; if ( *foo ) *foo = 32; } // continue..until we hit an eos .. while ( !EOS(*foo) ) // until we hit EOS { if ( IsWhiteSpace(*foo) ) // if we hit a space, stomp a zero byte, and exit { *foo = 0; ++foo; break; } else if ( IsHard(*foo) ) // if we hit a hard separator, stomp a zero byte and store the hard separator argument { const char *hard = &mHardString[*foo*2]; *foo = 0; if ( argc < MAXARGS ) { argv[argc++] = hard; } ++foo; break; } ++foo; } // end of while loop... } } } if ( argc ) { ret = callback->ParseLine(lineno, argc, argv ); } return ret; }
//================================================================================== char * InPlaceParser::SkipSpaces(char *foo) { while ( !EOS(*foo) && IsWhiteSpace(*foo) ) ++foo; return foo; }
String TextStreamReader::ReadLine() { // TODO // Probably it is possible to group Stream::ReadString with this, // both use similar algorythm, difference is only in terminator chars if (!_stream) { return ""; } String str; int chars_read_last = 0; int line_break_position = -1; // Read a chunk of memory to buffer and seek for null-terminator, // if not found, repeat until EOS const int single_chunk_length = 3000; const int max_chars = 5000000; char char_buffer[single_chunk_length + 1]; do { chars_read_last = _stream->Read(char_buffer, single_chunk_length); char *seek_ptr = char_buffer; int c; for (c = 0; c < chars_read_last && *seek_ptr != '\n'; ++c, ++seek_ptr); int append_length = 0; int str_len = str.GetLength(); if (c < chars_read_last && *seek_ptr == '\n') { line_break_position = seek_ptr - char_buffer; if (str_len < max_chars) { append_length = Math::Min(line_break_position, max_chars - str_len); } } else { append_length = Math::Min(chars_read_last, max_chars - str_len); } if (append_length > 0) { char_buffer[append_length] = '\0'; str.Append(char_buffer); } } while (!EOS() && line_break_position < 0); // If null-terminator was found make sure stream is positioned at the next // byte after line end if (line_break_position >= 0) { // CHECKME: what if stream does not support seek? need an algorythm fork for that // the seek offset should be negative _stream->Seek(kSeekCurrent, line_break_position - chars_read_last + 1 /* beyond line feed */); } str.TrimRight('\r'); // skip carriage-return, if any return str; }
int solve_sudoku(char** sudoku) { // create a copy of the original sudoku - replace 'x' with '0' char** copy = allocate_sudoku(); copy_sudoku(sudoku, copy); for (int i = 0; i < 9; ++i) for (int j = 0; j < 9; ++j) if (copy[i][j] == 'x') copy[i][j] = '0'; unsigned int nx = 0; unsigned int ny = 0; unsigned int state = sudoku[nx][ny] == EMPTY_SQUARE ? STATE_SOLVE : STATE_STEP_FORWARD; while (1) { switch (state) { case STATE_SOLVE: if (copy[nx][ny] == '9') { // reset current square and go back copy[nx][ny] = '0'; state = STATE_STEP_BACKWARD; } else { // assign a value and check if there is a conflict ++copy[nx][ny]; if (sudoku_correct(copy, nx, ny)) { state = STATE_STEP_FORWARD; } } break; case STATE_STEP_FORWARD: if (EOS(nx, ny)) { // the end of the sudoku was reached without a conflict state = STATE_SOLVED; } else { // go forward until a non-empty square was reached INC_COORD(nx, ny) if (sudoku[nx][ny] == EMPTY_SQUARE) state = STATE_SOLVE; } break; case STATE_STEP_BACKWARD: if (BOS(nx, ny)) { // the beginning of the Sudoku was reached therefore it is irresolvable state = STATE_IRRESOLVABLE; } else { // go backward until a non-empty square was reached DEC_COORD(nx, ny) if (sudoku[nx][ny] == EMPTY_SQUARE) state = STATE_SOLVE; } break; case STATE_SOLVED: copy_sudoku(copy, sudoku); unallocate_sudoku(copy); return 0; case STATE_IRRESOLVABLE: copy_sudoku(copy, sudoku); unallocate_sudoku(copy); return 1; } } }
void ParseAPart(APartDataType *data) { size_t len = strlen(data->Src); try { char *finder=data->Src; char *prev1,*prev2,*prev3; while(finder<=(data->Src+len)) { while(ENDLINEWS(finder)) finder++; //at the start of line if (finder>data->Src){ if (*(finder-2)=='\r' || *(finder-2)=='\n') *(finder-2)=0; if (*(finder-1)=='\r' || *(finder-1)=='\n') *(finder-1)=0; } prev1=finder; while(*finder!=':' && !EOS(finder) && !ENDLINE(finder)) finder++; if (ENDLINE(finder)||EOS(finder)){ // no ":" in the line? here the body begins; data->body = prev1; break; } prev2=finder++; while(WS(finder) && !EOS(finder)) finder++; if(!EOS(finder)) prev3=finder; else break; do { if(ENDLINEWS(finder)) finder+=2; //after endline information continues while(!ENDLINE(finder) && !EOS(finder)) finder++; }while(ENDLINEWS(finder)); if (!_strnicmp(prev1,"Content-type",prev2-prev1)){ data->ContType = prev3; } else if (!_strnicmp(prev1,"Content-Transfer-Encoding",prev2-prev1)){ data->TransEnc = prev3; } if(EOS(finder)) break; finder++; if(ENDLINE(finder)) { finder++; if(ENDLINE(finder)) { // end of headers. message body begins if (finder>data->Src){ if (*(finder-2)=='\r' || *(finder-2)=='\n') *(finder-2)=0; if (*(finder-1)=='\r' || *(finder-1)=='\n') *(finder-1)=0; } finder++; if(ENDLINE(finder))finder++; prev1 = finder; while (!EOS(finder+1))finder++; if (ENDLINE(finder))finder--; prev2 = finder; if (prev2>prev1){ // yes, we have body data->body = prev1; } break; // there is nothing else } } } } catch(...) { MessageBox(NULL,_T("Translate header error"),_T(""),0); } if (data->body) data->bodyLen = (int)strlen(data->body); }