159243Sobrien/*
259243Sobrien * sh.decls.h	 External declarations from sh*.c
359243Sobrien */
459243Sobrien/*-
559243Sobrien * Copyright (c) 1980, 1991 The Regents of the University of California.
659243Sobrien * All rights reserved.
759243Sobrien *
859243Sobrien * Redistribution and use in source and binary forms, with or without
959243Sobrien * modification, are permitted provided that the following conditions
1059243Sobrien * are met:
1159243Sobrien * 1. Redistributions of source code must retain the above copyright
1259243Sobrien *    notice, this list of conditions and the following disclaimer.
1359243Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1459243Sobrien *    notice, this list of conditions and the following disclaimer in the
1559243Sobrien *    documentation and/or other materials provided with the distribution.
16100616Smp * 3. Neither the name of the University nor the names of its contributors
1759243Sobrien *    may be used to endorse or promote products derived from this software
1859243Sobrien *    without specific prior written permission.
1959243Sobrien *
2059243Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2159243Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2259243Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2359243Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2459243Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2559243Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2659243Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2759243Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2859243Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2959243Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3059243Sobrien * SUCH DAMAGE.
3159243Sobrien */
3259243Sobrien#ifndef _h_sh_decls
3359243Sobrien#define _h_sh_decls
3459243Sobrien
3559243Sobrien/*
3659243Sobrien * sh.c
3759243Sobrien */
38167465Smpextern	Char	 	 *gethdir	(const Char *);
39167465Smpextern	void		  dosource	(Char **, struct command *);
40167465Smpextern	void		  exitstat	(void);
41167465Smpextern	void		  goodbye	(Char **, struct command *);
42167465Smpextern	void		  importpath	(Char *);
43167465Smpextern	void		  initdesc	(void);
44167465Smpextern	void		  pintr		(void);
45167465Smpextern	void		  pintr1	(int);
46167465Smpextern	void		  phup		(void);
47167465Smpextern	void		  process	(int);
48167465Smpextern	void		  untty		(void);
4959243Sobrien#ifdef PROF
50231990Smpextern	void		  done		(int) __attribute__((__noreturn__));
5159243Sobrien#else
52231990Smpextern	void		  xexit		(int) __attribute__((__noreturn__));
5359243Sobrien#endif
54195609Smpextern	int		  grabpgrp	(int, pid_t);
5559243Sobrien
5659243Sobrien/*
5759243Sobrien * sh.dir.c
5859243Sobrien */
59167465Smpextern	void		  dinit		(Char *);
60167465Smpextern	void		  dodirs	(Char **, struct command *);
61167465Smpextern	Char		 *dcanon	(Char *, Char *);
62167465Smpextern	void		  dtildepr	(Char *);
63167465Smpextern	void		  dtilde	(void);
64167465Smpextern	void		  dochngd	(Char **, struct command *);
65167465Smpextern	Char		 *dnormalize	(const Char *, int);
66167465Smpextern	void		  dopushd	(Char **, struct command *);
67167465Smpextern	void		  dopopd	(Char **, struct command *);
68167465Smpextern	void		  dfree		(struct directory *);
69167465Smpextern	void		  dsetstack	(void);
70167465Smpextern	const Char	 *getstakd	(int);
71167465Smpextern	void		  recdirs	(Char *, int);
72167465Smpextern	void		  loaddirs	(Char *);
7359243Sobrien
7459243Sobrien/*
7559243Sobrien * sh.dol.c
7659243Sobrien */
77167465Smpextern	void		  Dfix		(struct command *);
78167465Smpextern	Char		 *Dfix1		(Char *);
79167465Smpextern	void		  heredoc	(Char *);
80316957Sdchaginextern  Char		 *randsuf	(void);
8159243Sobrien
8259243Sobrien/*
8359243Sobrien * sh.err.c
8459243Sobrien */
85231990Smpextern	void		  reset		(void) __attribute__((__noreturn__));
86167465Smpextern	void		  cleanup_push_internal(void *, void (*fn) (void *)
87167465Smp#ifdef CLEANUP_DEBUG
88167465Smp						, const char *, size_t
89167465Smp#define cleanup_push(v, f) cleanup_push_internal(v, f, __FILE__, __LINE__)
90167465Smp#else
91167465Smp#define cleanup_push(v, f) cleanup_push_internal(v, f)
92167465Smp#endif
93167465Smp);
94231990Smpextern	int		  cleanup_reset(void);
95167465Smpextern	void		  cleanup_ignore(void *);
96231990Smpextern	void		  cleanup_until(void *);
97167465Smpextern	void		  cleanup_until_mark(void);
98167465Smpextern	size_t		  cleanup_push_mark(void);
99167465Smpextern	void		  cleanup_pop_mark(size_t);
100167465Smpextern	void		  open_cleanup(void *);
101167465Smpextern	void		  opendir_cleanup(void *);
102167465Smpextern	void		  sigint_cleanup(void *);
103167465Smpextern	void		  sigprocmask_cleanup(void *);
104167465Smpextern	void		  xfree_indirect(void *);
105167465Smpextern	void		  errinit	(void);
106167465Smpextern	void		  seterror	(unsigned int, ...);
107231990Smpextern	void		  fixerror	(void);
108231990Smpextern	void		  stderror	(unsigned int, ...)
109231990Smp    __attribute__((__noreturn__));
11059243Sobrien
11159243Sobrien/*
11259243Sobrien * sh.exec.c
11359243Sobrien */
114167465Smpextern	void		  doexec	(struct command *, int);
115167465Smpextern	void		  dohash	(Char **, struct command *);
116167465Smpextern	void		  dounhash	(Char **, struct command *);
117167465Smpextern	void		  execash	(Char **, struct command *);
118167465Smpextern	void		  hashstat	(Char **, struct command *);
119167465Smpextern	void		  xechoit	(Char **);
120167465Smpextern	int		  executable	(const Char *, const Char *, int);
121167465Smpextern	int		  tellmewhat	(struct wordent *, Char **);
122167465Smpextern	void		  dowhere	(Char **, struct command *);
123167465Smpextern	int		  find_cmd	(Char *, int);
12459243Sobrien
12559243Sobrien/*
12659243Sobrien * sh.exp.c
12759243Sobrien */
128231990Smpextern  Char		 *filetest      (Char *, Char ***, int);
129231990Smpextern	tcsh_number_t 	  expr		(Char ***);
130231990Smpextern	tcsh_number_t	  exp0		(Char ***, int);
13159243Sobrien
13259243Sobrien/*
13359243Sobrien * sh.file.c
13459243Sobrien */
135100616Smp#if defined(FILEC) && defined(TIOCSTI)
136167465Smpextern	size_t		  tenex		(Char *, size_t);
13759243Sobrien#endif
13859243Sobrien
13959243Sobrien/*
14059243Sobrien * sh.func.c
14159243Sobrien */
142167465Smpextern	void		  tsetenv	(const Char *, const Char *);
143167465Smpextern	void		  Unsetenv	(Char *);
144167465Smpextern	void		  doalias	(Char **, struct command *);
145167465Smpextern	void		  dobreak	(Char **, struct command *);
146167465Smpextern	void		  docontin	(Char **, struct command *);
147167465Smpextern	void		  doecho	(Char **, struct command *);
148167465Smpextern	void		  doelse	(Char **, struct command *);
149167465Smpextern	void		  doend		(Char **, struct command *);
150167465Smpextern	void		  doeval	(Char **, struct command *);
151167465Smpextern	void		  doexit	(Char **, struct command *);
152167465Smpextern	void		  doforeach	(Char **, struct command *);
153167465Smpextern	void		  doglob	(Char **, struct command *);
154167465Smpextern	void		  dogoto	(Char **, struct command *);
155167465Smpextern	void		  doif		(Char **, struct command *);
156167465Smpextern	void		  dolimit	(Char **, struct command *);
157167465Smpextern	void		  dologin	(Char **, struct command *);
158167465Smpextern	void		  dologout	(Char **, struct command *);
15959243Sobrien#ifdef NEWGRP
160167465Smpextern	void		  donewgrp	(Char **, struct command *);
16159243Sobrien#endif
162167465Smpextern	void		  donohup	(Char **, struct command *);
163167465Smpextern	void		  dohup		(Char **, struct command *);
164167465Smpextern	void		  doonintr	(Char **, struct command *);
165167465Smpextern	void		  doprintenv	(Char **, struct command *);
166167465Smpextern	void		  dorepeat	(Char **, struct command *);
167167465Smpextern	void		  dofiletest	(Char **, struct command *);
168167465Smpextern	void		  dosetenv	(Char **, struct command *);
169167465Smpextern	void		  dosuspend	(Char **, struct command *);
170167465Smpextern	void		  doswbrk	(Char **, struct command *);
171167465Smpextern	void		  doswitch	(Char **, struct command *);
172167465Smpextern	void		  doumask	(Char **, struct command *);
173167465Smpextern	void		  dounlimit	(Char **, struct command *);
174167465Smpextern	void		  dounsetenv	(Char **, struct command *);
175167465Smpextern	void		  dowhile	(Char **, struct command *);
176167465Smpextern	void		  dozip		(Char **, struct command *);
177167465Smpextern	void		  func		(struct command *,
178167465Smp					 const struct biltins *);
179167465Smpextern	void		  gotolab	(Char *);
180167465Smpextern const struct biltins *isbfunc	(struct command *);
181167465Smpextern	void		  prvars	(void);
182167465Smpextern	int		  srchx		(Char *);
183167465Smpextern	void		  unalias	(Char **, struct command *);
184167465Smpextern	void		  wfree		(void);
185167465Smpextern	void		  dobuiltins	(Char **, struct command *);
186167465Smpextern	void		  reexecute	(struct command *);
187316957Sdchaginextern  int		  getYN		(const char *);
18859243Sobrien
18959243Sobrien/*
19059243Sobrien * sh.glob.c
19159243Sobrien */
192167465Smpextern	Char	 	 *globequal	(Char *);
193167465Smpextern	Char		**dobackp	(Char *, int);
194167465Smpextern	Char		 *globone	(Char *, int);
195167465Smpextern	int		  Gmatch	(const Char *, const Char *);
196167465Smpextern	int		  Gnmatch	(const Char *, const Char *,
197167465Smp					 const Char **);
198167465Smpextern	Char		**globall	(Char **, int);
199167465Smpextern	Char		**glob_all_or_error(Char **);
200167465Smpextern	void		  rscan		(Char **, void (*)(Char));
201167465Smpextern	int		  tglob		(Char **);
202167465Smpextern	void		  trim		(Char **);
203145479Smp
204167465Smp#if !defined(WINNT_NATIVE) && defined(NLS_CATALOGS)
205167465Smpextern	char		 *xcatgets	(nl_catd, int, int, const char *);
206167465Smp#if defined(HAVE_ICONV) && defined(HAVE_NL_LANGINFO)
207167465Smpextern	char		 *iconv_catgets	(nl_catd, int, int, const char *);
208145479Smp#endif
209145479Smp#endif
210167465Smpextern	void		  nlsinit	(void);
211167465Smpextern	void	          nlsclose	(void);
212167465Smpextern  int	  	  t_pmatch	(const Char *, const Char *,
213167465Smp					 const Char **, int);
21459243Sobrien
21559243Sobrien/*
21659243Sobrien * sh.hist.c
21759243Sobrien */
218167465Smpextern	void	 	  dohist	(Char **, struct command *);
219231990Smpextern  struct Hist 	 *enthist	(int, struct wordent *, int, int, int);
220167465Smpextern	void	 	  savehist	(struct wordent *, int);
221167465Smpextern	char		 *fmthist	(int, ptr_t);
222167465Smpextern	void		  rechist	(Char *, int);
223167465Smpextern	void		  loadhist	(Char *, int);
224231990Smpextern	void		  displayHistStats(const char *);
225316957Sdchaginextern	void		  sethistory	(int);
22659243Sobrien
22759243Sobrien/*
22859243Sobrien * sh.init.c
22959243Sobrien */
230167465Smpextern	void		  mesginit	(void);
23159243Sobrien
23259243Sobrien/*
23359243Sobrien * sh.lex.c
23459243Sobrien */
235167465Smpextern	void		  addla		(Char *);
236167465Smpextern	void		  bseek		(struct Ain *);
237167465Smpextern	void		  btell		(struct Ain *);
238167465Smpextern	void		  btoeof	(void);
239167465Smpextern	void		  copylex	(struct wordent *, struct wordent *);
240167465Smpextern	Char		 *domod		(Char *, Char);
241316957Sdchaginextern	void		  initlex	(struct wordent *);
242167465Smpextern	void		  freelex	(struct wordent *);
243167465Smpextern	int		  lex		(struct wordent *);
244167465Smpextern	void		  lex_cleanup	(void *);
245167465Smpextern	void		  prlex		(struct wordent *);
246167465Smpextern	eChar		  readc		(int);
247167465Smpextern	void		  settell	(void);
248167465Smpextern	void		  unreadc	(Char);
249316957Sdchaginextern	ssize_t		  wide_read	(int, Char *, size_t, int);
25059243Sobrien
25159243Sobrien
25259243Sobrien/*
25359243Sobrien * sh.misc.c
25459243Sobrien */
255167465Smpextern	int		  any		(const char *, Char);
256167465Smpextern	Char		**blkcpy	(Char **, Char **);
257167465Smpextern	void		  blkfree	(Char **);
258167465Smpextern	void		  blk_cleanup	(void *);
259167465Smpextern	void		  blk_indirect_cleanup(void *);
260167465Smpextern	int		  blklen	(Char **);
261167465Smpextern	void		  blkpr		(Char *const *);
262167465Smpextern	Char		 *blkexpand	(Char *const *);
263167465Smpextern	Char		**blkspl	(Char **, Char **);
264167465Smpextern	void		  closem	(void);
26559243Sobrien#ifndef CLOSE_ON_EXEC
266167465Smpextern  void 		  closech	(void);
26759243Sobrien#endif /* !CLOSE_ON_EXEC */
268167465Smpextern	Char		**copyblk	(Char **);
269167465Smpextern	int		  dcopy		(int, int);
270167465Smpextern	int		  dmove		(int, int);
271167465Smpextern	void		  donefds	(void);
272167465Smpextern	Char		  lastchr	(Char *);
273167465Smpextern	void		  lshift	(Char **, int);
274167465Smpextern	int		  number	(Char *);
275167465Smpextern	int		  prefix	(const Char *, const Char *);
276167465Smpextern	Char		**saveblk	(Char **);
277167465Smpextern	void		  setzero	(void *, size_t);
278167465Smpextern	Char		 *strip		(Char *);
279167465Smpextern	Char		 *quote		(Char *);
280167465Smpextern	const Char	 *quote_meta	(struct Strbuf *, const Char *);
281231990Smp#ifndef SHORT_STRINGS
282167465Smpextern	char		 *strnsave	(const char *, size_t);
283231990Smp#endif
284167465Smpextern	char		 *strsave	(const char *);
285231990Smpextern	void		  udvar		(Char *) __attribute__((__noreturn__));
28659243Sobrien#ifndef POSIX
287167465Smpextern  char   	  	 *strstr	(const char *, const char *);
28859243Sobrien#endif /* !POSIX */
289167465Smpextern	char		 *strspl	(const char *, const char *);
290167465Smpextern	char		 *strend	(const char *);
291167465Smpextern	char		 *areadlink	(const char *);
292167465Smpextern	void		  xclose	(int);
293167465Smpextern	void		  xclosedir	(DIR *);
294167465Smpextern	int		  xcreat	(const char *, mode_t);
295167465Smpextern	struct group	 *xgetgrgid	(gid_t);
296167465Smpextern	struct passwd	 *xgetpwnam	(const char *);
297167465Smpextern	struct passwd	 *xgetpwuid	(uid_t);
298167465Smpextern	int		  xopen		(const char *, int, ...);
299167465Smpextern	ssize_t		  xread		(int, void *, size_t);
300167465Smpextern	int		  xtcsetattr	(int, int, const struct termios *);
301167465Smpextern	ssize_t		  xwrite	(int, const void *, size_t);
30259243Sobrien
30359243Sobrien/*
30459243Sobrien * sh.parse.c
30559243Sobrien */
306167465Smpextern	void		  alias		(struct wordent *);
307167465Smpextern	void		  freesyn	(struct command *);
308167465Smpextern struct command 	 *syntax	(const struct wordent *,
309167465Smp					 const struct wordent *, int);
310167465Smpextern	void		  syntax_cleanup(void *);
31159243Sobrien
31259243Sobrien/*
31359243Sobrien * sh.print.c
31459243Sobrien */
315167465Smpextern	void		  drainoline	(void);
316167465Smpextern	void		  flush		(void);
31759243Sobrien#ifdef BSDTIMES
318167465Smpextern	void		  pcsecs	(unsigned long);
31959243Sobrien#else /* !BSDTIMES */
32059243Sobrien# ifdef POSIX
321167465Smpextern	void		  pcsecs	(clock_t);
32259243Sobrien# else /* !POSIX */
323167465Smpextern	void		  pcsecs	(time_t);
32459243Sobrien# endif /* !POSIX */
32559243Sobrien#endif /* BSDTIMES */
32659243Sobrien#ifdef BSDLIMIT
327167465Smpextern	void		  psecs		(unsigned long);
32859243Sobrien#endif /* BSDLIMIT */
329167465Smpextern	int		  putpure	(int);
330167465Smpextern	int		  putraw	(int);
331167465Smpextern	void		  xputchar	(int);
332145479Smp#ifdef WIDE_STRINGS
333167465Smpextern	void		  putwraw	(Char);
334167465Smpextern	void		  xputwchar	(Char);
335145479Smp#else
336145479Smp# define putwraw(C) putraw(C)
337145479Smp# define xputwchar(C) xputchar(C)
338145479Smp#endif
339167465Smpextern	void		  output_raw_restore(void *);
34059243Sobrien
34159243Sobrien
34259243Sobrien/*
34359243Sobrien * sh.proc.c
34459243Sobrien */
345167465Smpextern	void		  dobg		(Char **, struct command *);
346167465Smpextern	void		  dobg1		(Char **, struct command *);
347167465Smpextern	void		  dofg		(Char **, struct command *);
348167465Smpextern	void		  dofg1		(Char **, struct command *);
349167465Smpextern	void		  dojobs	(Char **, struct command *);
350167465Smpextern	void		  dokill	(Char **, struct command *);
351167465Smpextern	void		  donotify	(Char **, struct command *);
352167465Smpextern	void		  dostop	(Char **, struct command *);
353167465Smpextern	void		  dowait	(Char **, struct command *);
354167465Smpextern	void		  palloc	(pid_t, struct command *);
355167465Smpextern	void		  panystop	(int);
356167465Smpextern	void		  pchild	(void);
357167465Smpextern	void		  pendjob	(void);
358167465Smpextern	pid_t		  pfork		(struct command *, int);
359167465Smpextern	void		  pgetty	(int, pid_t);
360167465Smpextern	void		  pjwait	(struct process *);
361167465Smpextern	void		  pnote		(void);
362167465Smpextern	void		  psavejob	(void);
363167465Smpextern	void		  psavejob_cleanup(void *);
364167465Smpextern	int		  pstart	(struct process *, int);
365167465Smpextern	void		  pwait		(void);
366167465Smpextern  struct process   *pfind		(Char *);
36759243Sobrien
36859243Sobrien/*
36959243Sobrien * sh.sem.c
37059243Sobrien */
371195609Smpextern	void		  execute	(struct command *, volatile int, int *,
372167465Smp					 int *, int);
373167465Smpextern	void		  mypipe	(int *);
37459243Sobrien
37559243Sobrien/*
37659243Sobrien * sh.set.c
37759243Sobrien */
378167465Smpextern	struct varent 	 *adrof1	(const Char *, struct varent *);
379167465Smpextern	void		  doset		(Char **, struct command *);
380167465Smpextern	void		  dolet		(Char **, struct command *);
381231990Smpextern	Char		 *putn		(tcsh_number_t);
382231990Smpextern	tcsh_number_t	  getn		(const Char *);
383167465Smpextern	Char		 *value1	(Char *, struct varent *);
384167465Smpextern	void		  setcopy	(const Char *, const Char *, int);
385167465Smpextern	void		  setv		(const Char *, Char *, int);
386167465Smpextern	void		  set1		(const Char *, Char **,
387167465Smp					 struct varent *, int);
388167465Smpextern	void		  setq		(const Char *, Char **,
389167465Smp					 struct varent *, int);
390167465Smpextern	void		  unset		(Char **, struct command *);
391167465Smpextern	void		  unset1	(Char *[], struct varent *);
392167465Smpextern	void		  unsetv	(Char *);
393231990Smpextern	void		  setNS		(const Char *);
394167465Smpextern	void		  shift		(Char **, struct command *);
395167465Smpextern	void		  plist		(struct varent *, int);
396167465Smpextern	Char		 *unparse	(struct command *);
39759243Sobrien#if defined(DSPMBYTE)
398167465Smpextern	void 		  update_dspmbyte_vars	(void);
399167465Smpextern	void		  autoset_dspmbyte	(const Char *);
40059243Sobrien#endif
401231990Smp#if defined(AUTOSET_KANJI)
402231990Smpextern	void		  autoset_kanji	(void);
403231990Smp#endif
404316957Sdchaginextern	void		  update_wordchars	(void);
40559243Sobrien
40659243Sobrien/*
40759243Sobrien * sh.time.c
40859243Sobrien */
409167465Smpextern	void		  donice	(Char **, struct command *);
410167465Smpextern	void		  dotime	(Char **, struct command *);
41159243Sobrien#ifdef BSDTIMES
412167465Smpextern	void		  prusage	(struct sysrusage *,
413167465Smp					 struct sysrusage *,
414167465Smp					 timeval_t *, timeval_t *);
415167465Smpextern	void		  ruadd		(struct sysrusage *,
416167465Smp					 struct sysrusage *);
41759243Sobrien#else /* BSDTIMES */
41859243Sobrien# ifdef _SEQUENT_
419167465Smpextern	void		  prusage	(struct process_stats *,
420167465Smp					 struct process_stats *,
421167465Smp					 timeval_t *, timeval_t *);
422167465Smpextern	void		  ruadd		(struct process_stats *,
423167465Smp					 struct process_stats *);
42459243Sobrien# else /* !_SEQUENT_ */
42559243Sobrien#  ifdef POSIX
426167465Smpextern	void		  prusage	(struct tms *, struct tms *,
427167465Smp					 clock_t, clock_t);
42859243Sobrien#  else	/* !POSIX */
429167465Smpextern	void		  prusage	(struct tms *, struct tms *,
430167465Smp					 time_t, time_t);
43159243Sobrien#  endif /* !POSIX */
43259243Sobrien# endif	/* !_SEQUENT_ */
43359243Sobrien#endif /* BSDTIMES */
434167465Smpextern	void		  settimes	(void);
43559243Sobrien#if defined(BSDTIMES) || defined(_SEQUENT_)
436167465Smpextern	void		  tvsub		(struct timeval *,
437167465Smp					 struct timeval *,
438167465Smp					 struct timeval *);
43959243Sobrien#endif /* BSDTIMES || _SEQUENT_ */
44059243Sobrien
441167465Smp/*
442167465Smp * tw.parse.c
443167465Smp */
444167465Smpextern	 void		  copyn			(Char *, const Char *, size_t);
445167465Smpextern	 void		  catn			(Char *, const Char *, int);
446167465Smp
44759243Sobrien#endif /* _h_sh_decls */
448