Subversion Repositories HelenOS

Rev

Rev 2714 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2714 Rev 2782
1
/*  $NetBSD: var.h,v 1.18 2000/05/22 10:18:47 elric Exp $   */
1
/*  $NetBSD: var.h,v 1.18 2000/05/22 10:18:47 elric Exp $   */
2
 
2
 
3
/*-
3
/*-
4
 * Copyright (c) 1991, 1993
4
 * Copyright (c) 1991, 1993
5
 *  The Regents of the University of California.  All rights reserved.
5
 *  The Regents of the University of California.  All rights reserved.
6
 *
6
 *
7
 * This code is derived from software contributed to Berkeley by
7
 * This code is derived from software contributed to Berkeley by
8
 * Kenneth Almquist.
8
 * Kenneth Almquist.
9
 *
9
 *
10
 * Redistribution and use in source and binary forms, with or without
10
 * Redistribution and use in source and binary forms, with or without
11
 * modification, are permitted provided that the following conditions
11
 * modification, are permitted provided that the following conditions
12
 * are met:
12
 * are met:
13
 * 1. Redistributions of source code must retain the above copyright
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
14
 *    notice, this list of conditions and the following disclaimer.
15
 * 2. Redistributions in binary form must reproduce the above copyright
15
 * 2. Redistributions in binary form must reproduce the above copyright
16
 *    notice, this list of conditions and the following disclaimer in the
16
 *    notice, this list of conditions and the following disclaimer in the
17
 *    documentation and/or other materials provided with the distribution.
17
 *    documentation and/or other materials provided with the distribution.
18
 * 3. All advertising materials mentioning features or use of this software
18
 * 3. All advertising materials mentioning features or use of this software
19
 *    must display the following acknowledgement:
19
 *    must display the following acknowledgement:
20
 *  This product includes software developed by the University of
20
 *  This product includes software developed by the University of
21
 *  California, Berkeley and its contributors.
21
 *  California, Berkeley and its contributors.
22
 * 4. Neither the name of the University nor the names of its contributors
22
 * 4. Neither the name of the University nor the names of its contributors
23
 *    may be used to endorse or promote products derived from this software
23
 *    may be used to endorse or promote products derived from this software
24
 *    without specific prior written permission.
24
 *    without specific prior written permission.
25
 *
25
 *
26
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36
 * SUCH DAMAGE.
36
 * SUCH DAMAGE.
37
 *
37
 *
38
 *  @(#)var.h   8.2 (Berkeley) 5/4/95
38
 *  @(#)var.h   8.2 (Berkeley) 5/4/95
39
 */
39
 */
40
 
40
 
41
/*
41
/*
42
 * Shell variables.
42
 * Shell variables.
43
 */
43
 */
44
 
44
 
45
/* flags */
45
/* flags */
46
#define VEXPORT     0x01    /* variable is exported */
46
#define VEXPORT     0x01    /* variable is exported */
47
#define VREADONLY   0x02    /* variable cannot be modified */
47
#define VREADONLY   0x02    /* variable cannot be modified */
48
#define VSTRFIXED   0x04    /* variable struct is staticly allocated */
48
#define VSTRFIXED   0x04    /* variable struct is staticly allocated */
49
#define VTEXTFIXED  0x08    /* text is staticly allocated */
49
#define VTEXTFIXED  0x08    /* text is staticly allocated */
50
#define VSTACK      0x10    /* text is allocated on the stack */
50
#define VSTACK      0x10    /* text is allocated on the stack */
51
#define VUNSET      0x20    /* the variable is not set */
51
#define VUNSET      0x20    /* the variable is not set */
52
#define VNOFUNC     0x40    /* don't call the callback function */
52
#define VNOFUNC     0x40    /* don't call the callback function */
53
 
53
 
54
 
54
 
55
struct var {
55
struct var {
56
    struct var *next;       /* next entry in hash list */
56
    struct var *next;       /* next entry in hash list */
57
    int flags;          /* flags are defined above */
57
    int flags;          /* flags are defined above */
58
    char *text;         /* name=value */
58
    char *text;         /* name=value */
59
    void (*func) (const char *);
59
    void (*func) (const char *);
60
                    /* function to be called when  */
60
                    /* function to be called when  */
61
                    /* the variable gets set/unset */
61
                    /* the variable gets set/unset */
62
};
62
};
63
 
63
 
64
 
64
 
