/* -*- Mode: C -*- */ /* stream.h --- customizable stream routines * Copyright (C) 1998, 1999, 2000, 2002 Gary V. Vaughan * Originally by Gary V. Vaughan, 1998 * This file is part of Snprintfv * * Snprintfv is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * Snprintfv program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * As a special exception to the GNU General Public License, if you * distribute this file as part of a program that also links with and * uses the libopts library from AutoGen, you may include it under * the same distribution terms used by the libopts library. */ /* Code: */ #ifndef STREAM_H #define STREAM_H 1 #define STREAM_READABLE (1 << 0) #define STREAM_WRITABLE (1 << 1) /** * SNV_UNLIMITED: * Used to denote that there is no upper limit to the number of characters * that can safely be written to a stream. **/ #define SNV_UNLIMITED (~0UL) #ifdef __cplusplus extern "C" { #if 0 /* This brace is so that emacs can still indent properly: */ } #endif #endif /* __cplusplus */ /** * STREAM: * Data type used to pass details of streams between functions, * much like stdio's %FILE, but more flexible. A %STREAM can be uni- or * bi-directional depending on how it is initialised. **/ typedef struct stream STREAM; /** * StreamPut: * @ch: The character to write to @stream cast to an int. * @stream: The stream being written to. * * Type of the function to put a character in a writeable stream. * * Return value: * The function should return the character written to the * stream, cast to an int if it was written successfully, or * else %EOF, if the write failed. **/ typedef int (*StreamPut) (int ch, STREAM * stream); /** * StreamGet: * @stream: The stream being read from. * * Type of the function to get a character from a readable stream. * * Return value: * The function should return the character read from the * stream, cast to an int if it was read successfully, or * else %EOF, if the read failed. **/ typedef int (*StreamGet) (STREAM * stream); @protos stream.c #ifdef __cplusplus #if 0 /* This brace is so that emacs can still indent properly: */ { #endif } #endif /* __cplusplus */ #endif /* STREAM_H */