+++ /dev/null
-/*ident "@(#)cfront:lib/stream/out.c 1.5" */
-/*
- C++ stream i/o source
-
- out.c
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <iostream>
-
-
-const int cb_size = 1024;
-const int fld_size = 256;
-
-/* a circular formating buffer */
-static char formbuf[cb_size]; // some slob for form overflow
-static char* bfree=formbuf;
-static char* max = &formbuf[cb_size-1];
-
-char* chr(register int 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(const 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(const char* format ...)
-{
- int* ap = (int*)((char*)&format+sizeof(char*)); // not completely general
- register char* buf = bfree;
- if (max < buf+fld_size) buf = formbuf;
-
- int ll = sprintf(buf,format,ap[0],ap[1],ap[2],ap[3],ap[4],ap[5],ap[6],ap[7],ap[8],ap[9]); // too few words copied
- if (0<ll && ll<cb_size) // length
- ;
- else if (buf<(char*)ll && (char*)ll<buf+cb_size)// pointer to trailing 0
- ll = (char*)ll - buf;
- else
- ll = strlen(buf);
- if (fld_size < ll) exit(10);
- bfree = buf+ll+1;
- return buf;
-}
-
-const char a10 = 'a'-10;
-
-char* hex(long ii, int 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
- register unsigned long i = ii;
-
- if (w) {
- do {
- int h = i&0xf;
- *p-- = (h < 10) ? h+'0' : h+a10;
- } while (--w && (i>>=4));
- while (0<w--) *p-- = ' ';
- }
- else {
- do {
- int h = i&0xf;
- *p-- = (h < 10) ? h+'0' : h+a10;
- } while (i>>=4);
- }
- return p+1;
-}
-
-char* oct(long ii, 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
- register unsigned long i = ii;
-
- if (w) {
- do {
- int h = i&07;
- *p-- = h + '0';
- } while (--w && (i>>=3));
- while (0<w--) *p-- = ' ';
- }
- else {
- do {
- int h = i&07;
- *p-- = h+'0';
- } while (i>>=3);
- }
-
- return p+1;
-}
-
-char* dec(long i, int w)
-{
- int sign = 0;
- if (i < 0) {
- sign = 1;
- i = -i;
- }
- 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 {
- int h = i%10;
- *p-- = h + '0';
- } while (--w && (i/=10));
- if (sign && 0<w) {
- w--;
- *p-- = '-';
- }
- while (0<w--) *p-- = ' ';
- }
- else {
- do {
- int h = i%10;
- *p-- = h + '0';
- } while (i/=10);
- if (sign) *p-- = '-';
- }
-
- return p+1;
-}
-