1 /* $Header: stab.c,v 1.0 87/12/18 13:06:14 root Exp $
4 * Revision 1.0 87/12/18 13:06:14 root
16 static char *sig_name[] = {
72 switch (*stab->stab_name) {
73 case '0': case '1': case '2': case '3': case '4':
74 case '5': case '6': case '7': case '8': case '9': case '&':
76 paren = atoi(stab->stab_name);
77 if (curspat->spat_compex.subend[paren] &&
78 (s = getparen(&curspat->spat_compex,paren))) {
79 curspat->spat_compex.subend[paren] = Nullch;
80 str_set(stab->stab_val,s);
86 paren = curspat->spat_compex.lastparen;
87 if (curspat->spat_compex.subend[paren] &&
88 (s = getparen(&curspat->spat_compex,paren))) {
89 curspat->spat_compex.subend[paren] = Nullch;
90 str_set(stab->stab_val,s);
96 str_numset(stab->stab_val,(double)last_in_stab->stab_io->lines);
100 str_numset(stab->stab_val,(double)statusvalue);
103 s = curoutstab->stab_io->top_name;
104 str_set(stab->stab_val,s);
107 s = curoutstab->stab_io->fmt_name;
108 str_set(stab->stab_val,s);
111 str_numset(stab->stab_val,(double)curoutstab->stab_io->lines);
114 str_numset(stab->stab_val,(double)curoutstab->stab_io->lines_left);
117 str_numset(stab->stab_val,(double)curoutstab->stab_io->page);
121 str_numset(stab->stab_val,(double)(curspat->spat_compex.subbeg[0] -
122 curspat->spat_compex.subbase));
127 str_numset(stab->stab_val,(double)(curspat->spat_compex.subend[0] -
128 curspat->spat_compex.subbeg[0]));
132 *tokenbuf = record_separator;
134 str_set(stab->stab_val,tokenbuf);
137 str_numset(stab->stab_val,(double)arybase);
140 str_numset(stab->stab_val,
141 (double)((curoutstab->stab_io->flags & IOF_FLUSH) != 0) );
144 str_set(stab->stab_val,ofs);
147 str_set(stab->stab_val,ors);
150 str_set(stab->stab_val,ofmt);
153 str_numset(stab->stab_val,(double)errno);
156 return stab->stab_val;
167 if (stab->stab_flags & SF_VMAGIC) {
168 switch (stab->stab_name[0]) {
170 safefree(curoutstab->stab_io->top_name);
171 curoutstab->stab_io->top_name = str_get(str);
172 curoutstab->stab_io->top_stab = stabent(str_get(str),FALSE);
175 safefree(curoutstab->stab_io->fmt_name);
176 curoutstab->stab_io->fmt_name = str_get(str);
177 curoutstab->stab_io->fmt_stab = stabent(str_get(str),FALSE);
180 curoutstab->stab_io->page_len = (long)str_gnum(str);
183 curoutstab->stab_io->lines_left = (long)str_gnum(str);
186 curoutstab->stab_io->page = (long)str_gnum(str);
189 curoutstab->stab_io->flags &= ~IOF_FLUSH;
190 if (str_gnum(str) != 0.0) {
191 curoutstab->stab_io->flags |= IOF_FLUSH;
195 multiline = (int)str_gnum(str) != 0;
198 record_separator = *str_get(str);
203 ors = savestr(str_get(str));
208 ofs = savestr(str_get(str));
213 ofmt = savestr(str_get(str));
216 arybase = (int)str_gnum(str);
219 errno = (int)str_gnum(str); /* will anyone ever use this? */
236 break; /* "read-only" registers */
239 else if (stab == envstab && envname) {
240 setenv(envname,str_get(str));
241 /* And you'll never guess what the dog had */
242 safefree(envname); /* in its mouth... */
245 else if (stab == sigstab && signame) {
247 i = whichsig(signame); /* ...no, a brick */
248 if (strEQ(s,"IGNORE"))
250 else if (strEQ(s,"DEFAULT") || !*s)
253 signal(i,sighandler);
262 register char **sigv;
264 for (sigv = sig_name+1; *sigv; sigv++)
265 if (strEQ(signame,*sigv))
266 return sigv - sig_name;
277 stab = stabent(str_get(hfetch(sigstab->stab_hash,sig_name[sig])),FALSE);
278 savearray = defstab->stab_array;
279 defstab->stab_array = anew();
281 str_set(str,sig_name[sig]);
282 apush(defstab->stab_array,str);
283 str = cmd_exec(stab->stab_sub);
284 afree(defstab->stab_array); /* put back old $_[] */
285 defstab->stab_array = savearray;
292 return STAB_GET(stabent(name,TRUE));
300 str_set(STAB_STR(stabent(name,TRUE)),value);
308 if (!stab->stab_array)
309 stab->stab_array = anew();
317 if (!stab->stab_hash)
318 stab->stab_hash = hnew();