xref: /plan9-contrib/sys/src/cmd/rc/subr.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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