]> git.ipfire.org Git - thirdparty/bash.git/blame - input.h
Bash-4.2 patch 16
[thirdparty/bash.git] / input.h
CommitLineData
726f6388 1/* input.h -- Structures and unions used for reading input. */
3185942a
JA
2
3/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
726f6388
JA
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
3185942a
JA
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.
726f6388 11
3185942a
JA
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.
726f6388 16
3185942a
JA
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*/
726f6388 20
ccc6cda3
JA
21#if !defined (_INPUT_H_)
22#define _INPUT_H_
726f6388
JA
23
24#include "stdc.h"
25
26/* Function pointers can be declared as (Function *)foo. */
ccc6cda3
JA
27#if !defined (_FUNCTION_DEF)
28# define _FUNCTION_DEF
726f6388
JA
29typedef int Function ();
30typedef void VFunction ();
f73dda09
JA
31typedef char *CPFunction (); /* no longer used */
32typedef char **CPPFunction (); /* no longer used */
726f6388
JA
33#endif /* _FUNCTION_DEF */
34
f73dda09
JA
35typedef int sh_cget_func_t __P((void)); /* sh_ivoidfunc_t */
36typedef int sh_cunget_func_t __P((int)); /* sh_intfunc_t */
37
ccc6cda3 38enum stream_type {st_none, st_stdin, st_stream, st_string, st_bstream};
726f6388
JA
39
40#if defined (BUFFERED_INPUT)
726f6388
JA
41
42/* Possible values for b_flag. */
cce855bc
JA
43#undef B_EOF
44#undef B_ERROR /* There are some systems with this define */
45#undef B_UNBUFF
46
28ef6c31
JA
47#define B_EOF 0x01
48#define B_ERROR 0x02
49#define B_UNBUFF 0x04
50#define B_WASBASHINPUT 0x08
495aee44 51#define B_TEXT 0x10
726f6388
JA
52
53/* A buffered stream. Like a FILE *, but with our own buffering and
54 synchronization. Look in input.c for the implementation. */
55typedef struct BSTREAM
56{
f73dda09 57 int b_fd;
726f6388 58 char *b_buffer; /* The buffer that holds characters read. */
cce855bc 59 size_t b_size; /* How big the buffer is. */
f73dda09
JA
60 size_t b_used; /* How much of the buffer we're using, */
61 int b_flag; /* Flag values. */
62 size_t b_inputp; /* The input pointer, index into b_buffer. */
726f6388
JA
63} BUFFERED_STREAM;
64
cce855bc 65#if 0
726f6388 66extern BUFFERED_STREAM **buffers;
cce855bc 67#endif
726f6388
JA
68
69extern int default_buffered_input;
70
71#endif /* BUFFERED_INPUT */
72
73typedef union {
74 FILE *file;
75 char *string;
76#if defined (BUFFERED_INPUT)
77 int buffered_fd;
78#endif
79} INPUT_STREAM;
80
81typedef struct {
ccc6cda3 82 enum stream_type type;
726f6388
JA
83 char *name;
84 INPUT_STREAM location;
f73dda09
JA
85 sh_cget_func_t *getter;
86 sh_cunget_func_t *ungetter;
726f6388
JA
87} BASH_INPUT;
88
89extern BASH_INPUT bash_input;
90
7117c2d2
JA
91/* Functions from parse.y whose use directly or indirectly depends on the
92 definitions in this file. */
726f6388 93extern void initialize_bash_input __P((void));
f73dda09 94extern void init_yy_io __P((sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM));
7117c2d2 95extern char *yy_input_name __P((void));
726f6388 96extern void with_input_from_stdin __P((void));
f73dda09
JA
97extern void with_input_from_string __P((char *, const char *));
98extern void with_input_from_stream __P((FILE *, const char *));
ccc6cda3
JA
99extern void push_stream __P((int));
100extern void pop_stream __P((void));
101extern int stream_on_stack __P((enum stream_type));
726f6388
JA
102extern char *read_secondary_line __P((int));
103extern int find_reserved_word __P((char *));
726f6388 104extern void gather_here_documents __P((void));
0628567a 105extern void execute_variable_command __P((char *, char *));
726f6388 106
bb70624e
JA
107extern int *save_token_state __P((void));
108extern void restore_token_state __P((int *));
109
ccc6cda3 110/* Functions from input.c */
f73dda09
JA
111extern int getc_with_restart __P((FILE *));
112extern int ungetc_with_restart __P((int, FILE *));
ccc6cda3 113
726f6388
JA
114#if defined (BUFFERED_INPUT)
115/* Functions from input.c. */
28ef6c31
JA
116extern int fd_is_bash_input __P((int));
117extern int set_bash_input_fd __P((int));
118extern int save_bash_input __P((int, int));
726f6388
JA
119extern int check_bash_input __P((int));
120extern int duplicate_buffered_stream __P((int, int));
121extern BUFFERED_STREAM *fd_to_buffered_stream __P((int));
cce855bc 122extern BUFFERED_STREAM *set_buffered_stream __P((int, BUFFERED_STREAM *));
726f6388
JA
123extern BUFFERED_STREAM *open_buffered_stream __P((char *));
124extern void free_buffered_stream __P((BUFFERED_STREAM *));
125extern int close_buffered_stream __P((BUFFERED_STREAM *));
126extern int close_buffered_fd __P((int));
127extern int sync_buffered_stream __P((int));
128extern int buffered_getchar __P((void));
129extern int buffered_ungetchar __P((int));
130extern void with_input_from_buffered_stream __P((int, char *));
131#endif /* BUFFERED_INPUT */
132
ccc6cda3 133#endif /* _INPUT_H_ */