1 #include "rc.h" 2 #include "exec.h" 3 #include "io.h" 4 #include "fns.h" 5 char *emalloc(long n){ 6 char *p=(char *)Malloc(n); 7 if(p==0) panic("Can't malloc %d bytes", n); 8 /* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/ 9 return p; 10 } 11 void efree(char *p) 12 { 13 /* pfmt(err, "free %p\n", p); flush(err); /**/ 14 if(p) free(p); 15 else pfmt(err, "free 0\n"); 16 } 17 extern int lastword, lastdol; 18 void yyerror(char *m) 19 { 20 pfmt(err, "rc: "); 21 if(runq->cmdfile && !runq->iflag) 22 pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno); 23 else if(runq->cmdfile) 24 pfmt(err, "%s: ", runq->cmdfile); 25 else if(!runq->iflag) 26 pfmt(err, "line %d: ", runq->lineno); 27 if(tok[0] && tok[0]!='\n') pfmt(err, "token %q: ", tok); 28 pfmt(err, "%s\n", m); 29 flush(err); 30 lastword=0; 31 lastdol=0; 32 while(lastc!='\n' && lastc!=EOF) advance(); 33 nerror++; 34 setvar("status", newword(m, (word *)0)); 35 } 36 char *bp; 37 void iacvt(int n){ 38 if(n<0){ 39 *bp++='-'; 40 n=-n; /* doesn't work for n==-inf */ 41 } 42 if(n/10) 43 iacvt(n/10); 44 *bp++=n%10+'0'; 45 } 46 void itoa(char *s, long n) 47 { 48 bp=s; 49 iacvt(n); 50 *bp='\0'; 51 } 52 void panic(char *s, int n) 53 { 54 pfmt(err, "rc: "); 55 pfmt(err, s, n); 56 pchr(err, '\n'); 57 flush(err); 58 Abort(); 59 } 60