13e12c5d1SDavid du Colombier #include "rc.h" 23e12c5d1SDavid du Colombier #include "exec.h" 33e12c5d1SDavid du Colombier #include "io.h" 43e12c5d1SDavid du Colombier #include "fns.h" 53e12c5d1SDavid du Colombier char *emalloc(long n){ 63e12c5d1SDavid du Colombier char *p=(char *)Malloc(n); 73e12c5d1SDavid du Colombier if(p==0) panic("Can't malloc %d bytes", n); 83e12c5d1SDavid du Colombier /* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/ 93e12c5d1SDavid du Colombier return p; 103e12c5d1SDavid du Colombier } 113e12c5d1SDavid du Colombier void efree(char *p) 123e12c5d1SDavid du Colombier { 133e12c5d1SDavid du Colombier /* pfmt(err, "free %p\n", p); flush(err); /**/ 143e12c5d1SDavid du Colombier if(p) free(p); 153e12c5d1SDavid du Colombier else pfmt(err, "free 0\n"); 163e12c5d1SDavid du Colombier } 17219b2ee8SDavid du Colombier extern int lastword, lastdol; 183e12c5d1SDavid du Colombier void yyerror(char *m) 193e12c5d1SDavid du Colombier { 203e12c5d1SDavid du Colombier pfmt(err, "rc: "); 21*7dd7cddfSDavid du Colombier if(runq->cmdfile && !runq->iflag) 22*7dd7cddfSDavid du Colombier pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno); 23*7dd7cddfSDavid du Colombier else if(runq->cmdfile) 24*7dd7cddfSDavid du Colombier pfmt(err, "%s: ", runq->cmdfile); 25*7dd7cddfSDavid du Colombier else if(!runq->iflag) 26*7dd7cddfSDavid du Colombier pfmt(err, "line %d: ", runq->lineno); 273e12c5d1SDavid du Colombier if(tok[0] && tok[0]!='\n') pfmt(err, "token %q: ", tok); 283e12c5d1SDavid du Colombier pfmt(err, "%s\n", m); 293e12c5d1SDavid du Colombier flush(err); 30219b2ee8SDavid du Colombier lastword=0; 31219b2ee8SDavid du Colombier lastdol=0; 323e12c5d1SDavid du Colombier while(lastc!='\n' && lastc!=EOF) advance(); 333e12c5d1SDavid du Colombier nerror++; 34*7dd7cddfSDavid du Colombier setvar("status", newword(m, (word *)0)); 353e12c5d1SDavid du Colombier } 363e12c5d1SDavid du Colombier char *bp; 373e12c5d1SDavid du Colombier void iacvt(int n){ 383e12c5d1SDavid du Colombier if(n<0){ 393e12c5d1SDavid du Colombier *bp++='-'; 403e12c5d1SDavid du Colombier n=-n; /* doesn't work for n==-inf */ 413e12c5d1SDavid du Colombier } 423e12c5d1SDavid du Colombier if(n/10) 433e12c5d1SDavid du Colombier iacvt(n/10); 443e12c5d1SDavid du Colombier *bp++=n%10+'0'; 453e12c5d1SDavid du Colombier } 46*7dd7cddfSDavid du Colombier void itoa(char *s, long n) 473e12c5d1SDavid du Colombier { 483e12c5d1SDavid du Colombier bp=s; 493e12c5d1SDavid du Colombier iacvt(n); 503e12c5d1SDavid du Colombier *bp='\0'; 513e12c5d1SDavid du Colombier } 523e12c5d1SDavid du Colombier void panic(char *s, int n) 533e12c5d1SDavid du Colombier { 543e12c5d1SDavid du Colombier pfmt(err, "rc: "); 553e12c5d1SDavid du Colombier pfmt(err, s, n); 563e12c5d1SDavid du Colombier pchr(err, '\n'); 573e12c5d1SDavid du Colombier flush(err); 583e12c5d1SDavid du Colombier Abort(); 593e12c5d1SDavid du Colombier } 60