Subversion Repositories HelenOS

Rev

Rev 2714 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2714 cejka 1
/*  $NetBSD: output.h,v 1.14 1998/01/31 12:37:55 christos Exp $ */
2
 
3
/*-
4
 * Copyright (c) 1991, 1993
5
 *  The Regents of the University of California.  All rights reserved.
6
 *
7
 * This code is derived from software contributed to Berkeley by
8
 * Kenneth Almquist.
9
 *
10
 * Redistribution and use in source and binary forms, with or without
11
 * modification, are permitted provided that the following conditions
12
 * are met:
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 * 2. Redistributions in binary form must reproduce the above copyright
16
 *    notice, this list of conditions and the following disclaimer in the
17
 *    documentation and/or other materials provided with the distribution.
18
 * 3. All advertising materials mentioning features or use of this software
19
 *    must display the following acknowledgement:
20
 *  This product includes software developed by the University of
21
 *  California, Berkeley and its contributors.
22
 * 4. Neither the name of the University nor the names of its contributors
23
 *    may be used to endorse or promote products derived from this software
24
 *    without specific prior written permission.
25
 *
26
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36
 * SUCH DAMAGE.
37
 *
38
 *  @(#)output.h    8.2 (Berkeley) 5/4/95
39
 */
40
 
41
#ifndef OUTPUT_INCL
42
 
43
#ifdef __STDC__
44
#include <stdarg.h>
45
#else
46
#include <varargs.h>
47
#endif
48
#if defined(_GNU_SOURCE) && !defined(__UCLIBC__)
49
#include <stdio.h>
50
#endif
51
 
52
struct output {
53
#if defined(_GNU_SOURCE) && !defined(__UCLIBC__)
54
    FILE *stream;
55
#endif
56
    char *nextc;
57
    int nleft;
58
    char *buf;
59
    int bufsize;
60
    int fd;
61
    short flags;
62
};
63
 
64
extern struct output output;
65
extern struct output errout;
66
extern struct output memout;
67
extern struct output *out1;
68
extern struct output *out2;
69
 
70
void outstr (const char *, struct output *);
71
#ifndef _GNU_SOURCE
72
void emptyoutbuf (struct output *);
73
#endif
74
void flushall (void);
75
#ifndef _GNU_SOURCE
76
void flushout (struct output *);
77
#endif
78
void freestdout (void);
79
void outfmt (struct output *, const char *, ...)
80
    __attribute__((__format__(__printf__,2,3)));
81
void out1fmt (const char *, ...)
82
    __attribute__((__format__(__printf__,1,2)));
83
#if !defined(__GLIBC__) && !defined(__UCLIBC__)
84
void dprintf (const char *, ...)
85
    __attribute__((__format__(__printf__,1,2)));
86
#endif
87
void fmtstr (char *, size_t, const char *, ...)
88
    __attribute__((__format__(__printf__,3,4)));
89
#ifndef _GNU_SOURCE
90
void doformat (struct output *, const char *, va_list);
91
#endif
92
int xwrite (int, const char *, int);
93
#if defined(_GNU_SOURCE) && !defined(__UCLIBC__)
94
void initstreams (void);
95
void openmemout (void);
96
void closememout (void);
97
 
98
#define outc(c, o)  putc(c, (o)->stream)
99
#define flushout(o) fflush((o)->stream)
100
#define doformat(d, f, a)   vfprintf((d)->stream, f, a)
101
#else
102
#define outc(c, file)   (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
103
#endif
104
#define out1c(c)    outc(c, out1)
105
#define out2c(c)    outc(c, out2)
106
#define out1str(s)  outstr(s, out1)
107
#define out2str(s)  outstr(s, out2)
108
 
109
#define OUTPUT_INCL
110
#endif