#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();
}
