1 /* $Header: stab.c,v 1.0.1.2 88/02/02 11:25:53 root Exp $
4 * Revision 1.0.1.2 88/02/02 11:25:53 root
5 * patch13: moved extern int out of function for a poor Xenix machine.
7 * Revision 1.0.1.1 88/01/28 10:35:17 root
8 * patch8: changed some stabents to support eval operator.
10 * Revision 1.0 87/12/18 13:06:14 root
22 static char *sig_name[] = {
79 switch (*stab->stab_name) {
80 case '0': case '1': case '2': case '3': case '4':
81 case '5': case '6': case '7': case '8': case '9': case '&':
83 paren = atoi(stab->stab_name);
84 if (curspat->spat_compex.subend[paren] &&
85 (s = getparen(&curspat->spat_compex,paren))) {
86 curspat->spat_compex.subend[paren] = Nullch;
87 str_set(stab->stab_val,s);
93 paren = curspat->spat_compex.lastparen;
94 if (curspat->spat_compex.subend[paren] &&
95 (s = getparen(&curspat->spat_compex,paren))) {
96 curspat->spat_compex.subend[paren] = Nullch;
97 str_set(stab->stab_val,s);
103 str_numset(stab->stab_val,(double)last_in_stab->stab_io->lines);
107 str_numset(stab->stab_val,(double)statusvalue);
110 s = curoutstab->stab_io->top_name;
111 str_set(stab->stab_val,s);
114 s = curoutstab->stab_io->fmt_name;
115 str_set(stab->stab_val,s);
118 str_numset(stab->stab_val,(double)curoutstab->stab_io->lines);
121 str_numset(stab->stab_val,(double)curoutstab->stab_io->lines_left);
124 str_numset(stab->stab_val,(double)curoutstab->stab_io->page);
128 str_numset(stab->stab_val,(double)(curspat->spat_compex.subbeg[0] -
129 curspat->spat_compex.subbase));
134 str_numset(stab->stab_val,(double)(curspat->spat_compex.subend[0] -
135 curspat->spat_compex.subbeg[0]));
139 *tokenbuf = record_separator;
141 str_set(stab->stab_val,tokenbuf);
144 str_numset(stab->stab_val,(double)arybase);
147 str_numset(stab->stab_val,
148 (double)((curoutstab->stab_io->flags & IOF_FLUSH) != 0) );
151 str_set(stab->stab_val,ofs);
154 str_set(stab->stab_val,ors);
157 str_set(stab->stab_val,ofmt);
160 str_numset(stab->stab_val,(double)errno);
163 return stab->stab_val;
174 if (stab->stab_flags & SF_VMAGIC) {
175 switch (stab->stab_name[0]) {
177 safefree(curoutstab->stab_io->top_name);
178 curoutstab->stab_io->top_name = str_get(str);
179 curoutstab->stab_io->top_stab = stabent(str_get(str),TRUE);
182 safefree(curoutstab->stab_io->fmt_name);
183 curoutstab->stab_io->fmt_name = str_get(str);
184 curoutstab->stab_io->fmt_stab = stabent(str_get(str),TRUE);
187 curoutstab->stab_io->page_len = (long)str_gnum(str);
190 curoutstab->stab_io->lines_left = (long)str_gnum(str);
193 curoutstab->stab_io->page = (long)str_gnum(str);
196 curoutstab->stab_io->flags &= ~IOF_FLUSH;
197 if (str_gnum(str) != 0.0) {
198 curoutstab->stab_io->flags |= IOF_FLUSH;
202 multiline = (int)str_gnum(str) != 0;
205 record_separator = *str_get(str);
210 ors = savestr(str_get(str));
215 ofs = savestr(str_get(str));
220 ofmt = savestr(str_get(str));
223 arybase = (int)str_gnum(str);
226 errno = (int)str_gnum(str); /* will anyone ever use this? */
243 break; /* "read-only" registers */
246 else if (stab == envstab && envname) {
247 setenv(envname,str_get(str));
248 /* And you'll never guess what the dog had */
249 safefree(envname); /* in its mouth... */
252 else if (stab == sigstab && signame) {
254 i = whichsig(signame); /* ...no, a brick */
255 if (strEQ(s,"IGNORE"))
257 else if (strEQ(s,"DEFAULT") || !*s)
260 signal(i,sighandler);
269 register char **sigv;
271 for (sigv = sig_name+1; *sigv; sigv++)
272 if (strEQ(signame,*sigv))
273 return sigv - sig_name;
284 stab = stabent(str_get(hfetch(sigstab->stab_hash,sig_name[sig])),TRUE);
285 savearray = defstab->stab_array;
286 defstab->stab_array = anew();
288 str_set(str,sig_name[sig]);
289 apush(defstab->stab_array,str);
290 str = cmd_exec(stab->stab_sub);
291 afree(defstab->stab_array); /* put back old $_[] */
292 defstab->stab_array = savearray;
299 return STAB_GET(stabent(name,TRUE));
307 str_set(STAB_STR(stabent(name,TRUE)),value);
315 if (!stab->stab_array)
316 stab->stab_array = anew();
324 if (!stab->stab_hash)
325 stab->stab_hash = hnew();