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

📄 stream.c

📁 早期freebsd实现
💻 C
字号:
#include <stdarg.h>#include "ioprivate.h"#include "stream.h"#include "strstream.h"static char Buffer[_G_BUFSIZ];#define EndBuffer (Buffer+_G_BUFSIZ)static char* next_chunk = Buffer; // Start of available part of Buffer.char* form(const char* format, ...){    int space_left = EndBuffer - next_chunk;    // If less that 25% of the space is available start over.    if (space_left < (_G_BUFSIZ>>2))	next_chunk = Buffer;    char* buf = next_chunk;    strstreambuf stream(buf, EndBuffer-buf-1, buf);    va_list ap;    va_start(ap, format);    int count = stream.vform(format, ap);    va_end(ap);    stream.sputc(0);    next_chunk = buf + stream.pcount();    return buf;}#define u_long unsigned longstatic char* itoa(unsigned long i, int size, int neg, int base){    // Conservative estimate: If base==2, might need 8 characters    // for each input byte, but normally 3 is plenty.    int needed = size ? size	: (base >= 8 ? 3 : 8) * sizeof(unsigned long) + 2;    int space_left = EndBuffer - next_chunk;    if (space_left <= needed)	next_chunk = Buffer; // start over.    char* buf = next_chunk;    register char* ptr = buf+needed+1;    next_chunk = ptr;    if (needed < (2+neg) || ptr > EndBuffer)	return NULL;    *--ptr = 0;        if (i == 0)	*--ptr = '0';    while (i != 0 && ptr > buf) {	int ch = i % base;	i = i / base;	if (ch >= 10)	    ch += 'a' - 10;	else	    ch += '0';	*--ptr = ch;    }    if (neg)	*--ptr = '-';    if (size == 0)	return ptr;    while (ptr > buf)	*--ptr = ' ';    return buf;}char* dec(long i, int len /* = 0 */){    if (i >= 0) return itoa((unsigned long)i, len, 0, 10);    else return itoa((unsigned long)(-i), len, 1, 10);}char* dec(int i, int len /* = 0 */){    if (i >= 0) return itoa((unsigned long)i, len, 0, 10);    else return itoa((unsigned long)(-i), len, 1, 10);}char* dec(unsigned long i, int len /* = 0 */){    return itoa(i, len, 0, 10);}char* dec(unsigned int i, int len /* = 0 */){    return itoa(i, len, 0, 10);}char* hex(long i, int len /* = 0 */){    return itoa((unsigned long)i, len, 0, 16);}char* hex(int i, int len /* = 0 */){    return itoa((unsigned long)i, len, 0, 16);}char* hex(unsigned long i, int len /* = 0 */){    return itoa(i, len, 0, 16);}char* hex(unsigned int i, int len /* = 0 */){    return itoa(i, len, 0, 16);}char* oct(long i, int len /* = 0 */){    return itoa((unsigned long)i, len, 0, 8);}char* oct(int i, int len /* = 0 */){    return itoa((unsigned long)i, len, 0, 8);}char* oct(unsigned long i, int len /* = 0 */){    return itoa(i, len, 0, 8);}char* oct(unsigned int i, int len /* = 0 */){    return itoa(i, len, 0, 8);}

⌨️ 快捷键说明

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