65
struct localvar {
65
struct localvar {
66
    struct localvar *next;      /* next local variable in list */
66
    struct localvar *next;      /* next local variable in list */
67
    struct var *vp;         /* the variable that was made local */
67
    struct var *vp;         /* the variable that was made local */
68
    int flags;          /* saved flags */
68
    int flags;          /* saved flags */
69
    char *text;         /* saved text */
69
    char *text;         /* saved text */
70
};
70
};
71
 
71
 
72
 
72
 
73
struct localvar *localvars;
73
struct localvar *localvars;
74
 
74
 
75
#if ATTY
75
#if ATTY
76
extern struct var vatty;
76
extern struct var vatty;
77
#endif
77
#endif
78
extern struct var vifs;
78
extern struct var vifs;
79
extern struct var vmail;
79
extern struct var vmail;
80
extern struct var vmpath;
80
extern struct var vmpath;
81
extern struct var vpath;
81
extern struct var vpath;
82
extern struct var vps1;
82
extern struct var vps1;
83
extern struct var vps2;
83
extern struct var vps2;
84
#ifndef SMALL
84
#ifndef SMALL
85
extern struct var vterm;
85
extern struct var vterm;
86
extern struct var vtermcap;
86
extern struct var vtermcap;
87
extern struct var vhistsize;
87
extern struct var vhistsize;
88
#endif
88
#endif
89
 
89
 
90
/*
90
/*
91
 * The following macros access the values of the above variables.
91
 * The following macros access the values of the above variables.
92
 * They have to skip over the name.  They return the null string
92
 * They have to skip over the name.  They return the null string
93
 * for unset variables.
93
 * for unset variables.
94
 */
94
 */
95
 
95
 
96
#define ifsval()    (vifs.text + 4)
96
#define ifsval()    (vifs.text + 4)
97
#define ifsset()    ((vifs.flags & VUNSET) == 0)
97
#define ifsset()    ((vifs.flags & VUNSET) == 0)
98
#define mailval()   (vmail.text + 5)
98
#define mailval()   (vmail.text + 5)
99
#define mpathval()  (vmpath.text + 9)
99
#define mpathval()  (vmpath.text + 9)
100
#define pathval()   (vpath.text + 5)
100
#define pathval()   (vpath.text + 5)
101
#define ps1val()    (vps1.text + 4)
101
#define ps1val()    (vps1.text + 4)
102
#define ps2val()    (vps2.text + 4)
102
#define ps2val()    (vps2.text + 4)
103
#define optindval() (voptind.text + 7)
103
#define optindval() (voptind.text + 7)
104
#ifndef SMALL
104
#ifndef SMALL
105
#define histsizeval()   (vhistsize.text + 9)
105
#define histsizeval()   (vhistsize.text + 9)
106
#define termval()   (vterm.text + 5)
106
#define termval()   (vterm.text + 5)
107
#endif
107
#endif
108
 
108
 
109
#if ATTY
109
#if ATTY
110
#define attyset()   ((vatty.flags & VUNSET) == 0)
110
#define attyset()   ((vatty.flags & VUNSET) == 0)
111
#endif
111
#endif
112
#define mpathset()  ((vmpath.flags & VUNSET) == 0)
112
#define mpathset()  ((vmpath.flags & VUNSET) == 0)
113
 
113
 
114
void initvar (void);
114
void initvar (void);
115
void setvar (const char *, const char *, int);
115
void setvar (const char *, const char *, int);
116
void setvareq (char *, int);
116
void setvareq (char *, int);
117
struct strlist;
117
struct strlist;
118
void listsetvar (struct strlist *);
118
void listsetvar (struct strlist *);
119
char *lookupvar (const char *);
119
char *lookupvar (const char *);
120
char *bltinlookup (const char *, int);
120
char *bltinlookup (const char *, int);
121
char **environment (void);
121
char **environment (void);
122
void shprocvar (void);
122
void shprocvar (void);
123
int showvarscmd (int, char **);
123
int showvarscmd (int, char **);
124
int exportcmd (int, char **);
124
int exportcmd (int, char **);
125
int localcmd (int, char **);
125
int localcmd (int, char **);
126
void mklocal (char *);
126
void mklocal (char *);
127
void poplocalvars (void);
127
void poplocalvars (void);
128
int setvarcmd (int, char **);
128
int setvarcmd (int, char **);
129
int unsetcmd (int, char **);
129
int unsetcmd (int, char **);
130
int unsetvar (const char *);
130
int unsetvar (const char *);
131
int setvarsafe (const char *, const char *, int);
131
int setvarsafe (const char *, const char *, int);
132
 
132