Blob
1 #include "sam.h"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 not 0"67 };69 void70 error(Err s)71 {72 char buf[512];74 sprint(buf, "?%s", emsg[s]);75 hiccough(buf);76 }78 void79 error_s(Err s, char *a)80 {81 char buf[512];83 sprint(buf, "?%s \"%s\"", emsg[s], a);84 hiccough(buf);85 }87 void88 error_r(Err s, char *a)89 {90 char buf[512];92 sprint(buf, "?%s \"%s\": %r", emsg[s], a);93 hiccough(buf);94 }96 void97 error_c(Err s, int c)98 {99 char buf[512];101 sprint(buf, "?%s `%C'", emsg[s], c);102 hiccough(buf);103 }105 void106 warn(Warn s)107 {108 dprint("?warning: %s\n", wmsg[s]);109 }111 void112 warn_S(Warn s, String *a)113 {114 print_s(wmsg[s], a);115 }117 void118 warn_SS(Warn s, String *a, String *b)119 {120 print_ss(wmsg[s], a, b);121 }123 void124 warn_s(Warn s, char *a)125 {126 dprint("?warning: %s `%s'\n", wmsg[s], a);127 }129 void130 termwrite(char *s)131 {132 String *p;134 if(downloaded){135 p = tmpcstr(s);136 if(cmd)137 loginsert(cmd, cmdpt, p->s, p->n);138 else139 Strinsert(&cmdstr, p, cmdstr.n);140 cmdptadv += p->n;141 free(p);142 }else143 Write(2, s, strlen(s));144 }