1/*
2 * This file was generated by the mkinit program.
3 */
4
5#include "mystring.h"
6#include "shell.h"
7#include "init.h"
8#include "eval.h"
9#include "expand.h"
10#include <stdio.h>
11#include "input.h"
12#include "error.h"
13#include "parser.h"
14#include "redir.h"
15#include "trap.h"
16#include "output.h"
17#include "memalloc.h"
18#include "tab.h"
19#include <linenoise/linenoise.h>
20#include <unistd.h>
21#include <sys/types.h>
22#include <sys/stat.h>
23#include "cd.h"
24#include "var.h"
25
26
27
28#undef  ATABSIZE
29#define ATABSIZE 39
30#undef  ARITH_MAX_PREC
31#define ARITH_MAX_PREC 8
32#undef  CD_PHYSICAL
33#define CD_PHYSICAL 1
34#undef  CD_PRINT
35#define CD_PRINT 2
36#undef  CMDTABLESIZE
37#define CMDTABLESIZE 31		/* should be prime */
38#undef  ARB
39#define ARB 1			/* actual size determined at run time */
40#undef  RMESCAPE_ALLOC
41#define RMESCAPE_ALLOC	0x1	/* Allocate a new string */
42#undef  RMESCAPE_GLOB
43#define RMESCAPE_GLOB	0x2	/* Add backslashes for glob */
44#undef  RMESCAPE_GROW
45#define RMESCAPE_GROW	0x8	/* Grow strings instead of stalloc */
46#undef  RMESCAPE_HEAP
47#define RMESCAPE_HEAP	0x10	/* Malloc strings instead of stalloc */
48#undef  QUOTES_ESC
49#define QUOTES_ESC	(EXP_FULL | EXP_CASE | EXP_QPAT)
50#undef  QUOTES_KEEPNUL
51#define QUOTES_KEEPNUL	EXP_TILDE
52#undef  EOF_NLEFT
53#define EOF_NLEFT -99		/* value of parsenleft when EOF pushed back */
54#undef  IBUFSIZ
55#define IBUFSIZ (BUFSIZ + 1)
56#undef  CUR_DELETE
57#define CUR_DELETE 2
58#undef  CUR_RUNNING
59#define CUR_RUNNING 1
60#undef  CUR_STOPPED
61#define CUR_STOPPED 0
62#undef  DOWAIT_NORMAL
63#define DOWAIT_NORMAL 0
64#undef  DOWAIT_BLOCK
65#define DOWAIT_BLOCK 1
66#undef  DOWAIT_WAITCMD
67#define DOWAIT_WAITCMD 2
68#undef  PROFILE
69#define PROFILE 0
70#undef  MINSIZE
71#define MINSIZE SHELL_ALIGN(504)
72#undef  DEFINE_OPTIONS
73#define DEFINE_OPTIONS
74#undef  FAKEEOFMARK
75#define FAKEEOFMARK (char *)1
76#undef  REALLY_CLOSED
77#define REALLY_CLOSED -3	/* fd that was closed and still is */
78#undef  EMPTY
79#define EMPTY -2		/* marks an unused slot in redirtab */
80#undef  CLOSED
81#define CLOSED -1		/* fd opened for redir needs to be closed */
82#undef  S_DFL
83#define S_DFL 1			/* default signal handling (SIG_DFL) */
84#undef  S_CATCH
85#define S_CATCH 2		/* signal is caught */
86#undef  S_IGN
87#define S_IGN 3			/* signal is ignored (SIG_IGN) */
88#undef  S_HARD_IGN
89#define S_HARD_IGN 4		/* signal is ignored permenantly */
90#undef  S_RESET
91#define S_RESET 5		/* temporary - to reset a hard ignored sig */
92#undef  OUTBUFSIZ
93#define OUTBUFSIZ BUFSIZ
94#undef  MEM_OUT
95#define MEM_OUT -3		/* output to dynamically allocated memory */
96#undef  SKIP1
97#define SKIP1	"#-+ 0"
98#undef  SKIP2
99#define SKIP2	"*0123456789"
100#undef  isalnum
101#define isalnum _isalnum
102#undef  iscntrl
103#define iscntrl _iscntrl
104#undef  islower
105#define islower _islower
106#undef  isspace
107#define isspace _isspace
108#undef  isalpha
109#define isalpha _isalpha
110#undef  isdigit
111#define isdigit _isdigit
112#undef  isprint
113#define isprint _isprint
114#undef  isupper
115#define isupper _isupper
116#undef  isblank
117#define isblank _isblank
118#undef  isgraph
119#define isgraph _isgraph
120#undef  ispunct
121#define ispunct _ispunct
122#undef  isxdigit
123#define isxdigit _isxdigit
124#undef  VTABSIZE
125#define VTABSIZE 39
126
127
128
129extern int loopnest;		/* current loop nesting level */
130
131extern struct parsefile basepf;	/* top level input file */
132extern char basebuf[IBUFSIZ];	/* buffer for top level input file */
133
134struct redirtab {
135	struct redirtab *next;
136	int renamed[10];
137};
138
139extern struct redirtab *redirlist;
140
141extern struct localvar_list *localvar_stack;
142extern char defoptindvar[];
143extern char **environ;
144
145
146
147/*
148 * Initialization code.
149 */
150
151void
152init() {
153
154      /* from input.c: */
155      {
156	      basepf.nextc = basepf.buf = basebuf;
157	      basepf.linno = 1;
158      }
159
160      /* from trap.c: */
161      {
162	      sigmode[SIGCHLD - 1] = S_DFL;
163	      setsignal(SIGCHLD);
164      }
165
166      /* from output.c: */
167      {
168#ifdef USE_GLIBC_STDIO
169	      initstreams();
170#endif
171      }
172
173      /* from tab.c: */
174      {
175	  linenoiseSetCompletionCallback(tab_complete);
176      }
177
178      /* from var.c: */
179      {
180	      char **envp;
181	      static char ppid[32] = "PPID=";
182	      const char *p;
183	      struct stat st1, st2;
184
185	      initvar();
186	      for (envp = environ ; *envp ; envp++) {
187		      p = endofname(*envp);
188		      if (p != *envp && *p == '=') {
189			      setvareq(*envp, VEXPORT|VTEXTFIXED);
190		      }
191	      }
192
193	      setvareq(defoptindvar, VTEXTFIXED);
194
195	      fmtstr(ppid + 5, sizeof(ppid) - 5, "%ld", (long) getppid());
196	      setvareq(ppid, VTEXTFIXED);
197
198	      p = lookupvar("PWD");
199	      if (p)
200		      if (*p != '/' || stat(p, &st1) || stat(".", &st2) ||
201			  st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino)
202			      p = 0;
203	      setpwd(p, 0);
204      }
205}
206
207
208
209/*
210 * This routine is called when an error or an interrupt occurs in an
211 * interactive shell and control is returned to the main command loop.
212 */
213
214void
215reset() {
216
217      /* from eval.c: */
218      {
219	      evalskip = 0;
220	      loopnest = 0;
221	      if (savestatus >= 0) {
222		      exitstatus = savestatus;
223		      savestatus = -1;
224	      }
225      }
226
227      /* from expand.c: */
228      {
229	      ifsfree();
230      }
231
232      /* from input.c: */
233      {
234	      /* clear input buffer */
235	      basepf.lleft = basepf.nleft = 0;
236	      popallfiles();
237      }
238
239      /* from redir.c: */
240      {
241	      /*
242	       * Discard all saved file descriptors.
243	       */
244	      unwindredir(0);
245      }
246
247      /* from output.c: */
248      {
249#ifdef notyet
250	      out1 = &output;
251	      out2 = &errout;
252#ifdef USE_GLIBC_STDIO
253	      if (memout.stream != NULL)
254		      __closememout();
255#endif
256	      if (memout.buf != NULL) {
257		      ckfree(memout.buf);
258		      memout.buf = NULL;
259	      }
260#endif
261      }
262
263      /* from var.c: */
264      {
265	      unwindlocalvars(0);
266      }
267}
268