/*ident "@(#)cls4:lib/stream/in.c 1.3" */ /******************************************************************************* C++ source for the C++ Language System, Release 3.0. This product is a new release of the original cfront developed in the computer science research center of AT&T Bell Laboratories. Copyright (c) 1993 UNIX System Laboratories, Inc. Copyright (c) 1991, 1992 AT&T and UNIX System Laboratories, Inc. Copyright (c) 1984, 1989, 1990 AT&T. All Rights Reserved. THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of AT&T and UNIX System Laboratories, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. *******************************************************************************/ #include #include #define ISTREAM istream void ISTREAM::eatwhite () { register streambuf *nbp = bp; register int c = nbp->sgetc(); while (isspace(c)) c = nbp->snextc(); if (c == EOF) setstate(eofbit); } void ISTREAM::xget(char* c) { register streambuf* sbp = bp ; if ( !ipfx(1) ) return ; x_gcount = 0 ; register int newc = sbp->sbumpc() ; if ( newc == EOF ) { setstate(failbit|eofbit) ; return ; } x_gcount = 1 ; *c = newc ; } istream& ISTREAM::operator>>(register char* s) { /* get string */ register int w = width(0) ; if ( flags()&skipws ) { // We don't know a maximum number of required // characters if ( !ipfx(0) ) return *this ; } else if ( !ipfx(w) ) { return *this ; } register streambuf *nbp = bp; register int c = nbp->sgetc(); if (c == EOF) setstate(failbit|eofbit) ; if ( w > 0 ) { while (!isspace(c) && c != EOF && --w > 0 ) { *s++ = c; c = nbp->snextc(); } } else { while (!isspace(c) && c != EOF ) { *s++ = c; c = nbp->snextc(); } } *s = '\0'; if (c == EOF) setstate(eofbit) ; return *this; } istream& ISTREAM::operator>>(unsigned char* s) { return *this >> (char*)s ; } istream& ISTREAM::putback(register char c) { if ( !good() ) return *this ; if ( bp->sputbackc(c) == EOF ) setstate(badbit) ; return *this; } istream& ISTREAM::rs_complicated(unsigned char& c) { if ( ipfx(0) ) { if ( bp->in_avail() ) { c = bp->sbumpc() ; } else xget((char*)&c) ; } return *this ; } istream& ISTREAM::rs_complicated(char& c) { if ( ipfx(0) ) { if ( bp->in_avail() ) { c = bp->sbumpc() ; } else xget((char*)&c) ; } return *this ; } istream& ISTREAM::get_complicated(unsigned char& c) { if ( ipfx(1) && bp->in_avail()) { x_gcount = 1 ; c = bp->sbumpc() ; } else { xget((char*)&c) ; } return *this ; } istream& ISTREAM::get_complicated(char& c) { if ( ipfx(1) && bp->in_avail()) { x_gcount = 1 ; c = bp->sbumpc() ; } else { xget(&c) ; } return *this ; } /* int ISTREAM::get_complicated() { int c ; if ( !ipfx(1) ) return EOF ; else { c = bp->sbumpc() ; if ( c == EOF ) setstate(eofbit) ; return c ; } } */