Subversion Repositories HelenOS

Rev

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

  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
  111.