]> git.ipfire.org Git - thirdparty/bash.git/blame - input.h
Bash-5.0 patch 4: the wait builtin without arguments only waits for known children...
[thirdparty/bash.git] / input.h
CommitLineData
726f6388 1/* input.h -- Structures and unions used for reading input. */
3185942a 2
d233b485 3/* Copyright (C) 1993-2018 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
d233b485 52#define B_SHAREDBUF 0x20 /* shared input buffer */
726f6388
JA
53
54/* A buffered stream. Like a FILE *, but with our own buffering and
55 synchronization. Look in input.c for the implementation. */
56typedef struct BSTREAM
57{
f73dda09 58 int b_fd;
726f6388 59 char *b_buffer; /* The buffer that holds characters read. */
cce855bc 60 size_t b_size; /* How big the buffer is. */
f73dda09
JA
61 size_t b_used; /* How much of the buffer we're using, */
62 int b_flag; /* Flag values. */
63 size_t b_inputp; /* The input pointer, index into b_buffer. */
726f6388
JA
64} BUFFERED_STREAM;
65
cce855bc 66#if 0
726f6388 67extern BUFFERED_STREAM **buffers;
cce855bc 68#endif
726f6388
JA
69
70extern int default_buffered_input;
d233b485 71extern int bash_input_fd_changed;
726f6388
JA
72
73#endif /* BUFFERED_INPUT */
74
75typedef union {
76 FILE *file;
77 char *string;
78#if defined (BUFFERED_INPUT)
79 int buffered_fd;
80#endif
81} INPUT_STREAM;
82
83typedef struct {
ccc6cda3 84 enum stream_type type;
726f6388
JA
85 char *name;
86 INPUT_STREAM location;
f73dda09
JA
87 sh_cget_func_t *getter;
88 sh_cunget_func_t *ungetter;
726f6388
JA
89} BASH_INPUT;
90
91extern BASH_INPUT bash_input;
92
7117c2d2
JA
93/* Functions from parse.y whose use directly or indirectly depends on the
94 definitions in this file. */
726f6388 95extern void initialize_bash_input __P((void));
f73dda09 96extern void init_yy_io __P((sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM));
7117c2d2 97extern char *yy_input_name __P((void));
726f6388 98extern void with_input_from_stdin __P((void));
f73dda09
JA
99extern void with_input_from_string __P((char *, const char *));
100extern void with_input_from_stream __P((FILE *, const char *));
ccc6cda3
JA
101extern void push_stream __P((int));
102extern void pop_stream __P((void));
103extern int stream_on_stack __P((enum stream_type));
726f6388
JA
104extern char *read_secondary_line __P((int));
105extern int find_reserved_word __P((char *));
726f6388 106extern void gather_here_documents __P((void));
0628567a 107extern void execute_variable_command __P((char *, char *));
726f6388 108
bb70624e
JA
109extern int *save_token_state __P((void));
110extern void restore_token_state __P((int *));
111
ccc6cda3 112/* Functions from input.c */
f73dda09
JA
113extern int getc_with_restart __P((FILE *));
114extern int ungetc_with_restart __P((int, FILE *));
ccc6cda3 115
726f6388
JA
116#if defined (BUFFERED_INPUT)
117/* Functions from input.c. */
28ef6c31
JA
118extern int fd_is_bash_input __P((int));
119extern int set_bash_input_fd __P((int));
120extern int save_bash_input __P((int, int));
726f6388
JA
121extern int check_bash_input __P((int));
122extern int duplicate_buffered_stream __P((int, int));
123extern BUFFERED_STREAM *fd_to_buffered_stream __P((int));
cce855bc 124extern BUFFERED_STREAM *set_buffered_stream __P((int, BUFFERED_STREAM *));
726f6388
JA
125extern BUFFERED_STREAM *open_buffered_stream __P((char *));
126extern void free_buffered_stream __P((BUFFERED_STREAM *));
127extern int close_buffered_stream __P((BUFFERED_STREAM *));
128extern int close_buffered_fd __P((int));
129extern int sync_buffered_stream __P((int));
130extern int buffered_getchar __P((void));
131extern int buffered_ungetchar __P((int));
132extern void with_input_from_buffered_stream __P((int, char *));
133#endif /* BUFFERED_INPUT */
134
ccc6cda3 135#endif /* _INPUT_H_ */