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