xref: /plan9/sys/src/cmd/sam/error.c (revision c35931e294c3b1d49a408159df49beb0cfbb8c50)
1 #include "sam.h"
2 
3 static char *emsg[]={
4 	/* error_s */
5 	"can't open",
6 	"can't create",
7 	"not in menu:",
8 	"changes to",
9 	"I/O error:",
10 	"can't write while changing:",
11 	/* error_c */
12 	"unknown command",
13 	"no operand for",
14 	"bad delimiter",
15 	/* error */
16 	"can't fork",
17 	"interrupt",
18 	"address",
19 	"search",
20 	"pattern",
21 	"newline expected",
22 	"blank expected",
23 	"pattern expected",
24 	"can't nest X or Y",
25 	"unmatched `}'",
26 	"command takes no address",
27 	"addresses overlap",
28 	"substitution",
29 	"& match too long",
30 	"bad \\ in rhs",
31 	"address range",
32 	"changes not in sequence",
33 	"addresses out of order",
34 	"no file name",
35 	"unmatched `('",
36 	"unmatched `)'",
37 	"malformed `[]'",
38 	"malformed regexp",
39 	"reg. exp. list overflow",
40 	"plan 9 command",
41 	"can't pipe",
42 	"no current file",
43 	"string too long",
44 	"changed files",
45 	"empty string",
46 	"file search",
47 	"non-unique match for \"\"",
48 	"tag match too long",
49 	"too many subexpressions",
50 	"temporary file too large",
51 	"file is append-only",
52 	"no destination for plumb message",
53 	"internal read error in buffer load",
54 };
55 static char *wmsg[]={
56 	/* warn_s */
57 	"duplicate file name",
58 	"no such file",
59 	"write might change good version of",
60 	/* warn_S */
61 	"files might be aliased",
62 	/* warn */
63 	"null characters elided",
64 	"can't run pwd",
65 	"last char not newline",
66 	"exit status",
67 };
68 
69 void
error(Err s)70 error(Err s)
71 {
72 	char buf[512];
73 
74 	sprint(buf, "?%s", emsg[s]);
75 	hiccough(buf);
76 }
77 
78 void
error_s(Err s,char * a)79 error_s(Err s, char *a)
80 {
81 	char buf[512];
82 
83 	sprint(buf, "?%s \"%s\"", emsg[s], a);
84 	hiccough(buf);
85 }
86 
87 void
error_r(Err s,char * a)88 error_r(Err s, char *a)
89 {
90 	char buf[512];
91 
92 	sprint(buf, "?%s \"%s\": %r", emsg[s], a);
93 	hiccough(buf);
94 }
95 
96 void
error_c(Err s,int c)97 error_c(Err s, int c)
98 {
99 	char buf[512];
100 
101 	sprint(buf, "?%s `%C'", emsg[s], c);
102 	hiccough(buf);
103 }
104 
105 void
warn(Warn s)106 warn(Warn s)
107 {
108 	dprint("?warning: %s\n", wmsg[s]);
109 }
110 
111 void
warn_S(Warn s,String * a)112 warn_S(Warn s, String *a)
113 {
114 	print_s(wmsg[s], a);
115 }
116 
117 void
warn_SS(Warn s,String * a,String * b)118 warn_SS(Warn s, String *a, String *b)
119 {
120 	print_ss(wmsg[s], a, b);
121 }
122 
123 void
warn_s(Warn s,char * a)124 warn_s(Warn s, char *a)
125 {
126 	dprint("?warning: %s `%s'\n", wmsg[s], a);
127 }
128 
129 void
termwrite(char * s)130 termwrite(char *s)
131 {
132 	String *p;
133 
134 	if(downloaded){
135 		p = tmpcstr(s);
136 		if(cmd)
137 			loginsert(cmd, cmdpt, p->s, p->n);
138 		else
139 			Strinsert(&cmdstr, p, cmdstr.n);
140 		cmdptadv += p->n;
141 		free(p);
142 	}else
143 		Write(2, s, strlen(s));
144 }
145