xref: /plan9/sys/src/cmd/sam/error.c (revision c35931e294c3b1d49a408159df49beb0cfbb8c50)
13e12c5d1SDavid du Colombier #include "sam.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier static char *emsg[]={
43e12c5d1SDavid du Colombier 	/* error_s */
53e12c5d1SDavid du Colombier 	"can't open",
63e12c5d1SDavid du Colombier 	"can't create",
73e12c5d1SDavid du Colombier 	"not in menu:",
83e12c5d1SDavid du Colombier 	"changes to",
93e12c5d1SDavid du Colombier 	"I/O error:",
107dd7cddfSDavid du Colombier 	"can't write while changing:",
113e12c5d1SDavid du Colombier 	/* error_c */
123e12c5d1SDavid du Colombier 	"unknown command",
133e12c5d1SDavid du Colombier 	"no operand for",
143e12c5d1SDavid du Colombier 	"bad delimiter",
153e12c5d1SDavid du Colombier 	/* error */
163e12c5d1SDavid du Colombier 	"can't fork",
173e12c5d1SDavid du Colombier 	"interrupt",
183e12c5d1SDavid du Colombier 	"address",
193e12c5d1SDavid du Colombier 	"search",
203e12c5d1SDavid du Colombier 	"pattern",
213e12c5d1SDavid du Colombier 	"newline expected",
223e12c5d1SDavid du Colombier 	"blank expected",
233e12c5d1SDavid du Colombier 	"pattern expected",
243e12c5d1SDavid du Colombier 	"can't nest X or Y",
253e12c5d1SDavid du Colombier 	"unmatched `}'",
263e12c5d1SDavid du Colombier 	"command takes no address",
273e12c5d1SDavid du Colombier 	"addresses overlap",
283e12c5d1SDavid du Colombier 	"substitution",
293e12c5d1SDavid du Colombier 	"& match too long",
303e12c5d1SDavid du Colombier 	"bad \\ in rhs",
313e12c5d1SDavid du Colombier 	"address range",
323e12c5d1SDavid du Colombier 	"changes not in sequence",
333e12c5d1SDavid du Colombier 	"addresses out of order",
343e12c5d1SDavid du Colombier 	"no file name",
353e12c5d1SDavid du Colombier 	"unmatched `('",
363e12c5d1SDavid du Colombier 	"unmatched `)'",
373e12c5d1SDavid du Colombier 	"malformed `[]'",
383e12c5d1SDavid du Colombier 	"malformed regexp",
393e12c5d1SDavid du Colombier 	"reg. exp. list overflow",
403e12c5d1SDavid du Colombier 	"plan 9 command",
413e12c5d1SDavid du Colombier 	"can't pipe",
423e12c5d1SDavid du Colombier 	"no current file",
433e12c5d1SDavid du Colombier 	"string too long",
443e12c5d1SDavid du Colombier 	"changed files",
453e12c5d1SDavid du Colombier 	"empty string",
463e12c5d1SDavid du Colombier 	"file search",
473e12c5d1SDavid du Colombier 	"non-unique match for \"\"",
483e12c5d1SDavid du Colombier 	"tag match too long",
493e12c5d1SDavid du Colombier 	"too many subexpressions",
503e12c5d1SDavid du Colombier 	"temporary file too large",
51219b2ee8SDavid du Colombier 	"file is append-only",
527dd7cddfSDavid du Colombier 	"no destination for plumb message",
537dd7cddfSDavid du Colombier 	"internal read error in buffer load",
543e12c5d1SDavid du Colombier };
553e12c5d1SDavid du Colombier static char *wmsg[]={
563e12c5d1SDavid du Colombier 	/* warn_s */
573e12c5d1SDavid du Colombier 	"duplicate file name",
583e12c5d1SDavid du Colombier 	"no such file",
593e12c5d1SDavid du Colombier 	"write might change good version of",
60bd389b36SDavid du Colombier 	/* warn_S */
61bd389b36SDavid du Colombier 	"files might be aliased",
623e12c5d1SDavid du Colombier 	/* warn */
633e12c5d1SDavid du Colombier 	"null characters elided",
643e12c5d1SDavid du Colombier 	"can't run pwd",
653e12c5d1SDavid du Colombier 	"last char not newline",
66*c35931e2SDavid du Colombier 	"exit status",
673e12c5d1SDavid du Colombier };
683e12c5d1SDavid du Colombier 
693e12c5d1SDavid du Colombier void
error(Err s)703e12c5d1SDavid du Colombier error(Err s)
713e12c5d1SDavid du Colombier {
723e12c5d1SDavid du Colombier 	char buf[512];
733e12c5d1SDavid du Colombier 
743e12c5d1SDavid du Colombier 	sprint(buf, "?%s", emsg[s]);
753e12c5d1SDavid du Colombier 	hiccough(buf);
763e12c5d1SDavid du Colombier }
773e12c5d1SDavid du Colombier 
783e12c5d1SDavid du Colombier void
error_s(Err s,char * a)793e12c5d1SDavid du Colombier error_s(Err s, char *a)
803e12c5d1SDavid du Colombier {
813e12c5d1SDavid du Colombier 	char buf[512];
823e12c5d1SDavid du Colombier 
833e12c5d1SDavid du Colombier 	sprint(buf, "?%s \"%s\"", emsg[s], a);
843e12c5d1SDavid du Colombier 	hiccough(buf);
853e12c5d1SDavid du Colombier }
863e12c5d1SDavid du Colombier 
873e12c5d1SDavid du Colombier void
error_r(Err s,char * a)889a747e4fSDavid du Colombier error_r(Err s, char *a)
899a747e4fSDavid du Colombier {
909a747e4fSDavid du Colombier 	char buf[512];
919a747e4fSDavid du Colombier 
929a747e4fSDavid du Colombier 	sprint(buf, "?%s \"%s\": %r", emsg[s], a);
939a747e4fSDavid du Colombier 	hiccough(buf);
949a747e4fSDavid du Colombier }
959a747e4fSDavid du Colombier 
969a747e4fSDavid du Colombier void
error_c(Err s,int c)973e12c5d1SDavid du Colombier error_c(Err s, int c)
983e12c5d1SDavid du Colombier {
993e12c5d1SDavid du Colombier 	char buf[512];
1003e12c5d1SDavid du Colombier 
1013e12c5d1SDavid du Colombier 	sprint(buf, "?%s `%C'", emsg[s], c);
1023e12c5d1SDavid du Colombier 	hiccough(buf);
1033e12c5d1SDavid du Colombier }
1043e12c5d1SDavid du Colombier 
1053e12c5d1SDavid du Colombier void
warn(Warn s)1063e12c5d1SDavid du Colombier warn(Warn s)
1073e12c5d1SDavid du Colombier {
1083e12c5d1SDavid du Colombier 	dprint("?warning: %s\n", wmsg[s]);
1093e12c5d1SDavid du Colombier }
1103e12c5d1SDavid du Colombier 
1113e12c5d1SDavid du Colombier void
warn_S(Warn s,String * a)1123e12c5d1SDavid du Colombier warn_S(Warn s, String *a)
1133e12c5d1SDavid du Colombier {
114bd389b36SDavid du Colombier 	print_s(wmsg[s], a);
115bd389b36SDavid du Colombier }
1163e12c5d1SDavid du Colombier 
117bd389b36SDavid du Colombier void
warn_SS(Warn s,String * a,String * b)118bd389b36SDavid du Colombier warn_SS(Warn s, String *a, String *b)
119bd389b36SDavid du Colombier {
120bd389b36SDavid du Colombier 	print_ss(wmsg[s], a, b);
1213e12c5d1SDavid du Colombier }
1223e12c5d1SDavid du Colombier 
1233e12c5d1SDavid du Colombier void
warn_s(Warn s,char * a)1243e12c5d1SDavid du Colombier warn_s(Warn s, char *a)
1253e12c5d1SDavid du Colombier {
1263e12c5d1SDavid du Colombier 	dprint("?warning: %s `%s'\n", wmsg[s], a);
1273e12c5d1SDavid du Colombier }
1283e12c5d1SDavid du Colombier 
1293e12c5d1SDavid du Colombier void
termwrite(char * s)1303e12c5d1SDavid du Colombier termwrite(char *s)
1313e12c5d1SDavid du Colombier {
1323e12c5d1SDavid du Colombier 	String *p;
1333e12c5d1SDavid du Colombier 
1343e12c5d1SDavid du Colombier 	if(downloaded){
1353e12c5d1SDavid du Colombier 		p = tmpcstr(s);
1363e12c5d1SDavid du Colombier 		if(cmd)
1377dd7cddfSDavid du Colombier 			loginsert(cmd, cmdpt, p->s, p->n);
1383e12c5d1SDavid du Colombier 		else
1393e12c5d1SDavid du Colombier 			Strinsert(&cmdstr, p, cmdstr.n);
1403e12c5d1SDavid du Colombier 		cmdptadv += p->n;
1417dd7cddfSDavid du Colombier 		free(p);
1423e12c5d1SDavid du Colombier 	}else
1433e12c5d1SDavid du Colombier 		Write(2, s, strlen(s));
1443e12c5d1SDavid du Colombier }
145