|
|
1.1 root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
2: /* $Header: b1com.c,v 1.1 84/06/28 00:49:03 timo Exp $ */
3:
4: /************************************************************************/
5: /* B compounds */
6: /* plus Hows Funs and other odd types that don't fit anywhere else */
7: /* */
8: /* A compound is modelled as a sequence of len values, its fields. */
9: /* */
10: /************************************************************************/
11:
12: #include "b.h"
13: #include "b1obj.h"
14:
15: Visible value* field(v, k) value v; intlet k; { /* k in {0..size-1}; no copy */
16: return (value *) Field(v, k);
17: }
18:
19: Visible Procedure put_in_field(v, c, i) value v, *c; intlet i; {
20: /*Note that no copy of v is made: the caller must do this*/
21: *(Ats(*c)+i)= v;
22: }
23:
24: /* Other types */
25: Visible loc mk_simploc(id, en) basidf id; env en; {
26: loc l= grab_sim();
27: (*Ats(l))= copy(id); (*(Ats(l)+1))= (value) en;
28: return l;
29: }
30:
31: Visible loc mk_trimloc(R, B, C) loc R; intlet B, C; {
32: loc l= grab_tri(); trimloc *ll= (trimloc *)Ats(l);
33: ll->R= copy(R); ll->B= B; ll->C= C;
34: return l;
35: }
36:
37: Visible loc mk_tbseloc(R, K) loc R; value K; {
38: loc l= grab_tse(); tbseloc *ll= (tbseloc *)Ats(l);
39: ll->R= copy(R); ll->K= copy(K);
40: return l;
41: }
42:
43: Visible fun mk_fun(L, H, adic, def, fux, lux, reftab, filed)
44: intlet L, H; literal adic, def; txptr fux, lux; value reftab; bool filed; {
45: fun f= grab_fun(); funprd *ff= (funprd *)Ats(f);
46: ff->L= L; ff->H= H; ff->adic= adic; ff->def= def; ff->fux= fux;
47: ff->lux= lux; ff->reftab= reftab; ff->filed= filed;
48: return f;
49: }
50:
51: Visible prd mk_prd(adic, def, fux, lux, reftab, filed)
52: literal adic, def; txptr fux, lux; value reftab; bool filed; {
53: prd p= grab_prd(); funprd *pp= (funprd *)Ats(p);
54: pp->adic= adic; pp->def= def; pp->fux= fux;
55: pp->lux= lux; pp->reftab= reftab; pp->filed= filed;
56: return p;
57: }
58:
59: Visible value mk_how(fux, lux, reftab, filed)
60: txptr fux, lux; value reftab; bool filed; {
61: value h= grab_how(); how *hh= (how *)Ats(h);
62: hh->fux= fux; hh->lux= lux; hh->reftab= reftab; hh->filed= filed;
63: return h;
64: }
65:
66: Visible value mk_ref(rp, rlino) txptr rp; intlet rlino; {
67: value r= grab_ref();
68: ((ref *)Ats(r))->rp= rp;
69: ((ref *)Ats(r))->rlino= rlino;
70: return r;
71: }
72:
73: Visible value mk_per(v) value v; {
74: value p= grab_per();
75: *Ats(p)= copy(v);
76: return p;
77: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.