blob: eb4e48f459eb8ae4e19f7867f6789031f0a8e7e7 [file] [log] [blame]
#include "sam.h"
static char *emsg[]={
/* error_s */
"can't open",
"can't create",
"not in menu:",
"changes to",
"I/O error:",
"can't write while changing:",
/* error_c */
"unknown command",
"no operand for",
"bad delimiter",
/* error */
"can't fork",
"interrupt",
"address",
"search",
"pattern",
"newline expected",
"blank expected",
"pattern expected",
"can't nest X or Y",
"unmatched `}'",
"command takes no address",
"addresses overlap",
"substitution",
"& match too long",
"bad \\ in rhs",
"address range",
"changes not in sequence",
"addresses out of order",
"no file name",
"unmatched `('",
"unmatched `)'",
"malformed `[]'",
"malformed regexp",
"reg. exp. list overflow",
"plan 9 command",
"can't pipe",
"no current file",
"string too long",
"changed files",
"empty string",
"file search",
"non-unique match for \"\"",
"tag match too long",
"too many subexpressions",
"temporary file too large",
"file is append-only",
"no destination for plumb message",
"internal read error in buffer load"
};
static char *wmsg[]={
/* warn_s */
"duplicate file name",
"no such file",
"write might change good version of",
/* warn_S */
"files might be aliased",
/* warn */
"null characters elided",
"can't run pwd",
"last char not newline",
"exit status not 0"
};
void
error(Err s)
{
char buf[512];
sprint(buf, "?%s", emsg[s]);
hiccough(buf);
}
void
error_s(Err s, char *a)
{
char buf[512];
sprint(buf, "?%s \"%s\"", emsg[s], a);
hiccough(buf);
}
void
error_r(Err s, char *a)
{
char buf[512];
sprint(buf, "?%s \"%s\": %r", emsg[s], a);
hiccough(buf);
}
void
error_c(Err s, int c)
{
char buf[512];
sprint(buf, "?%s `%C'", emsg[s], c);
hiccough(buf);
}
void
warn(Warn s)
{
dprint("?warning: %s\n", wmsg[s]);
}
void
warn_S(Warn s, String *a)
{
print_s(wmsg[s], a);
}
void
warn_SS(Warn s, String *a, String *b)
{
print_ss(wmsg[s], a, b);
}
void
warn_s(Warn s, char *a)
{
dprint("?warning: %s `%s'\n", wmsg[s], a);
}
void
termwrite(char *s)
{
String *p;
if(downloaded){
p = tmpcstr(s);
if(cmd)
loginsert(cmd, cmdpt, p->s, p->n);
else
Strinsert(&cmdstr, p, cmdstr.n);
cmdptadv += p->n;
free(p);
}else
Write(2, s, strlen(s));
}