var.h revision 208755
117651Speter/*- 2206924Sdelphij * Copyright (c) 1991, 1993 3205471Sdelphij * The Regents of the University of California. All rights reserved. 4131380Stjr * 517651Speter * This code is derived from software contributed to Berkeley by 617651Speter * Kenneth Almquist. 717651Speter * 817651Speter * Redistribution and use in source and binary forms, with or without 917651Speter * modification, are permitted provided that the following conditions 1017651Speter * are met: 1117651Speter * 1. Redistributions of source code must retain the above copyright 1217651Speter * notice, this list of conditions and the following disclaimer. 1317651Speter * 2. Redistributions in binary form must reproduce the above copyright 1417651Speter * notice, this list of conditions and the following disclaimer in the 1517651Speter * documentation and/or other materials provided with the distribution. 1617651Speter * 4. Neither the name of the University nor the names of its contributors 1717651Speter * may be used to endorse or promote products derived from this software 1817651Speter * without specific prior written permission. 1917651Speter * 2017651Speter * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2117651Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2217651Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2317651Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2417651Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2517651Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2617651Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2717651Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2817651Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2917651Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3017651Speter * SUCH DAMAGE. 3117651Speter * 3217651Speter * @(#)var.h 8.2 (Berkeley) 5/4/95 33146081Skientzle * $FreeBSD: head/bin/sh/var.h 208755 2010-06-02 19:16:58Z jilles $ 3417651Speter */ 3533908Ssteve 3633908Ssteve/* 3717651Speter * Shell variables. 3817651Speter */ 3917651Speter 4017651Speter/* flags */ 4117651Speter#define VEXPORT 0x01 /* variable is exported */ 4217651Speter#define VREADONLY 0x02 /* variable cannot be modified */ 4317651Speter#define VSTRFIXED 0x04 /* variable struct is statically allocated */ 4417651Speter#define VTEXTFIXED 0x08 /* text is statically allocated */ 4517651Speter#define VSTACK 0x10 /* text is allocated on the stack */ 4617651Speter#define VUNSET 0x20 /* the variable is not set */ 4717651Speter#define VNOFUNC 0x40 /* don't call the callback function */ 4817651Speter 4917651Speter 5017651Speterstruct var { 5117651Speter struct var *next; /* next entry in hash list */ 5217651Speter int flags; /* flags are defined above */ 5317651Speter char *text; /* name=value */ 5417651Speter void (*func)(const char *); 5517651Speter /* function to be called when */ 5617651Speter /* the variable gets set/unset */ 5717651Speter}; 5817651Speter 5917651Speter 6017651Speterstruct localvar { 6117651Speter struct localvar *next; /* next local variable in list */ 6233908Ssteve struct var *vp; /* the variable that was made local */ 6317651Speter int flags; /* saved flags */ 6417651Speter char *text; /* saved text */ 6533908Ssteve}; 6617651Speter 6717651Speter 6833908Sstevestruct localvar *localvars; 6917651Speter 7017651Speterextern struct var vifs; 7133908Ssteveextern struct var vmail; 7217651Speterextern struct var vmpath; 7317651Speterextern struct var vpath; 7417651Speterextern struct var vppid; 7517651Speterextern struct var vps1; 7617651Speterextern struct var vps2; 7717651Speterextern struct var vps4; 7817651Speter#ifndef NO_HISTORY 7917651Speterextern struct var vhistsize; 8017651Speterextern struct var vterm; 8117651Speter#endif 8217651Speter 8317651Speter/* 8417651Speter * The following macros access the values of the above variables. 8517651Speter * They have to skip over the name. They return the null string 8633908Ssteve * for unset variables. 8733908Ssteve */ 8833908Ssteve 8933908Ssteve#define ifsval() (vifs.text + 4) 9033908Ssteve#define ifsset() ((vifs.flags & VUNSET) == 0) 9117651Speter#define mailval() (vmail.text + 5) 9217651Speter#define mpathval() (vmpath.text + 9) 9317651Speter#define pathval() (vpath.text + 5) 9417651Speter#define ps1val() (vps1.text + 4) 9517651Speter#define ps2val() (vps2.text + 4) 9617651Speter#define ps4val() (vps4.text + 4) 9717651Speter#define optindval() (voptind.text + 7) 9817651Speter#ifndef NO_HISTORY 9917651Speter#define histsizeval() (vhistsize.text + 9) 10017651Speter#define termval() (vterm.text + 5) 10117651Speter#endif 10217651Speter 10333908Ssteve#define mpathset() ((vmpath.flags & VUNSET) == 0) 10433908Ssteve 10517651Spetervoid initvar(void); 10617651Spetervoid setvar(const char *, const char *, int); 10717651Spetervoid setvareq(char *, int); 10817651Speterstruct strlist; 10933908Sstevevoid listsetvar(struct strlist *); 11017651Speterchar *lookupvar(const char *); 11117651Speterchar *bltinlookup(const char *, int); 11217651Spetervoid bltinsetlocale(void); 11317651Spetervoid bltinunsetlocale(void); 11417651Speterchar **environment(void); 11517651Speterint showvarscmd(int, char **); 11617651Speterint exportcmd(int, char **); 11717651Speterint localcmd(int, char **); 11833908Sstevevoid mklocal(char *); 11933908Sstevevoid poplocalvars(void); 12033908Ssteveint setvarcmd(int, char **); 12133908Ssteveint unsetcmd(int, char **); 12217651Speterint unsetvar(const char *); 12333908Ssteveint setvarsafe(const char *, const char *, int); 12433908Ssteve