1/* input.h -- Structures and unions used for reading input. */ 2 3/* Copyright (C) 1993-2009 Free Software Foundation, Inc. 4 5 This file is part of GNU Bash, the Bourne Again SHell. 6 7 Bash is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 Bash is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Bash. If not, see <http://www.gnu.org/licenses/>. 19*/ 20 21#if !defined (_INPUT_H_) 22#define _INPUT_H_ 23 24#include "stdc.h" 25 26/* Function pointers can be declared as (Function *)foo. */ 27#if !defined (_FUNCTION_DEF) 28# define _FUNCTION_DEF 29typedef int Function (); 30typedef void VFunction (); 31typedef char *CPFunction (); /* no longer used */ 32typedef char **CPPFunction (); /* no longer used */ 33#endif /* _FUNCTION_DEF */ 34 35typedef int sh_cget_func_t __P((void)); /* sh_ivoidfunc_t */ 36typedef int sh_cunget_func_t __P((int)); /* sh_intfunc_t */ 37 38enum stream_type {st_none, st_stdin, st_stream, st_string, st_bstream}; 39 40#if defined (BUFFERED_INPUT) 41 42/* Possible values for b_flag. */ 43#undef B_EOF 44#undef B_ERROR /* There are some systems with this define */ 45#undef B_UNBUFF 46 47#define B_EOF 0x01 48#define B_ERROR 0x02 49#define B_UNBUFF 0x04 50#define B_WASBASHINPUT 0x08 51 52/* A buffered stream. Like a FILE *, but with our own buffering and 53 synchronization. Look in input.c for the implementation. */ 54typedef struct BSTREAM 55{ 56 int b_fd; 57 char *b_buffer; /* The buffer that holds characters read. */ 58 size_t b_size; /* How big the buffer is. */ 59 size_t b_used; /* How much of the buffer we're using, */ 60 int b_flag; /* Flag values. */ 61 size_t b_inputp; /* The input pointer, index into b_buffer. */ 62} BUFFERED_STREAM; 63 64#if 0 65extern BUFFERED_STREAM **buffers; 66#endif 67 68extern int default_buffered_input; 69 70#endif /* BUFFERED_INPUT */ 71 72typedef union { 73 FILE *file; 74 char *string; 75#if defined (BUFFERED_INPUT) 76 int buffered_fd; 77#endif 78} INPUT_STREAM; 79 80typedef struct { 81 enum stream_type type; 82 char *name; 83 INPUT_STREAM location; 84 sh_cget_func_t *getter; 85 sh_cunget_func_t *ungetter; 86} BASH_INPUT; 87 88extern BASH_INPUT bash_input; 89 90/* Functions from parse.y whose use directly or indirectly depends on the 91 definitions in this file. */ 92extern void initialize_bash_input __P((void)); 93extern void init_yy_io __P((sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM)); 94extern char *yy_input_name __P((void)); 95extern void with_input_from_stdin __P((void)); 96extern void with_input_from_string __P((char *, const char *)); 97extern void with_input_from_stream __P((FILE *, const char *)); 98extern void push_stream __P((int)); 99extern void pop_stream __P((void)); 100extern int stream_on_stack __P((enum stream_type)); 101extern char *read_secondary_line __P((int)); 102extern int find_reserved_word __P((char *)); 103extern void gather_here_documents __P((void)); 104extern void execute_variable_command __P((char *, char *)); 105 106extern int *save_token_state __P((void)); 107extern void restore_token_state __P((int *)); 108 109/* Functions from input.c */ 110extern int getc_with_restart __P((FILE *)); 111extern int ungetc_with_restart __P((int, FILE *)); 112 113#if defined (BUFFERED_INPUT) 114/* Functions from input.c. */ 115extern int fd_is_bash_input __P((int)); 116extern int set_bash_input_fd __P((int)); 117extern int save_bash_input __P((int, int)); 118extern int check_bash_input __P((int)); 119extern int duplicate_buffered_stream __P((int, int)); 120extern BUFFERED_STREAM *fd_to_buffered_stream __P((int)); 121extern BUFFERED_STREAM *set_buffered_stream __P((int, BUFFERED_STREAM *)); 122extern BUFFERED_STREAM *open_buffered_stream __P((char *)); 123extern void free_buffered_stream __P((BUFFERED_STREAM *)); 124extern int close_buffered_stream __P((BUFFERED_STREAM *)); 125extern int close_buffered_fd __P((int)); 126extern int sync_buffered_stream __P((int)); 127extern int buffered_getchar __P((void)); 128extern int buffered_ungetchar __P((int)); 129extern void with_input_from_buffered_stream __P((int, char *)); 130#endif /* BUFFERED_INPUT */ 131 132#endif /* _INPUT_H_ */ 133