|
@@ -32,7 +32,6 @@ void complement(void);
|
|
|
void delete(void);
|
|
|
void squeeze(void);
|
|
|
void translit(void);
|
|
|
-void error(char*);
|
|
|
long canon(Pcb*);
|
|
|
char *getrune(char*, Rune*);
|
|
|
void Pinit(Pcb*, char*);
|
|
@@ -41,6 +40,13 @@ int readrune(int, long*);
|
|
|
void wflush(int);
|
|
|
void writerune(int, Rune);
|
|
|
|
|
|
+static void
|
|
|
+usage(void)
|
|
|
+{
|
|
|
+ fprint(2, "usage: %s [-cds] [string1 [string2]]\n", argv0);
|
|
|
+ exits("usage");
|
|
|
+}
|
|
|
+
|
|
|
void
|
|
|
main(int argc, char **argv)
|
|
|
{
|
|
@@ -48,21 +54,21 @@ main(int argc, char **argv)
|
|
|
case 's': sflag++; break;
|
|
|
case 'd': dflag++; break;
|
|
|
case 'c': cflag++; break;
|
|
|
- default: error("bad option");
|
|
|
+ default: usage();
|
|
|
}ARGEND
|
|
|
if(argc>0)
|
|
|
Pinit(&pfrom, argv[0]);
|
|
|
if(argc>1)
|
|
|
Pinit(&pto, argv[1]);
|
|
|
if(argc>2)
|
|
|
- error("arg count");
|
|
|
+ usage();
|
|
|
if(dflag) {
|
|
|
if ((sflag && argc != 2) || (!sflag && argc != 1))
|
|
|
- error("arg count");
|
|
|
+ usage();
|
|
|
delete();
|
|
|
} else {
|
|
|
if (argc != 2)
|
|
|
- error("arg count");
|
|
|
+ usage();
|
|
|
if (cflag)
|
|
|
complement();
|
|
|
else translit();
|
|
@@ -117,7 +123,7 @@ complement(void)
|
|
|
}
|
|
|
Prewind(&pto);
|
|
|
if ((p = (Rune *) malloc((high+1)*sizeof(Rune))) == 0)
|
|
|
- error("can't allocate memory");
|
|
|
+ sysfatal("no memory");
|
|
|
for (i = 0; i <= high; i++){
|
|
|
if (!BITSET(f,i)) {
|
|
|
if ((to = canon(&pto)) < 0)
|
|
@@ -165,7 +171,7 @@ translit(void)
|
|
|
if (from > high) high = from;
|
|
|
Prewind(&pfrom);
|
|
|
if ((p = (Rune *) malloc((high+1)*sizeof(Rune))) == 0)
|
|
|
- error("can't allocate memory");
|
|
|
+ sysfatal("no memory");
|
|
|
for (i = 0; i <= high; i++)
|
|
|
p[i] = i;
|
|
|
while ((from = canon(&pfrom)) >= 0) {
|
|
@@ -173,7 +179,7 @@ translit(void)
|
|
|
to = lastc;
|
|
|
else lastc = to;
|
|
|
if (BITSET(f,from) && p[from] != to)
|
|
|
- error("ambiguous translation");
|
|
|
+ sysfatal("ambiguous translation");
|
|
|
SETBIT(f,from);
|
|
|
p[from] = to;
|
|
|
SETBIT(t,to);
|
|
@@ -219,7 +225,7 @@ readrune(int fd, long *rp)
|
|
|
i = n-j;
|
|
|
n = read(fd, &buf[i], sizeof(buf)-i);
|
|
|
if (n < 0)
|
|
|
- error("read error");
|
|
|
+ sysfatal("read error: %r");
|
|
|
if (n == 0)
|
|
|
return 0;
|
|
|
j = 0;
|
|
@@ -254,7 +260,7 @@ wflush(int fd)
|
|
|
{
|
|
|
if (wptr && wptr > wbuf)
|
|
|
if (write(fd, wbuf, wptr-wbuf) != wptr-wbuf)
|
|
|
- error("write error");
|
|
|
+ sysfatal("write error: %r");
|
|
|
wptr = wbuf;
|
|
|
}
|
|
|
|
|
@@ -303,7 +309,7 @@ getrune(char *s, Rune *rp)
|
|
|
}
|
|
|
}
|
|
|
if(n > 0377)
|
|
|
- error("char>0377");
|
|
|
+ sysfatal("character > 0377");
|
|
|
}
|
|
|
*rp = n;
|
|
|
}
|
|
@@ -325,7 +331,7 @@ canon(Pcb *p)
|
|
|
if(*p->current == '-' && p->last >= 0 && p->current[1]){
|
|
|
p->current = getrune(p->current+1, &r);
|
|
|
if (r < p->last)
|
|
|
- error ("Invalid range specification");
|
|
|
+ sysfatal("invalid range specification");
|
|
|
if (r > p->last) {
|
|
|
p->final = r;
|
|
|
return ++p->last;
|
|
@@ -348,9 +354,3 @@ Prewind(Pcb *p)
|
|
|
p->current = p->base;
|
|
|
p->last = p->final = -1;
|
|
|
}
|
|
|
-void
|
|
|
-error(char *s)
|
|
|
-{
|
|
|
- fprint(2, "%s: %s\n", argv0, s);
|
|
|
- exits(s);
|
|
|
-}
|