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