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