| #include "rc.h" |
| #include "exec.h" |
| #include "io.h" |
| #include "fns.h" |
| char *emalloc(long n){ |
| char *p=(char *)Malloc(n); |
| if(p==0) panic("Can't malloc %d bytes", n); |
| /* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } */ |
| return p; |
| } |
| void efree(char *p) |
| { |
| /* pfmt(err, "free %p\n", p); flush(err); */ |
| if(p) free(p); |
| else pfmt(err, "free 0\n"); |
| } |
| extern int lastword, lastdol; |
| void yyerror(char *m) |
| { |
| pfmt(err, "rc: "); |
| if(runq->cmdfile && !runq->iflag) |
| pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno); |
| else if(runq->cmdfile) |
| pfmt(err, "%s: ", runq->cmdfile); |
| else if(!runq->iflag) |
| pfmt(err, "line %d: ", runq->lineno); |
| if(tok[0] && tok[0]!='\n') pfmt(err, "token %q: ", tok); |
| pfmt(err, "%s\n", m); |
| flush(err); |
| lastword=0; |
| lastdol=0; |
| while(lastc!='\n' && lastc!=EOF) advance(); |
| nerror++; |
| setvar("status", newword(m, (word *)0)); |
| } |
| char *bp; |
| void iacvt(int n){ |
| if(n<0){ |
| *bp++='-'; |
| n=-n; /* doesn't work for n==-inf */ |
| } |
| if(n/10) |
| iacvt(n/10); |
| *bp++=n%10+'0'; |
| } |
| void itoa(char *s, long n) |
| { |
| bp=s; |
| iacvt(n); |
| *bp='\0'; |
| } |
| void panic(char *s, int n) |
| { |
| pfmt(err, "rc: "); |
| pfmt(err, s, n); |
| pchr(err, '\n'); |
| flush(err); |
| Abort(); |
| } |