1219b2ee8SDavid du Colombier /***** spin: vars.c *****/
2219b2ee8SDavid du Colombier
3*de2caf28SDavid du Colombier /*
4*de2caf28SDavid du Colombier * This file is part of the public release of Spin. It is subject to the
5*de2caf28SDavid du Colombier * terms in the LICENSE file that is included in this source directory.
6*de2caf28SDavid du Colombier * Tool documentation is available at http://spinroot.com
7*de2caf28SDavid du Colombier */
8219b2ee8SDavid du Colombier
9219b2ee8SDavid du Colombier #include "spin.h"
10219b2ee8SDavid du Colombier #include "y.tab.h"
11219b2ee8SDavid du Colombier
12*de2caf28SDavid du Colombier extern char GBuf[];
13*de2caf28SDavid du Colombier extern int analyze, jumpsteps, nproc, nstop, columns, old_priority_rules;
14*de2caf28SDavid du Colombier extern int lineno, depth, verbose, xspin, limited_vis, Pid_nr;
15*de2caf28SDavid du Colombier extern Lextok *Xu_List;
167dd7cddfSDavid du Colombier extern Ordered *all_names;
17*de2caf28SDavid du Colombier extern RunList *X_lst, *LastX;
18*de2caf28SDavid du Colombier extern short no_arrays, Have_claim, terse;
19219b2ee8SDavid du Colombier extern Symbol *Fname;
20*de2caf28SDavid du Colombier
21*de2caf28SDavid du Colombier extern void sr_buf(int, int, const char *);
22*de2caf28SDavid du Colombier extern void sr_mesg(FILE *, int, int, const char *);
237dd7cddfSDavid du Colombier
247dd7cddfSDavid du Colombier static int getglobal(Lextok *);
257dd7cddfSDavid du Colombier static int setglobal(Lextok *, int);
267dd7cddfSDavid du Colombier static int maxcolnr = 1;
27219b2ee8SDavid du Colombier
28219b2ee8SDavid du Colombier int
getval(Lextok * sn)29219b2ee8SDavid du Colombier getval(Lextok *sn)
30219b2ee8SDavid du Colombier { Symbol *s = sn->sym;
31219b2ee8SDavid du Colombier
327dd7cddfSDavid du Colombier if (strcmp(s->name, "_") == 0)
337dd7cddfSDavid du Colombier { non_fatal("attempt to read value of '_'", 0);
347dd7cddfSDavid du Colombier return 0;
357dd7cddfSDavid du Colombier }
36219b2ee8SDavid du Colombier if (strcmp(s->name, "_last") == 0)
37219b2ee8SDavid du Colombier return (LastX)?LastX->pid:0;
38219b2ee8SDavid du Colombier if (strcmp(s->name, "_p") == 0)
39*de2caf28SDavid du Colombier return (X_lst && X_lst->pc)?X_lst->pc->seqno:0;
40219b2ee8SDavid du Colombier if (strcmp(s->name, "_pid") == 0)
41*de2caf28SDavid du Colombier { if (!X_lst) return 0;
42*de2caf28SDavid du Colombier return X_lst->pid - Have_claim;
43219b2ee8SDavid du Colombier }
44*de2caf28SDavid du Colombier if (strcmp(s->name, "_priority") == 0)
45*de2caf28SDavid du Colombier { if (!X_lst) return 0;
46*de2caf28SDavid du Colombier
47*de2caf28SDavid du Colombier if (old_priority_rules)
48*de2caf28SDavid du Colombier { non_fatal("cannot refer to _priority with -o6", (char *) 0);
49*de2caf28SDavid du Colombier return 1;
50*de2caf28SDavid du Colombier }
51*de2caf28SDavid du Colombier return X_lst->priority;
52*de2caf28SDavid du Colombier }
53*de2caf28SDavid du Colombier
547dd7cddfSDavid du Colombier if (strcmp(s->name, "_nr_pr") == 0)
55*de2caf28SDavid du Colombier { return nproc-nstop; /* new 3.3.10 */
56*de2caf28SDavid du Colombier }
577dd7cddfSDavid du Colombier
58219b2ee8SDavid du Colombier if (s->context && s->type)
59*de2caf28SDavid du Colombier { return getlocal(sn);
60*de2caf28SDavid du Colombier }
61219b2ee8SDavid du Colombier
62219b2ee8SDavid du Colombier if (!s->type) /* not declared locally */
63219b2ee8SDavid du Colombier { s = lookup(s->name); /* try global */
64219b2ee8SDavid du Colombier sn->sym = s; /* fix it */
65219b2ee8SDavid du Colombier }
66*de2caf28SDavid du Colombier
67219b2ee8SDavid du Colombier return getglobal(sn);
68219b2ee8SDavid du Colombier }
69219b2ee8SDavid du Colombier
70219b2ee8SDavid du Colombier int
setval(Lextok * v,int n)71219b2ee8SDavid du Colombier setval(Lextok *v, int n)
72219b2ee8SDavid du Colombier {
73*de2caf28SDavid du Colombier if (strcmp(v->sym->name, "_last") == 0
74*de2caf28SDavid du Colombier || strcmp(v->sym->name, "_p") == 0
75*de2caf28SDavid du Colombier || strcmp(v->sym->name, "_pid") == 0
76*de2caf28SDavid du Colombier || strcmp(v->sym->name, "_nr_qs") == 0
77*de2caf28SDavid du Colombier || strcmp(v->sym->name, "_nr_pr") == 0)
78*de2caf28SDavid du Colombier { non_fatal("illegal assignment to %s", v->sym->name);
79*de2caf28SDavid du Colombier }
80*de2caf28SDavid du Colombier if (strcmp(v->sym->name, "_priority") == 0)
81*de2caf28SDavid du Colombier { if (old_priority_rules)
82*de2caf28SDavid du Colombier { non_fatal("cannot refer to _priority with -o6", (char *) 0);
83*de2caf28SDavid du Colombier return 1;
84*de2caf28SDavid du Colombier }
85*de2caf28SDavid du Colombier if (!X_lst)
86*de2caf28SDavid du Colombier { non_fatal("no context for _priority", (char *) 0);
87*de2caf28SDavid du Colombier return 1;
88*de2caf28SDavid du Colombier }
89*de2caf28SDavid du Colombier X_lst->priority = n;
90*de2caf28SDavid du Colombier }
91*de2caf28SDavid du Colombier
92219b2ee8SDavid du Colombier if (v->sym->context && v->sym->type)
93219b2ee8SDavid du Colombier return setlocal(v, n);
94219b2ee8SDavid du Colombier if (!v->sym->type)
95219b2ee8SDavid du Colombier v->sym = lookup(v->sym->name);
96219b2ee8SDavid du Colombier return setglobal(v, n);
97219b2ee8SDavid du Colombier }
98219b2ee8SDavid du Colombier
997dd7cddfSDavid du Colombier void
rm_selfrefs(Symbol * s,Lextok * i)1007dd7cddfSDavid du Colombier rm_selfrefs(Symbol *s, Lextok *i)
1017dd7cddfSDavid du Colombier {
1027dd7cddfSDavid du Colombier if (!i) return;
1037dd7cddfSDavid du Colombier
1047dd7cddfSDavid du Colombier if (i->ntyp == NAME
1057dd7cddfSDavid du Colombier && strcmp(i->sym->name, s->name) == 0
1067dd7cddfSDavid du Colombier && ( (!i->sym->context && !s->context)
1077dd7cddfSDavid du Colombier || ( i->sym->context && s->context
1087dd7cddfSDavid du Colombier && strcmp(i->sym->context->name, s->context->name) == 0)))
1097dd7cddfSDavid du Colombier { lineno = i->ln;
1107dd7cddfSDavid du Colombier Fname = i->fn;
1117dd7cddfSDavid du Colombier non_fatal("self-reference initializing '%s'", s->name);
1127dd7cddfSDavid du Colombier i->ntyp = CONST;
1137dd7cddfSDavid du Colombier i->val = 0;
1147dd7cddfSDavid du Colombier } else
1157dd7cddfSDavid du Colombier { rm_selfrefs(s, i->lft);
1167dd7cddfSDavid du Colombier rm_selfrefs(s, i->rgt);
1177dd7cddfSDavid du Colombier }
1187dd7cddfSDavid du Colombier }
1197dd7cddfSDavid du Colombier
120219b2ee8SDavid du Colombier int
checkvar(Symbol * s,int n)121219b2ee8SDavid du Colombier checkvar(Symbol *s, int n)
1227dd7cddfSDavid du Colombier { int i, oln = lineno; /* calls on eval() change it */
1237dd7cddfSDavid du Colombier Symbol *ofnm = Fname;
124*de2caf28SDavid du Colombier Lextok *z, *y;
125219b2ee8SDavid du Colombier
126312a1df1SDavid du Colombier if (!in_bound(s, n))
127219b2ee8SDavid du Colombier return 0;
128312a1df1SDavid du Colombier
129219b2ee8SDavid du Colombier if (s->type == 0)
1307dd7cddfSDavid du Colombier { non_fatal("undecl var %s (assuming int)", s->name);
131219b2ee8SDavid du Colombier s->type = INT;
132219b2ee8SDavid du Colombier }
1337dd7cddfSDavid du Colombier /* not a STRUCT */
134219b2ee8SDavid du Colombier if (s->val == (int *) 0) /* uninitialized */
135219b2ee8SDavid du Colombier { s->val = (int *) emalloc(s->nel*sizeof(int));
136*de2caf28SDavid du Colombier z = s->ini;
137219b2ee8SDavid du Colombier for (i = 0; i < s->nel; i++)
138*de2caf28SDavid du Colombier { if (z && z->ntyp == ',')
139*de2caf28SDavid du Colombier { y = z->lft;
140*de2caf28SDavid du Colombier z = z->rgt;
141*de2caf28SDavid du Colombier } else
142*de2caf28SDavid du Colombier { y = z;
143*de2caf28SDavid du Colombier }
144*de2caf28SDavid du Colombier if (s->type != CHAN)
145*de2caf28SDavid du Colombier { rm_selfrefs(s, y);
146*de2caf28SDavid du Colombier s->val[i] = eval(y);
1477dd7cddfSDavid du Colombier } else if (!analyze)
148*de2caf28SDavid du Colombier { s->val[i] = qmake(s);
149*de2caf28SDavid du Colombier } } }
1507dd7cddfSDavid du Colombier lineno = oln;
1517dd7cddfSDavid du Colombier Fname = ofnm;
15200d97012SDavid du Colombier
153219b2ee8SDavid du Colombier return 1;
154219b2ee8SDavid du Colombier }
155219b2ee8SDavid du Colombier
1567dd7cddfSDavid du Colombier static int
getglobal(Lextok * sn)157219b2ee8SDavid du Colombier getglobal(Lextok *sn)
158219b2ee8SDavid du Colombier { Symbol *s = sn->sym;
1597dd7cddfSDavid du Colombier int i, n = eval(sn->lft);
160219b2ee8SDavid du Colombier
161*de2caf28SDavid du Colombier if (s->type == 0 && X_lst && (i = find_lab(s, X_lst->n, 0))) /* getglobal */
162219b2ee8SDavid du Colombier { printf("findlab through getglobal on %s\n", s->name);
163219b2ee8SDavid du Colombier return i; /* can this happen? */
164219b2ee8SDavid du Colombier }
165219b2ee8SDavid du Colombier if (s->type == STRUCT)
166*de2caf28SDavid du Colombier { return Rval_struct(sn, s, 1); /* 1 = check init */
167*de2caf28SDavid du Colombier }
168219b2ee8SDavid du Colombier if (checkvar(s, n))
169*de2caf28SDavid du Colombier { return cast_val(s->type, s->val[n], s->nbits);
170*de2caf28SDavid du Colombier }
171219b2ee8SDavid du Colombier return 0;
172219b2ee8SDavid du Colombier }
173219b2ee8SDavid du Colombier
174219b2ee8SDavid du Colombier int
cast_val(int t,int v,int w)1757dd7cddfSDavid du Colombier cast_val(int t, int v, int w)
176312a1df1SDavid du Colombier { int i=0; short s=0; unsigned int u=0;
177219b2ee8SDavid du Colombier
178312a1df1SDavid du Colombier if (t == PREDEF || t == INT || t == CHAN) i = v; /* predef means _ */
179219b2ee8SDavid du Colombier else if (t == SHORT) s = (short) v;
180219b2ee8SDavid du Colombier else if (t == BYTE || t == MTYPE) u = (unsigned char)v;
181219b2ee8SDavid du Colombier else if (t == BIT) u = (unsigned char)(v&1);
1827dd7cddfSDavid du Colombier else if (t == UNSIGNED)
1837dd7cddfSDavid du Colombier { if (w == 0)
1847dd7cddfSDavid du Colombier fatal("cannot happen, cast_val", (char *)0);
185312a1df1SDavid du Colombier /* u = (unsigned)(v& ((1<<w)-1)); problem when w=32 */
186312a1df1SDavid du Colombier u = (unsigned)(v& (~0u>>(8*sizeof(unsigned)-w))); /* doug */
1877dd7cddfSDavid du Colombier }
188219b2ee8SDavid du Colombier
189312a1df1SDavid du Colombier if (v != i+s+ (int) u)
190*de2caf28SDavid du Colombier { char buf[64]; sprintf(buf, "%d->%d (%d)", v, i+s+(int)u, t);
191219b2ee8SDavid du Colombier non_fatal("value (%s) truncated in assignment", buf);
192219b2ee8SDavid du Colombier }
193*de2caf28SDavid du Colombier return (int)(i+s+(int)u);
194219b2ee8SDavid du Colombier }
195219b2ee8SDavid du Colombier
1967dd7cddfSDavid du Colombier static int
setglobal(Lextok * v,int m)197219b2ee8SDavid du Colombier setglobal(Lextok *v, int m)
198219b2ee8SDavid du Colombier {
199219b2ee8SDavid du Colombier if (v->sym->type == STRUCT)
200*de2caf28SDavid du Colombier { (void) Lval_struct(v, v->sym, 1, m);
201*de2caf28SDavid du Colombier } else
202219b2ee8SDavid du Colombier { int n = eval(v->lft);
203219b2ee8SDavid du Colombier if (checkvar(v->sym, n))
20400d97012SDavid du Colombier { int oval = v->sym->val[n];
20500d97012SDavid du Colombier int nval = cast_val(v->sym->type, m, v->sym->nbits);
20600d97012SDavid du Colombier v->sym->val[n] = nval;
20700d97012SDavid du Colombier if (oval != nval)
20800d97012SDavid du Colombier { v->sym->setat = depth;
20900d97012SDavid du Colombier } } }
210219b2ee8SDavid du Colombier return 1;
211219b2ee8SDavid du Colombier }
212219b2ee8SDavid du Colombier
213219b2ee8SDavid du Colombier void
dumpclaims(FILE * fd,int pid,char * s)214219b2ee8SDavid du Colombier dumpclaims(FILE *fd, int pid, char *s)
215*de2caf28SDavid du Colombier { Lextok *m; int cnt = 0; int oPid = Pid_nr;
216219b2ee8SDavid du Colombier
217219b2ee8SDavid du Colombier for (m = Xu_List; m; m = m->rgt)
218219b2ee8SDavid du Colombier if (strcmp(m->sym->name, s) == 0)
219219b2ee8SDavid du Colombier { cnt=1;
220219b2ee8SDavid du Colombier break;
221219b2ee8SDavid du Colombier }
222219b2ee8SDavid du Colombier if (cnt == 0) return;
223219b2ee8SDavid du Colombier
224*de2caf28SDavid du Colombier Pid_nr = pid;
225219b2ee8SDavid du Colombier fprintf(fd, "#ifndef XUSAFE\n");
226219b2ee8SDavid du Colombier for (m = Xu_List; m; m = m->rgt)
227219b2ee8SDavid du Colombier { if (strcmp(m->sym->name, s) != 0)
228219b2ee8SDavid du Colombier continue;
229219b2ee8SDavid du Colombier no_arrays = 1;
230219b2ee8SDavid du Colombier putname(fd, "\t\tsetq_claim(", m->lft, 0, "");
231219b2ee8SDavid du Colombier no_arrays = 0;
232219b2ee8SDavid du Colombier fprintf(fd, ", %d, ", m->val);
233219b2ee8SDavid du Colombier terse = 1;
234219b2ee8SDavid du Colombier putname(fd, "\"", m->lft, 0, "\", h, ");
235219b2ee8SDavid du Colombier terse = 0;
236219b2ee8SDavid du Colombier fprintf(fd, "\"%s\");\n", s);
237219b2ee8SDavid du Colombier }
238219b2ee8SDavid du Colombier fprintf(fd, "#endif\n");
239*de2caf28SDavid du Colombier Pid_nr = oPid;
240219b2ee8SDavid du Colombier }
241219b2ee8SDavid du Colombier
242219b2ee8SDavid du Colombier void
dumpglobals(void)243219b2ee8SDavid du Colombier dumpglobals(void)
2447dd7cddfSDavid du Colombier { Ordered *walk;
245312a1df1SDavid du Colombier static Lextok *dummy = ZN;
246219b2ee8SDavid du Colombier Symbol *sp;
2477dd7cddfSDavid du Colombier int j;
248219b2ee8SDavid du Colombier
249312a1df1SDavid du Colombier if (!dummy)
250312a1df1SDavid du Colombier dummy = nn(ZN, NAME, nn(ZN,CONST,ZN,ZN), ZN);
251312a1df1SDavid du Colombier
2527dd7cddfSDavid du Colombier for (walk = all_names; walk; walk = walk->next)
2537dd7cddfSDavid du Colombier { sp = walk->entry;
2547dd7cddfSDavid du Colombier if (!sp->type || sp->context || sp->owner
2557dd7cddfSDavid du Colombier || sp->type == PROCTYPE || sp->type == PREDEF
256312a1df1SDavid du Colombier || sp->type == CODE_FRAG || sp->type == CODE_DECL
2577dd7cddfSDavid du Colombier || (sp->type == MTYPE && ismtype(sp->name)))
258219b2ee8SDavid du Colombier continue;
2597dd7cddfSDavid du Colombier
260219b2ee8SDavid du Colombier if (sp->type == STRUCT)
26100d97012SDavid du Colombier { if ((verbose&4) && !(verbose&64)
26200d97012SDavid du Colombier && (sp->setat < depth
26300d97012SDavid du Colombier && jumpsteps != depth))
26400d97012SDavid du Colombier { continue;
26500d97012SDavid du Colombier }
26600d97012SDavid du Colombier dump_struct(sp, sp->name, 0);
2677dd7cddfSDavid du Colombier continue;
2687dd7cddfSDavid du Colombier }
269219b2ee8SDavid du Colombier for (j = 0; j < sp->nel; j++)
2707dd7cddfSDavid du Colombier { int prefetch;
271*de2caf28SDavid du Colombier char *s = 0;
2727dd7cddfSDavid du Colombier if (sp->type == CHAN)
273219b2ee8SDavid du Colombier { doq(sp, j, 0);
274219b2ee8SDavid du Colombier continue;
2757dd7cddfSDavid du Colombier }
2767dd7cddfSDavid du Colombier if ((verbose&4) && !(verbose&64)
2777dd7cddfSDavid du Colombier && (sp->setat < depth
2787dd7cddfSDavid du Colombier && jumpsteps != depth))
27900d97012SDavid du Colombier { continue;
28000d97012SDavid du Colombier }
28100d97012SDavid du Colombier
282219b2ee8SDavid du Colombier dummy->sym = sp;
283219b2ee8SDavid du Colombier dummy->lft->val = j;
2847dd7cddfSDavid du Colombier /* in case of cast_val warnings, do this first: */
2857dd7cddfSDavid du Colombier prefetch = getglobal(dummy);
286219b2ee8SDavid du Colombier printf("\t\t%s", sp->name);
28700d97012SDavid du Colombier if (sp->nel > 1 || sp->isarray) printf("[%d]", j);
2887dd7cddfSDavid du Colombier printf(" = ");
289*de2caf28SDavid du Colombier if (sp->type == MTYPE
290*de2caf28SDavid du Colombier && sp->mtype_name)
291*de2caf28SDavid du Colombier { s = sp->mtype_name->name;
292*de2caf28SDavid du Colombier }
293*de2caf28SDavid du Colombier sr_mesg(stdout, prefetch, sp->type == MTYPE, s);
2947dd7cddfSDavid du Colombier printf("\n");
2957dd7cddfSDavid du Colombier if (limited_vis && (sp->hidden&2))
2967dd7cddfSDavid du Colombier { int colpos;
297*de2caf28SDavid du Colombier GBuf[0] = '\0';
2987dd7cddfSDavid du Colombier if (!xspin)
2997dd7cddfSDavid du Colombier { if (columns == 2)
300*de2caf28SDavid du Colombier sprintf(GBuf, "~G%s = ", sp->name);
3017dd7cddfSDavid du Colombier else
302*de2caf28SDavid du Colombier sprintf(GBuf, "%s = ", sp->name);
3037dd7cddfSDavid du Colombier }
304*de2caf28SDavid du Colombier sr_buf(prefetch, sp->type == MTYPE, s);
3057dd7cddfSDavid du Colombier if (sp->colnr == 0)
306*de2caf28SDavid du Colombier { sp->colnr = (unsigned char) maxcolnr;
3077dd7cddfSDavid du Colombier maxcolnr = 1+(maxcolnr%10);
3087dd7cddfSDavid du Colombier }
3097dd7cddfSDavid du Colombier colpos = nproc+sp->colnr-1;
3107dd7cddfSDavid du Colombier if (columns == 2)
311*de2caf28SDavid du Colombier { pstext(colpos, GBuf);
3127dd7cddfSDavid du Colombier continue;
3137dd7cddfSDavid du Colombier }
3147dd7cddfSDavid du Colombier if (!xspin)
315*de2caf28SDavid du Colombier { printf("\t\t%s\n", GBuf);
3167dd7cddfSDavid du Colombier continue;
3177dd7cddfSDavid du Colombier }
318*de2caf28SDavid du Colombier printf("MSC: ~G %s %s\n", sp->name, GBuf);
3197dd7cddfSDavid du Colombier printf("%3d:\tproc %3d (TRACK) line 1 \"var\" ",
3207dd7cddfSDavid du Colombier depth, colpos);
3217dd7cddfSDavid du Colombier printf("(state 0)\t[printf('MSC: globvar\\\\n')]\n");
3227dd7cddfSDavid du Colombier printf("\t\t%s", sp->name);
32300d97012SDavid du Colombier if (sp->nel > 1 || sp->isarray) printf("[%d]", j);
324*de2caf28SDavid du Colombier printf(" = %s\n", GBuf);
325219b2ee8SDavid du Colombier } } }
326219b2ee8SDavid du Colombier }
327219b2ee8SDavid du Colombier
328219b2ee8SDavid du Colombier void
dumplocal(RunList * r,int final)329*de2caf28SDavid du Colombier dumplocal(RunList *r, int final)
330312a1df1SDavid du Colombier { static Lextok *dummy = ZN;
331f3793cddSDavid du Colombier Symbol *z, *s;
332219b2ee8SDavid du Colombier int i;
333219b2ee8SDavid du Colombier
334f3793cddSDavid du Colombier if (!r) return;
335f3793cddSDavid du Colombier
336f3793cddSDavid du Colombier s = r->symtab;
337f3793cddSDavid du Colombier
338312a1df1SDavid du Colombier if (!dummy)
339*de2caf28SDavid du Colombier { dummy = nn(ZN, NAME, nn(ZN,CONST,ZN,ZN), ZN);
340*de2caf28SDavid du Colombier }
341312a1df1SDavid du Colombier
342219b2ee8SDavid du Colombier for (z = s; z; z = z->next)
343219b2ee8SDavid du Colombier { if (z->type == STRUCT)
3447dd7cddfSDavid du Colombier { dump_struct(z, z->name, r);
3457dd7cddfSDavid du Colombier continue;
3467dd7cddfSDavid du Colombier }
347219b2ee8SDavid du Colombier for (i = 0; i < z->nel; i++)
348*de2caf28SDavid du Colombier { char *t = 0;
349*de2caf28SDavid du Colombier if (z->type == CHAN)
3507dd7cddfSDavid du Colombier { doq(z, i, r);
351219b2ee8SDavid du Colombier continue;
3527dd7cddfSDavid du Colombier }
353*de2caf28SDavid du Colombier
3547dd7cddfSDavid du Colombier if ((verbose&4) && !(verbose&64)
355*de2caf28SDavid du Colombier && !final
3567dd7cddfSDavid du Colombier && (z->setat < depth
3577dd7cddfSDavid du Colombier && jumpsteps != depth))
358*de2caf28SDavid du Colombier { continue;
359*de2caf28SDavid du Colombier }
3607dd7cddfSDavid du Colombier
361219b2ee8SDavid du Colombier dummy->sym = z;
362219b2ee8SDavid du Colombier dummy->lft->val = i;
3637dd7cddfSDavid du Colombier
364219b2ee8SDavid du Colombier printf("\t\t%s(%d):%s",
36500d97012SDavid du Colombier r->n->name, r->pid - Have_claim, z->name);
36600d97012SDavid du Colombier if (z->nel > 1 || z->isarray) printf("[%d]", i);
3677dd7cddfSDavid du Colombier printf(" = ");
368*de2caf28SDavid du Colombier
369*de2caf28SDavid du Colombier if (z->type == MTYPE
370*de2caf28SDavid du Colombier && z->mtype_name)
371*de2caf28SDavid du Colombier { t = z->mtype_name->name;
372*de2caf28SDavid du Colombier }
373*de2caf28SDavid du Colombier sr_mesg(stdout, getval(dummy), z->type == MTYPE, t);
3747dd7cddfSDavid du Colombier printf("\n");
3757dd7cddfSDavid du Colombier if (limited_vis && (z->hidden&2))
3767dd7cddfSDavid du Colombier { int colpos;
377*de2caf28SDavid du Colombier GBuf[0] = '\0';
3787dd7cddfSDavid du Colombier if (!xspin)
3797dd7cddfSDavid du Colombier { if (columns == 2)
380*de2caf28SDavid du Colombier sprintf(GBuf, "~G%s(%d):%s = ",
3817dd7cddfSDavid du Colombier r->n->name, r->pid, z->name);
3827dd7cddfSDavid du Colombier else
383*de2caf28SDavid du Colombier sprintf(GBuf, "%s(%d):%s = ",
3847dd7cddfSDavid du Colombier r->n->name, r->pid, z->name);
3857dd7cddfSDavid du Colombier }
386*de2caf28SDavid du Colombier sr_buf(getval(dummy), z->type==MTYPE, t);
3877dd7cddfSDavid du Colombier if (z->colnr == 0)
388*de2caf28SDavid du Colombier { z->colnr = (unsigned char) maxcolnr;
3897dd7cddfSDavid du Colombier maxcolnr = 1+(maxcolnr%10);
3907dd7cddfSDavid du Colombier }
3917dd7cddfSDavid du Colombier colpos = nproc+z->colnr-1;
3927dd7cddfSDavid du Colombier if (columns == 2)
393*de2caf28SDavid du Colombier { pstext(colpos, GBuf);
3947dd7cddfSDavid du Colombier continue;
3957dd7cddfSDavid du Colombier }
3967dd7cddfSDavid du Colombier if (!xspin)
397*de2caf28SDavid du Colombier { printf("\t\t%s\n", GBuf);
3987dd7cddfSDavid du Colombier continue;
3997dd7cddfSDavid du Colombier }
4007dd7cddfSDavid du Colombier printf("MSC: ~G %s(%d):%s %s\n",
401*de2caf28SDavid du Colombier r->n->name, r->pid, z->name, GBuf);
4027dd7cddfSDavid du Colombier
4037dd7cddfSDavid du Colombier printf("%3d:\tproc %3d (TRACK) line 1 \"var\" ",
4047dd7cddfSDavid du Colombier depth, colpos);
4057dd7cddfSDavid du Colombier printf("(state 0)\t[printf('MSC: locvar\\\\n')]\n");
4067dd7cddfSDavid du Colombier printf("\t\t%s(%d):%s",
4077dd7cddfSDavid du Colombier r->n->name, r->pid, z->name);
40800d97012SDavid du Colombier if (z->nel > 1 || z->isarray) printf("[%d]", i);
409*de2caf28SDavid du Colombier printf(" = %s\n", GBuf);
410219b2ee8SDavid du Colombier } } }
411219b2ee8SDavid du Colombier }
412