1*ce7279d8Sjsg /* $OpenBSD: extern.h,v 1.32 2024/05/21 05:00:47 jsg Exp $ */ 26b38f156Smillert /* $NetBSD: extern.h,v 1.8 1996/10/31 23:50:54 christos Exp $ */ 3df930be7Sderaadt 4df930be7Sderaadt /*- 5df930be7Sderaadt * Copyright (c) 1991, 1993 6df930be7Sderaadt * The Regents of the University of California. All rights reserved. 7df930be7Sderaadt * 8df930be7Sderaadt * Redistribution and use in source and binary forms, with or without 9df930be7Sderaadt * modification, are permitted provided that the following conditions 10df930be7Sderaadt * are met: 11df930be7Sderaadt * 1. Redistributions of source code must retain the above copyright 12df930be7Sderaadt * notice, this list of conditions and the following disclaimer. 13df930be7Sderaadt * 2. Redistributions in binary form must reproduce the above copyright 14df930be7Sderaadt * notice, this list of conditions and the following disclaimer in the 15df930be7Sderaadt * documentation and/or other materials provided with the distribution. 1629295d1cSmillert * 3. Neither the name of the University nor the names of its contributors 17df930be7Sderaadt * may be used to endorse or promote products derived from this software 18df930be7Sderaadt * without specific prior written permission. 19df930be7Sderaadt * 20df930be7Sderaadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21df930be7Sderaadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22df930be7Sderaadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23df930be7Sderaadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24df930be7Sderaadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25df930be7Sderaadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26df930be7Sderaadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27df930be7Sderaadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28df930be7Sderaadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29df930be7Sderaadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30df930be7Sderaadt * SUCH DAMAGE. 31df930be7Sderaadt * 32df930be7Sderaadt * @(#)extern.h 8.1 (Berkeley) 5/31/93 33df930be7Sderaadt */ 34df930be7Sderaadt 35df930be7Sderaadt /* 36df930be7Sderaadt * csh.c 37df930be7Sderaadt */ 386a01f4acSderaadt int gethdir(Char *, int); 39c72b5b24Smillert void dosource(Char **, struct command *); 40c72b5b24Smillert void exitstat(void); 41c72b5b24Smillert void goodbye(void); 42c72b5b24Smillert void importpath(Char *); 43c72b5b24Smillert void initdesc(void); 44c72b5b24Smillert void pintr(int); 45c72b5b24Smillert void pintr1(bool); 46c72b5b24Smillert void printprompt(void); 47c72b5b24Smillert void process(bool); 48c72b5b24Smillert void rechist(void); 49c72b5b24Smillert void untty(void); 50c72b5b24Smillert int vis_fputc(int, FILE *); 51c72b5b24Smillert void xexit(int); 52df930be7Sderaadt 53df930be7Sderaadt /* 54df930be7Sderaadt * dir.c 55df930be7Sderaadt */ 56c72b5b24Smillert void dinit(Char *); 57c72b5b24Smillert void dodirs(Char **, struct command *); 58c72b5b24Smillert Char *dcanon(Char *, Char *); 59c72b5b24Smillert void dtildepr(Char *, Char *); 60c72b5b24Smillert void dtilde(void); 61c72b5b24Smillert void dochngd(Char **, struct command *); 62c72b5b24Smillert Char *dnormalize(Char *); 63c72b5b24Smillert void dopushd(Char **, struct command *); 64c72b5b24Smillert void dopopd(Char **, struct command *); 65df930be7Sderaadt struct directory; 66c72b5b24Smillert void dfree(struct directory *); 67df930be7Sderaadt 68df930be7Sderaadt /* 69df930be7Sderaadt * dol.c 70df930be7Sderaadt */ 71c72b5b24Smillert void Dfix(struct command *); 72c72b5b24Smillert Char *Dfix1(Char *); 73c72b5b24Smillert void heredoc(Char *); 74df930be7Sderaadt 75df930be7Sderaadt /* 76df930be7Sderaadt * err.c 77df930be7Sderaadt */ 78c72b5b24Smillert void seterror(int, ...); 79c72b5b24Smillert void stderror(int, ...); 80df930be7Sderaadt 81df930be7Sderaadt /* 82df930be7Sderaadt * exec.c 83df930be7Sderaadt */ 84c72b5b24Smillert void doexec(Char **, struct command *); 85c72b5b24Smillert void dohash(Char **, struct command *); 86c72b5b24Smillert void dounhash(Char **, struct command *); 87c72b5b24Smillert void dowhich(Char **, struct command *); 88c72b5b24Smillert void execash(Char **, struct command *); 89c72b5b24Smillert void hashstat(Char **, struct command *); 90c72b5b24Smillert void xechoit(Char **); 91df930be7Sderaadt 92df930be7Sderaadt /* 93df930be7Sderaadt * exp.c 94df930be7Sderaadt */ 95c72b5b24Smillert int expr(Char ***); 96c72b5b24Smillert int exp0(Char ***, bool); 97df930be7Sderaadt 98df930be7Sderaadt /* 99df930be7Sderaadt * file.c 100df930be7Sderaadt */ 101c72b5b24Smillert int tenex(Char *, int); 102df930be7Sderaadt 103df930be7Sderaadt /* 104df930be7Sderaadt * func.c 105df930be7Sderaadt */ 106c72b5b24Smillert void Setenv(Char *, Char *); 107c72b5b24Smillert void doalias(Char **, struct command *); 108c72b5b24Smillert void dobreak(Char **, struct command *); 109c72b5b24Smillert void docontin(Char **, struct command *); 110c72b5b24Smillert void doecho(Char **, struct command *); 111c72b5b24Smillert void doelse(Char **, struct command *); 112c72b5b24Smillert void doend(Char **, struct command *); 113c72b5b24Smillert void doeval(Char **, struct command *); 114c72b5b24Smillert void doexit(Char **, struct command *); 115c72b5b24Smillert void doforeach(Char **, struct command *); 116c72b5b24Smillert void doglob(Char **, struct command *); 117c72b5b24Smillert void dogoto(Char **, struct command *); 118c72b5b24Smillert void doif(Char **, struct command *); 119c72b5b24Smillert void dolimit(Char **, struct command *); 120c72b5b24Smillert void dologin(Char **, struct command *); 121c72b5b24Smillert void dologout(Char **, struct command *); 122c72b5b24Smillert void donohup(Char **, struct command *); 123c72b5b24Smillert void doonintr(Char **, struct command *); 124c72b5b24Smillert void dorepeat(Char **, struct command *); 125c72b5b24Smillert void dosetenv(Char **, struct command *); 126c72b5b24Smillert void dosuspend(Char **, struct command *); 127c72b5b24Smillert void doswbrk(Char **, struct command *); 128c72b5b24Smillert void doswitch(Char **, struct command *); 129c72b5b24Smillert void doumask(Char **, struct command *); 130c72b5b24Smillert void dounlimit(Char **, struct command *); 131c72b5b24Smillert void dounsetenv(Char **, struct command *); 132c72b5b24Smillert void dowhile(Char **, struct command *); 133c72b5b24Smillert void dozip(Char **, struct command *); 134c72b5b24Smillert void func(struct command *, struct biltins *); 135df930be7Sderaadt struct biltins * 136c72b5b24Smillert isbfunc(struct command *); 137c72b5b24Smillert void prvars(void); 138c72b5b24Smillert void gotolab(Char *); 139c72b5b24Smillert int srchx(Char *); 140c72b5b24Smillert void unalias(Char **, struct command *); 141c72b5b24Smillert void wfree(void); 142df930be7Sderaadt 143df930be7Sderaadt /* 144df930be7Sderaadt * glob.c 145df930be7Sderaadt */ 146c72b5b24Smillert Char **dobackp(Char *, bool); 147c72b5b24Smillert void Gcat(Char *, Char *); 148c72b5b24Smillert Char *globone(Char *, int); 149c72b5b24Smillert int Gmatch(Char *, Char *); 150c72b5b24Smillert void ginit(void); 151c72b5b24Smillert Char **globall(Char **); 15274637cb2Sderaadt void rscan(Char **, void (*)(int)); 153c72b5b24Smillert void tglob(Char **); 154c72b5b24Smillert void trim(Char **); 155cfb4977bStedu int sortscmp(const void *, const void *); 156df930be7Sderaadt 157df930be7Sderaadt /* 158df930be7Sderaadt * hist.c 159df930be7Sderaadt */ 160c72b5b24Smillert void dohist(Char **, struct command *); 161df930be7Sderaadt struct Hist * 162c72b5b24Smillert enthist(int, struct wordent *, bool); 163c72b5b24Smillert void savehist(struct wordent *); 164df930be7Sderaadt 165df930be7Sderaadt /* 166df930be7Sderaadt * lex.c 167df930be7Sderaadt */ 168c72b5b24Smillert void addla(Char *); 169c72b5b24Smillert void bseek(struct Ain *); 170c72b5b24Smillert void btell(struct Ain *); 171c72b5b24Smillert void btoeof(void); 172c72b5b24Smillert void copylex(struct wordent *, struct wordent *); 173c72b5b24Smillert Char *domod(Char *, int); 174c72b5b24Smillert void freelex(struct wordent *); 175c72b5b24Smillert int lex(struct wordent *); 176c72b5b24Smillert void prlex(FILE *, struct wordent *); 177c72b5b24Smillert int readc(bool); 178c72b5b24Smillert void settell(void); 179c72b5b24Smillert void unreadc(int); 180df930be7Sderaadt 181df930be7Sderaadt /* 182df930be7Sderaadt * misc.c 183df930be7Sderaadt */ 1845f867525Sderaadt int any(char *, int); 185c72b5b24Smillert Char **blkcat(Char **, Char **); 186c72b5b24Smillert Char **blkcpy(Char **, Char **); 187c72b5b24Smillert Char **blkend(Char **); 188c72b5b24Smillert void blkfree(Char **); 189c72b5b24Smillert int blklen(Char **); 190c72b5b24Smillert void blkpr(FILE *, Char **); 191c72b5b24Smillert Char **blkspl(Char **, Char **); 192c72b5b24Smillert void closem(void); 193c72b5b24Smillert Char **copyblk(Char **); 194c72b5b24Smillert int dcopy(int, int); 195c72b5b24Smillert int dmove(int, int); 196c72b5b24Smillert void donefds(void); 197c72b5b24Smillert Char lastchr(Char *); 198c72b5b24Smillert void lshift(Char **, int); 199c72b5b24Smillert int number(Char *); 200c72b5b24Smillert int prefix(Char *, Char *); 201c72b5b24Smillert Char **saveblk(Char **); 202c72b5b24Smillert Char *strip(Char *); 203c72b5b24Smillert Char *quote(Char *); 204c72b5b24Smillert void udvar(Char *); 205df930be7Sderaadt 206df930be7Sderaadt /* 207df930be7Sderaadt * parse.c 208df930be7Sderaadt */ 209c72b5b24Smillert void alias(struct wordent *); 210c72b5b24Smillert void freesyn(struct command *); 211df930be7Sderaadt struct command * 212c72b5b24Smillert syntax(struct wordent *, struct wordent *, int); 213df930be7Sderaadt 214df930be7Sderaadt /* 215df930be7Sderaadt * proc.c 216df930be7Sderaadt */ 217c72b5b24Smillert void dobg(Char **, struct command *); 218c72b5b24Smillert void dobg1(Char **, struct command *); 219c72b5b24Smillert void dofg(Char **, struct command *); 220c72b5b24Smillert void dofg1(Char **, struct command *); 221c72b5b24Smillert void dojobs(Char **, struct command *); 222c72b5b24Smillert void dokill(Char **, struct command *); 223c72b5b24Smillert void donotify(Char **, struct command *); 224c72b5b24Smillert void dostop(Char **, struct command *); 225c72b5b24Smillert void dowait(Char **, struct command *); 226c72b5b24Smillert void palloc(int, struct command *); 227c72b5b24Smillert void panystop(bool); 228c72b5b24Smillert void pchild(int); 229c72b5b24Smillert void pendjob(void); 230df930be7Sderaadt struct process * 231c72b5b24Smillert pfind(Char *); 232c72b5b24Smillert int pfork(struct command *, int); 233c72b5b24Smillert void pgetty(int, int); 234c72b5b24Smillert void pjwait(struct process *); 235c72b5b24Smillert void pnote(void); 236c72b5b24Smillert void prestjob(void); 237c72b5b24Smillert void psavejob(void); 238c72b5b24Smillert void pstart(struct process *, int); 239c72b5b24Smillert void pwait(void); 240df930be7Sderaadt 241df930be7Sderaadt /* 242df930be7Sderaadt * sem.c 243df930be7Sderaadt */ 244c72b5b24Smillert void execute(struct command *, int, int *, int *); 245c72b5b24Smillert void mypipe(int *); 246df930be7Sderaadt 247df930be7Sderaadt /* 248df930be7Sderaadt * set.c 249df930be7Sderaadt */ 250df930be7Sderaadt struct varent 251c72b5b24Smillert *adrof1(Char *, struct varent *); 252c72b5b24Smillert void doset(Char **, struct command *); 253c72b5b24Smillert void dolet(Char **, struct command *); 254c72b5b24Smillert Char *putn(int); 255c72b5b24Smillert int getn(Char *); 256c72b5b24Smillert Char *value1(Char *, struct varent *); 257c72b5b24Smillert void set(Char *, Char *); 258c72b5b24Smillert void set1(Char *, Char **, struct varent *); 259c72b5b24Smillert void setq(Char *, Char **, struct varent *); 260c72b5b24Smillert void unset(Char **, struct command *); 261c72b5b24Smillert void unset1(Char *[], struct varent *); 262c72b5b24Smillert void unsetv(Char *); 263c72b5b24Smillert void setNS(Char *); 264c72b5b24Smillert void shift(Char **, struct command *); 265c72b5b24Smillert void plist(struct varent *); 266df930be7Sderaadt 267df930be7Sderaadt /* 268df930be7Sderaadt * time.c 269df930be7Sderaadt */ 270c72b5b24Smillert void donice(Char **, struct command *); 271c72b5b24Smillert void dotime(Char **, struct command *); 272f3c3a9c6Smillert void prusage(struct rusage *, struct rusage *, 273833a4d71Santon struct timespec *, struct timespec *); 274c72b5b24Smillert void ruadd(struct rusage *, struct rusage *); 275c72b5b24Smillert void settimes(void); 276c72b5b24Smillert void pcsecs(long); 277c72b5b24Smillert void psecs(long); 278df930be7Sderaadt 279df930be7Sderaadt /* 280df930be7Sderaadt * alloc.c 281df930be7Sderaadt */ 28244cfad27Smillert void *xmalloc(size_t); 28344cfad27Smillert void *xreallocarray(void *, size_t, size_t); 28444cfad27Smillert void *xcalloc(size_t, size_t); 28544cfad27Smillert char *xstrdup(const char *); 286df930be7Sderaadt 287df930be7Sderaadt /* 288df930be7Sderaadt * str.c: 289df930be7Sderaadt */ 290ba0a7c12Snaddy size_t Strlcpy(Char *, const Char *, size_t); 291ba0a7c12Snaddy size_t Strlcat(Char *, const Char *, size_t); 292ba0a7c12Snaddy Char *Strchr(Char *, int); 293ba0a7c12Snaddy Char *Strrchr(Char *, int); 294ba0a7c12Snaddy Char *Strspl(Char *, Char *); 295ba0a7c12Snaddy size_t Strlen(Char *); 296ba0a7c12Snaddy int Strcmp(Char *, Char *); 297ba0a7c12Snaddy int Strncmp(Char *, Char *, size_t); 298ba0a7c12Snaddy Char *Strsave(Char *); 299ba0a7c12Snaddy Char *Strend(Char *); 300ba0a7c12Snaddy Char *Strstr(Char *, Char *); 301c72b5b24Smillert Char *str2short(char *); 302c72b5b24Smillert Char **blk2short(char **); 303c72b5b24Smillert char *short2str(Char *); 304c72b5b24Smillert char **short2blk(Char **); 305c72b5b24Smillert char *short2qstr(Char *); 306c72b5b24Smillert char *vis_str(Char *); 307