char *TerminalReadText(char *RetStr, int Flags, STREAM *S) { int inchar, len=0; char outchar; inchar=STREAMReadChar(S); while (inchar != EOF) { if (Flags & TERM_SHOWTEXT) outchar=inchar & 0xFF; if (Flags & TERM_SHOWSTARS) { if ((outchar & 0xFF) =='\n') outchar=inchar & 0xFF; else if ((outchar & 0xFF) =='\b') outchar=inchar & 0xFF; else outchar='*'; } if (Flags & TERM_SHOWTEXTSTARS) { switch (inchar) { case '\n': case '\r': case 0x08: break; default: if (len > 0) STREAMWriteString("\x08*",S); break; } outchar=inchar & 0xFF; } STREAMWriteBytes(S, &outchar,1); STREAMFlush(S); if (inchar == '\n') break; if (inchar == '\r') break; RetStr=AddCharToBuffer(RetStr,len++, inchar & 0xFF); inchar=STREAMReadChar(S); } return(RetStr); }
char *STREAMReadToMultiTerminator(char *Buffer, STREAM *S, char *Terms) { int inchar, len=0; char *Tempptr; Tempptr=CopyStr(Buffer,""); inchar=STREAMReadChar(S); //All error conditions are negative, but '0' can just mean //no more data to read while (inchar > -1) { //if ((len % 100)== 0) Tempptr=realloc(Tempptr,(len/100 +1) *100 +2); //*(Tempptr+len)=inchar; if (inchar > 0) { Tempptr=AddCharToBuffer(Tempptr,len,(char) inchar); len++; if (strchr(Terms,inchar)) break; } inchar=STREAMReadChar(S); } *(Tempptr+len)='\0'; //if ((inchar==EOF) && (errno==ECONNREFUSED)) return(Tempptr); if ( ((inchar==EOF) || (inchar==STREAM_DATA_ERROR)) && (StrLen(Tempptr)==0) ) { free(Tempptr); return(NULL); } return(Tempptr); }
int ProcessIncommingBytes(DownloadContext *CTX) { int inchar, FoundTerm=FALSE, err; inchar=STREAMReadChar(CTX->Input); if (inchar==EOF) return(TRUE); FoundTerm=CheckForTerm(CTX,(char) inchar); while ((inchar !=EOF) && (! FoundTerm)) { if (CTX->TermPos==0) STREAMWriteChar(CTX->Output, (char) inchar); inchar=STREAMReadChar(CTX->Input); err=errno; FoundTerm=CheckForTerm(CTX, (char) inchar); } if (inchar==EOF) return(TRUE); if (FoundTerm) return(TRUE); return(FALSE); }
int STREAMReadBytesToTerm(STREAM *S, char *Buffer, int BuffSize,unsigned char Term) { int inchar, pos=0; inchar=STREAMReadChar(S); while (inchar != EOF) { if (inchar > -1) { Buffer[pos]=inchar; pos++; if (inchar==Term) break; if (pos==BuffSize) break; } inchar=STREAMReadChar(S); } if ((pos==0) && (inchar==EOF)) return(EOF); return(pos); }
char *STREAMReadToTerminator(char *Buffer, STREAM *S,unsigned char Term) { int inchar, len=0; char *Tempptr; Tempptr=CopyStr(Buffer,""); inchar=STREAMReadChar(S); while (inchar != EOF) { //if ((len % 100)== 0) Tempptr=realloc(Tempptr,(len/100 +1) *100 +2); //*(Tempptr+len)=inchar; if (inchar >= 0) { Tempptr=AddCharToBuffer(Tempptr,len,(char) inchar); len++; } else if (inchar !=STREAM_NODATA) break; if (inchar==Term) break; inchar=STREAMReadChar(S); } *(Tempptr+len)='\0'; //if ((inchar==EOF) && (errno==ECONNREFUSED)) return(Tempptr); if ( ((inchar==EOF) || (inchar==STREAM_DATA_ERROR)) && (StrLen(Tempptr)==0) ) { free(Tempptr); return(NULL); } return(Tempptr); }