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