OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.23/] [lcc/] [src/] [output.c] - Diff between revs 4 and 157

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 4 Rev 157
#include "c.h"
#include "c.h"
 
 
static char rcsid[] = "$Id: output.c,v 1.1 2002/08/28 23:12:45 drh Exp $";
static char rcsid[] = "$Id: output.c,v 1.1 2002/08/28 23:12:45 drh Exp $";
 
 
static char *outs(const char *str, FILE *f, char *bp) {
static char *outs(const char *str, FILE *f, char *bp) {
        if (f)
        if (f)
                fputs(str, f);
                fputs(str, f);
        else
        else
                while (*bp = *str++)
                while (*bp = *str++)
                        bp++;
                        bp++;
        return bp;
        return bp;
}
}
 
 
static char *outd(long n, FILE *f, char *bp) {
static char *outd(long n, FILE *f, char *bp) {
        unsigned long m;
        unsigned long m;
        char buf[25], *s = buf + sizeof buf;
        char buf[25], *s = buf + sizeof buf;
 
 
        *--s = '\0';
        *--s = '\0';
        if (n < 0)
        if (n < 0)
                m = -n;
                m = -n;
        else
        else
                m = n;
                m = n;
        do
        do
                *--s = m%10 + '0';
                *--s = m%10 + '0';
        while ((m /= 10) != 0);
        while ((m /= 10) != 0);
        if (n < 0)
        if (n < 0)
                *--s = '-';
                *--s = '-';
        return outs(s, f, bp);
        return outs(s, f, bp);
}
}
 
 
static char *outu(unsigned long n, int base, FILE *f, char *bp) {
static char *outu(unsigned long n, int base, FILE *f, char *bp) {
        char buf[25], *s = buf + sizeof buf;
        char buf[25], *s = buf + sizeof buf;
 
 
        *--s = '\0';
        *--s = '\0';
        do
        do
                *--s = "0123456789abcdef"[n%base];
                *--s = "0123456789abcdef"[n%base];
        while ((n /= base) != 0);
        while ((n /= base) != 0);
        return outs(s, f, bp);
        return outs(s, f, bp);
}
}
void print(const char *fmt, ...) {
void print(const char *fmt, ...) {
        va_list ap;
        va_list ap;
 
 
        va_start(ap, fmt);
        va_start(ap, fmt);
        vfprint(stdout, NULL, fmt, ap);
        vfprint(stdout, NULL, fmt, ap);
        va_end(ap);
        va_end(ap);
}
}
/* fprint - formatted output to  f */
/* fprint - formatted output to  f */
void fprint(FILE *f, const char *fmt, ...) {
void fprint(FILE *f, const char *fmt, ...) {
        va_list ap;
        va_list ap;
 
 
        va_start(ap, fmt);
        va_start(ap, fmt);
        vfprint(f, NULL, fmt, ap);
        vfprint(f, NULL, fmt, ap);
        va_end(ap);
        va_end(ap);
}
}
 
 
/* stringf - formatted output to a saved string */
/* stringf - formatted output to a saved string */
char *stringf(const char *fmt, ...) {
char *stringf(const char *fmt, ...) {
        char buf[1024];
        char buf[1024];
        va_list ap;
        va_list ap;
 
 
        va_start(ap, fmt);
        va_start(ap, fmt);
        vfprint(NULL, buf, fmt, ap);
        vfprint(NULL, buf, fmt, ap);
        va_end(ap);
        va_end(ap);
        return string(buf);
        return string(buf);
}
}
 
 
/* vfprint - formatted output to f or string bp */
/* vfprint - formatted output to f or string bp */
void vfprint(FILE *f, char *bp, const char *fmt, va_list ap) {
void vfprint(FILE *f, char *bp, const char *fmt, va_list ap) {
        for (; *fmt; fmt++)
        for (; *fmt; fmt++)
                if (*fmt == '%')
                if (*fmt == '%')
                        switch (*++fmt) {
                        switch (*++fmt) {
                        case 'd': bp = outd(va_arg(ap, int), f, bp); break;
                        case 'd': bp = outd(va_arg(ap, int), f, bp); break;
                        case 'D': bp = outd(va_arg(ap, long), f, bp); break;
                        case 'D': bp = outd(va_arg(ap, long), f, bp); break;
                        case 'U': bp = outu(va_arg(ap, unsigned long), 10, f, bp); break;
                        case 'U': bp = outu(va_arg(ap, unsigned long), 10, f, bp); break;
                        case 'u': bp = outu(va_arg(ap, unsigned), 10, f, bp); break;
                        case 'u': bp = outu(va_arg(ap, unsigned), 10, f, bp); break;
                        case 'o': bp = outu(va_arg(ap, unsigned), 8, f, bp); break;
                        case 'o': bp = outu(va_arg(ap, unsigned), 8, f, bp); break;
                        case 'X': bp = outu(va_arg(ap, unsigned long), 16, f, bp); break;
                        case 'X': bp = outu(va_arg(ap, unsigned long), 16, f, bp); break;
                        case 'x': bp = outu(va_arg(ap, unsigned), 16, f, bp); break;
                        case 'x': bp = outu(va_arg(ap, unsigned), 16, f, bp); break;
                        case 'f': case 'e':
                        case 'f': case 'e':
                        case 'g': {
                        case 'g': {
                                        static char format[] = "%f";
                                        static char format[] = "%f";
                                        char buf[128];
                                        char buf[128];
                                        format[1] = *fmt;
                                        format[1] = *fmt;
                                        sprintf(buf, format, va_arg(ap, double));
                                        sprintf(buf, format, va_arg(ap, double));
                                        bp = outs(buf, f, bp);
                                        bp = outs(buf, f, bp);
                                  }
                                  }
; break;
; break;
                        case 's': bp = outs(va_arg(ap, char *), f, bp); break;
                        case 's': bp = outs(va_arg(ap, char *), f, bp); break;
                        case 'p': {
                        case 'p': {
                                void *p = va_arg(ap, void *);
                                void *p = va_arg(ap, void *);
                                if (p)
                                if (p)
                                        bp = outs("0x", f, bp);
                                        bp = outs("0x", f, bp);
                                bp = outu((unsigned long)p, 16, f, bp);
                                bp = outu((unsigned long)p, 16, f, bp);
                                break;
                                break;
                                  }
                                  }
                        case 'c': if (f) fputc(va_arg(ap, int), f); else *bp++ = va_arg(ap, int); break;
                        case 'c': if (f) fputc(va_arg(ap, int), f); else *bp++ = va_arg(ap, int); break;
                        case 'S': { char *s = va_arg(ap, char *);
                        case 'S': { char *s = va_arg(ap, char *);
                                    int n = va_arg(ap, int);
                                    int n = va_arg(ap, int);
                                    if (s)
                                    if (s)
                                        for ( ; n-- > 0; s++)
                                        for ( ; n-- > 0; s++)
                                                if (f) (void)putc(*s, f); else *bp++ = *s;
                                                if (f) (void)putc(*s, f); else *bp++ = *s;
 } break;
 } break;
                        case 'k': { int t = va_arg(ap, int);
                        case 'k': { int t = va_arg(ap, int);
                                    static char *tokens[] = {
                                    static char *tokens[] = {
#define xx(a,b,c,d,e,f,g) g,
#define xx(a,b,c,d,e,f,g) g,
#define yy(a,b,c,d,e,f,g) g,
#define yy(a,b,c,d,e,f,g) g,
#include "token.h"
#include "token.h"
                                    };
                                    };
                                    assert(tokens[t&0177]);
                                    assert(tokens[t&0177]);
                                    bp = outs(tokens[t&0177], f, bp);
                                    bp = outs(tokens[t&0177], f, bp);
 } break;
 } break;
                        case 't': { Type ty = va_arg(ap, Type);
                        case 't': { Type ty = va_arg(ap, Type);
                                    assert(f);
                                    assert(f);
                                    outtype(ty ? ty : voidtype, f);
                                    outtype(ty ? ty : voidtype, f);
 } break;
 } break;
                        case 'w': { Coordinate *p = va_arg(ap, Coordinate *);
                        case 'w': { Coordinate *p = va_arg(ap, Coordinate *);
                                    if (p->file && *p->file) {
                                    if (p->file && *p->file) {
                                        bp = outs(p->file, f, bp);
                                        bp = outs(p->file, f, bp);
                                        bp = outs(":", f, bp);
                                        bp = outs(":", f, bp);
                                    }
                                    }
                                    bp = outd(p->y, f, bp);
                                    bp = outd(p->y, f, bp);
 } break;
 } break;
                        case 'I': { int n = va_arg(ap, int);
                        case 'I': { int n = va_arg(ap, int);
                                    while (--n >= 0)
                                    while (--n >= 0)
                                        if (f) (void)putc(' ', f); else *bp++ = ' ';
                                        if (f) (void)putc(' ', f); else *bp++ = ' ';
 } break;
 } break;
                        default:  if (f) (void)putc(*fmt, f); else *bp++ = *fmt; break;
                        default:  if (f) (void)putc(*fmt, f); else *bp++ = *fmt; break;
                        }
                        }
                else if (f)
                else if (f)
                        (void)putc(*fmt, f);
                        (void)putc(*fmt, f);
                else
                else
                        *bp++ = *fmt;
                        *bp++ = *fmt;
        if (!f)
        if (!f)
                *bp = '\0';
                *bp = '\0';
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.