blob: 0cbfcbee7b7ea3052962d953e07f761a19f8d3d9 [file] [log] [blame]
Jari Aalto726f6381996-08-26 18:22:31 +00001/* input.h -- Structures and unions used for reading input. */
Jari Aalto31859422009-01-12 13:36:28 +00002
3/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
Jari Aalto726f6381996-08-26 18:22:31 +00004
5 This file is part of GNU Bash, the Bourne Again SHell.
6
Jari Aalto31859422009-01-12 13:36:28 +00007 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.
Jari Aalto726f6381996-08-26 18:22:31 +000011
Jari Aalto31859422009-01-12 13:36:28 +000012 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.
Jari Aalto726f6381996-08-26 18:22:31 +000016
Jari Aalto31859422009-01-12 13:36:28 +000017 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*/
Jari Aalto726f6381996-08-26 18:22:31 +000020
Jari Aaltoccc6cda1996-12-23 17:02:34 +000021#if !defined (_INPUT_H_)
22#define _INPUT_H_
Jari Aalto726f6381996-08-26 18:22:31 +000023
24#include "stdc.h"
25
26/* Function pointers can be declared as (Function *)foo. */
Jari Aaltoccc6cda1996-12-23 17:02:34 +000027#if !defined (_FUNCTION_DEF)
28# define _FUNCTION_DEF
Jari Aalto726f6381996-08-26 18:22:31 +000029typedef int Function ();
30typedef void VFunction ();
Jari Aaltof73dda02001-11-13 17:56:06 +000031typedef char *CPFunction (); /* no longer used */
32typedef char **CPPFunction (); /* no longer used */
Jari Aalto726f6381996-08-26 18:22:31 +000033#endif /* _FUNCTION_DEF */
34
Jari Aaltof73dda02001-11-13 17:56:06 +000035typedef int sh_cget_func_t __P((void)); /* sh_ivoidfunc_t */
36typedef int sh_cunget_func_t __P((int)); /* sh_intfunc_t */
37
Jari Aaltoccc6cda1996-12-23 17:02:34 +000038enum stream_type {st_none, st_stdin, st_stream, st_string, st_bstream};
Jari Aalto726f6381996-08-26 18:22:31 +000039
40#if defined (BUFFERED_INPUT)
Jari Aalto726f6381996-08-26 18:22:31 +000041
42/* Possible values for b_flag. */
Jari Aaltocce855b1998-04-17 19:52:44 +000043#undef B_EOF
44#undef B_ERROR /* There are some systems with this define */
45#undef B_UNBUFF
46
Jari Aalto28ef6c32001-04-06 19:14:31 +000047#define B_EOF 0x01
48#define B_ERROR 0x02
49#define B_UNBUFF 0x04
50#define B_WASBASHINPUT 0x08
Chet Ramey495aee42011-11-22 19:11:26 -050051#define B_TEXT 0x10
Jari Aalto726f6381996-08-26 18:22:31 +000052
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{
Jari Aaltof73dda02001-11-13 17:56:06 +000057 int b_fd;
Jari Aalto726f6381996-08-26 18:22:31 +000058 char *b_buffer; /* The buffer that holds characters read. */
Jari Aaltocce855b1998-04-17 19:52:44 +000059 size_t b_size; /* How big the buffer is. */
Jari Aaltof73dda02001-11-13 17:56:06 +000060 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. */
Jari Aalto726f6381996-08-26 18:22:31 +000063} BUFFERED_STREAM;
64
Jari Aaltocce855b1998-04-17 19:52:44 +000065#if 0
Jari Aalto726f6381996-08-26 18:22:31 +000066extern BUFFERED_STREAM **buffers;
Jari Aaltocce855b1998-04-17 19:52:44 +000067#endif
Jari Aalto726f6381996-08-26 18:22:31 +000068
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 {
Jari Aaltoccc6cda1996-12-23 17:02:34 +000082 enum stream_type type;
Jari Aalto726f6381996-08-26 18:22:31 +000083 char *name;
84 INPUT_STREAM location;
Jari Aaltof73dda02001-11-13 17:56:06 +000085 sh_cget_func_t *getter;
86 sh_cunget_func_t *ungetter;
Jari Aalto726f6381996-08-26 18:22:31 +000087} BASH_INPUT;
88
89extern BASH_INPUT bash_input;
90
Jari Aalto7117c2d2002-07-17 14:10:11 +000091/* Functions from parse.y whose use directly or indirectly depends on the
92 definitions in this file. */
Jari Aalto726f6381996-08-26 18:22:31 +000093extern void initialize_bash_input __P((void));
Jari Aaltof73dda02001-11-13 17:56:06 +000094extern void init_yy_io __P((sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM));
Jari Aalto7117c2d2002-07-17 14:10:11 +000095extern char *yy_input_name __P((void));
Jari Aalto726f6381996-08-26 18:22:31 +000096extern void with_input_from_stdin __P((void));
Jari Aaltof73dda02001-11-13 17:56:06 +000097extern void with_input_from_string __P((char *, const char *));
98extern void with_input_from_stream __P((FILE *, const char *));
Jari Aaltoccc6cda1996-12-23 17:02:34 +000099extern void push_stream __P((int));
100extern void pop_stream __P((void));
101extern int stream_on_stack __P((enum stream_type));
Jari Aalto726f6381996-08-26 18:22:31 +0000102extern char *read_secondary_line __P((int));
103extern int find_reserved_word __P((char *));
Jari Aalto726f6381996-08-26 18:22:31 +0000104extern void gather_here_documents __P((void));
Jari Aalto06285672006-10-10 14:15:34 +0000105extern void execute_variable_command __P((char *, char *));
Jari Aalto726f6381996-08-26 18:22:31 +0000106
Jari Aaltobb706242000-03-17 21:46:59 +0000107extern int *save_token_state __P((void));
108extern void restore_token_state __P((int *));
109
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000110/* Functions from input.c */
Jari Aaltof73dda02001-11-13 17:56:06 +0000111extern int getc_with_restart __P((FILE *));
112extern int ungetc_with_restart __P((int, FILE *));
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000113
Jari Aalto726f6381996-08-26 18:22:31 +0000114#if defined (BUFFERED_INPUT)
115/* Functions from input.c. */
Jari Aalto28ef6c32001-04-06 19:14:31 +0000116extern int fd_is_bash_input __P((int));
117extern int set_bash_input_fd __P((int));
118extern int save_bash_input __P((int, int));
Jari Aalto726f6381996-08-26 18:22:31 +0000119extern int check_bash_input __P((int));
120extern int duplicate_buffered_stream __P((int, int));
121extern BUFFERED_STREAM *fd_to_buffered_stream __P((int));
Jari Aaltocce855b1998-04-17 19:52:44 +0000122extern BUFFERED_STREAM *set_buffered_stream __P((int, BUFFERED_STREAM *));
Jari Aalto726f6381996-08-26 18:22:31 +0000123extern 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
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000133#endif /* _INPUT_H_ */