13e12c5d1SDavid du Colombier #include "rc.h"
23e12c5d1SDavid du Colombier #include "exec.h"
33e12c5d1SDavid du Colombier #include "io.h"
43e12c5d1SDavid du Colombier #include "fns.h"
5dc5a79c1SDavid du Colombier
6276e7d6dSDavid du Colombier void *
emalloc(long n)7dc5a79c1SDavid du Colombier emalloc(long n)
8dc5a79c1SDavid du Colombier {
9276e7d6dSDavid du Colombier void *p = Malloc(n);
10276e7d6dSDavid du Colombier
11dc5a79c1SDavid du Colombier if(p==0)
12dc5a79c1SDavid du Colombier panic("Can't malloc %d bytes", n);
133e12c5d1SDavid du Colombier /* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/
143e12c5d1SDavid du Colombier return p;
153e12c5d1SDavid du Colombier }
16dc5a79c1SDavid du Colombier
17dc5a79c1SDavid du Colombier void
efree(void * p)18276e7d6dSDavid du Colombier efree(void *p)
193e12c5d1SDavid du Colombier {
203e12c5d1SDavid du Colombier /* pfmt(err, "free %p\n", p); flush(err); /**/
21dc5a79c1SDavid du Colombier if(p)
22dc5a79c1SDavid du Colombier free(p);
23*99eb86a7SDavid du Colombier else pfmt(err, "free 0\n");
243e12c5d1SDavid du Colombier }
25219b2ee8SDavid du Colombier extern int lastword, lastdol;
26dc5a79c1SDavid du Colombier
27dc5a79c1SDavid du Colombier void
yyerror(char * m)28dc5a79c1SDavid du Colombier yyerror(char *m)
293e12c5d1SDavid du Colombier {
303e12c5d1SDavid du Colombier pfmt(err, "rc: ");
317dd7cddfSDavid du Colombier if(runq->cmdfile && !runq->iflag)
327dd7cddfSDavid du Colombier pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno);
337dd7cddfSDavid du Colombier else if(runq->cmdfile)
347dd7cddfSDavid du Colombier pfmt(err, "%s: ", runq->cmdfile);
357dd7cddfSDavid du Colombier else if(!runq->iflag)
367dd7cddfSDavid du Colombier pfmt(err, "line %d: ", runq->lineno);
37dc5a79c1SDavid du Colombier if(tok[0] && tok[0]!='\n')
38dc5a79c1SDavid du Colombier pfmt(err, "token %q: ", tok);
393e12c5d1SDavid du Colombier pfmt(err, "%s\n", m);
403e12c5d1SDavid du Colombier flush(err);
41219b2ee8SDavid du Colombier lastword = 0;
42219b2ee8SDavid du Colombier lastdol = 0;
43*99eb86a7SDavid du Colombier while(lastc!='\n' && lastc!=EOF) advance();
443e12c5d1SDavid du Colombier nerror++;
457dd7cddfSDavid du Colombier setvar("status", newword(m, (word *)0));
463e12c5d1SDavid du Colombier }
473e12c5d1SDavid du Colombier char *bp;
48dc5a79c1SDavid du Colombier
49dc5a79c1SDavid du Colombier static void
iacvt(int n)50dc5a79c1SDavid du Colombier iacvt(int n)
51dc5a79c1SDavid du Colombier {
523e12c5d1SDavid du Colombier if(n<0){
533e12c5d1SDavid du Colombier *bp++='-';
543e12c5d1SDavid du Colombier n=-n; /* doesn't work for n==-inf */
553e12c5d1SDavid du Colombier }
563e12c5d1SDavid du Colombier if(n/10)
573e12c5d1SDavid du Colombier iacvt(n/10);
583e12c5d1SDavid du Colombier *bp++=n%10+'0';
593e12c5d1SDavid du Colombier }
60dc5a79c1SDavid du Colombier
61dc5a79c1SDavid du Colombier void
inttoascii(char * s,long n)62dc5a79c1SDavid du Colombier inttoascii(char *s, long n)
633e12c5d1SDavid du Colombier {
643e12c5d1SDavid du Colombier bp = s;
653e12c5d1SDavid du Colombier iacvt(n);
663e12c5d1SDavid du Colombier *bp='\0';
673e12c5d1SDavid du Colombier }
68dc5a79c1SDavid du Colombier
69dc5a79c1SDavid du Colombier void
panic(char * s,int n)70dc5a79c1SDavid du Colombier panic(char *s, int n)
713e12c5d1SDavid du Colombier {
723e12c5d1SDavid du Colombier pfmt(err, "rc: ");
733e12c5d1SDavid du Colombier pfmt(err, s, n);
743e12c5d1SDavid du Colombier pchr(err, '\n');
753e12c5d1SDavid du Colombier flush(err);
763e12c5d1SDavid du Colombier Abort();
773e12c5d1SDavid du Colombier }
78