⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 out.c

📁 c 语言编译器 源代码- c compiler
💻 C
字号:
/* @(#) 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 <common.h>#define MAXOSTREAMS 20char cout_buf[BUFSIZE];filebuf cout_file(1,cout_buf,BUFSIZE);	// UNIX output stream 1ostream cout(&cout_file);char cerr_buf[1];filebuf cerr_file(2,cerr_buf,0);	// UNIX output stream 2					// 0-length to ensure unbuffered outputostream 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<w) w = 1;	w++;				/* space for trailing 0 */	if (max < buf+w) buf = formbuf;	bfree = buf+w;	char * res = buf;	w -= 2;				/* pad */	while (w--) *buf++ = ' ';	if (i<0 || 127<i) i = ' ';	*buf++ = i;	*buf = 0;	return res;}char* str(char* s, register int w){	register char* buf = bfree;	int ll = strlen(s);	if (w<=0 || fld_size<w) w = ll;	if (w < ll) ll = w;	w++;				/* space for traling 0 */	if (max < buf+w) buf = formbuf;	bfree = buf+w;	char* res = buf;	w -= (ll+1);			/* pad */	while (w--) *buf++ = ' ';	while (*s) *buf++ = *s++;	*buf = 0;	return res;}char* form(char* format ...){	register* ap = (int*)&format;	register char* buf = bfree;	if (max < buf+fld_size) buf = formbuf;	register ll = sprintf(buf,format,ap[1],ap[2],ap[3],ap[4],ap[5],ap[6],ap[7],ap[8]);	if (0<ll && ll<1024)				/* length */		;	else if (buf<(char*)ll && (char*)ll<buf+1024)	/* pointer to trailing 0 */		ll = (char*)ll - buf;	else		ll = strlen(buf);	if (fld_size < ll) exit(10);	bfree += (ll+1);	return buf;}const char a10 = 'a'-10;char* hex(long i, register w){	int m = sizeof(long)*2;		/* maximum hex digits for a long */	if (w<0 || fld_size<w) w = 0;	int sz = (w?w:m)+1;	register char* buf = bfree;	if (max < buf+sz) buf = formbuf;	register char* p = buf+sz;	bfree = p+1;	*p-- = 0;			/* trailing 0 */	if (w) {		do {			register h = i&0xf;			*p-- = (h < 10) ? h+'0' : h+a10;		} while (w-- && (i>>=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<w) w = 0;	int sz = (w?w:m)+1;	register char* buf = bfree;	if (max < buf+sz) buf = formbuf;	register char* p = buf+sz;	bfree = p+1;	*p-- = 0;			/* trailing 0 */	if (w) {		do {			register h = i&07;			*p-- = h+'0';		} while (w-- && (i>>=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_size<w) w = 0;	int sz = (w?w:m)+1;	register char* buf = bfree;	if (max < buf+sz) buf = formbuf;	register char* p = buf+sz;	bfree = p+1;	*p-- = 0;			/* trailing 0 */	if (w) {		do {			register h = i%10;			*p-- = h + '0';		} while (w-- && (i/=10));		while (w--) *p-- = ' ';	}	else {		do {			register h = i%10;			*p-- = h + '0';		} while (i/=10);	}	return p+1;}ostream& ostream.operator<<(char* s){	register streambuf* nbp = bp;	if (state) return *this;	if (*s == 0) return *this;	do		if (nbp->sputc(*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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -