Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libexpr/exopen.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1989-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* expression library
26
*/
27
28
#include <exlib.h>
29
30
/*
31
* allocate a new expression program environment
32
*/
33
34
Expr_t*
35
exopen(register Exdisc_t* disc)
36
{
37
register Expr_t* program;
38
register Exid_t* sym;
39
int debug;
40
41
if (!(program = newof(0, Expr_t, 1, 0)))
42
return 0;
43
program->symdisc.key = offsetof(Exid_t, name);
44
debug = getenv("VMDEBUG") != 0;
45
if (!(program->symbols = dtopen(&program->symdisc, Dtset)) ||
46
!(program->tmp = sfstropen()) ||
47
!(program->vm = (debug ? vmopen(Vmdcsbrk, Vmdebug, VM_DBCHECK|VM_DBABORT) : vmopen(Vmdcheap, Vmbest, 0))) ||
48
!(program->ve = (debug ? vmopen(Vmdcsbrk, Vmdebug, VM_DBCHECK|VM_DBABORT) : vmopen(Vmdcheap, Vmbest, 0))))
49
{
50
exclose(program, 1);
51
return 0;
52
}
53
program->id = "libexpr:expr";
54
program->disc = disc;
55
setcontext(program);
56
program->file[0] = sfstdin;
57
program->file[1] = sfstdout;
58
program->file[2] = sfstderr;
59
strcpy(program->main.name, "main");
60
program->main.lex = PROCEDURE;
61
program->main.index = PROCEDURE;
62
dtinsert(program->symbols, &program->main);
63
if (!(disc->flags & EX_PURE))
64
for (sym = exbuiltin; *sym->name; sym++)
65
dtinsert(program->symbols, sym);
66
if (sym = disc->symbols)
67
for (; *sym->name; sym++)
68
dtinsert(program->symbols, sym);
69
return program;
70
}
71
72