/* @(#) out.c 1.2 1/27/86 17:48:03 */ /*ident "@(#)cfront:lib/stream/out.c 1.2"*/ /* C++ stream i/o source out.c */ sprintf(char*,char* ...); strlen(char*); #include "stream.h" #include #define MAXOSTREAMS 20 char cout_buf[BUFSIZE]; filebuf cout_file(1,cout_buf,BUFSIZE); // UNIX output stream 1 ostream cout(&cout_file); char cerr_buf[1]; filebuf cerr_file(2,cerr_buf,0); // UNIX output stream 2 // 0-length to ensure unbuffered output ostream cerr(&cerr_file); const cb_size = 512; const fld_size = 128; /* a circular formating buffer */ static char formbuf[cb_size]; static char* bfree=formbuf; static char* max = &formbuf[cb_size-1]; char* chr(register i, register int w) /* note: chr(0) is "" */ { register char* buf = bfree; if (w<=0 || fld_size>=4)); while (w--) *p-- = ' '; } else { do { register h = i&0xf; *p-- = (h < 10) ? h+'0' : h+a10; } while (i>>=4); } return p+1; } char* oct(long i, int w) { int m = sizeof(long)*3; /* maximum oct digits for a long */ if (w<0 || fld_size>=3)); while (w--) *p-- = ' '; } else { do { register h = i&07; *p-- = h+'0'; } while (i>>=3); } return p+1; } char* dec(long i, int w) { int m = sizeof(long)*3; /* maximum dec digits for a long */ if (w<0 || fld_sizesputc(*s++) == EOF) { state |= _eof|_fail; break; } while (*s); // if (*(s-1)=='\n') flush(); /* fudge due to lack of destructors for static*/ return *this; } ostream& ostream.operator<<(long i) { register streambuf* nbp = bp; register long j; char buf[32]; register char *p = buf; if (state) return *this; if (i < 0) { nbp->sputc('-'); j = -i; } else j = i; do { *p++ = '0' + j%10; j = j/10; } while (j > 0); do { if (nbp->sputc(*--p) == EOF) { state |= _fail | _eof; break; } } while (p != buf); return *this; } ostream& ostream.put(char c) { if (state) return *this; if (bp->sputc(c) == EOF) state |= _eof|_fail; return *this; } ostream& ostream.operator<<(double d) { register streambuf* nbp = bp; char buf[32]; register char *p = buf; if (state) return *this; sprintf(buf,"%g",d); while (*p != '\0') if (nbp->sputc(*p++) == EOF) { state |= _eof|_fail; break; } return *this; } ostream& ostream.operator<<(streambuf& b) { register streambuf* nbp = bp; register int c; if (state) return *this; c = b.sgetc(); while (c != EOF) { if (nbp->sputc(c) == EOF) { state |= _eof|_fail; break; } c = b.snextc(); } return *this; }