#include #include extern int (*dec)(uchar *, int, char *, int); extern int (*enc)(char *, int, uchar *, int); void usage(void) { print("usage: %s [-d]\n", argv0); exits("usage"); } void main(int argc, char **argv) { uchar ibuf[9600]; /* divisible by 4, 5, 6, and 8 */ uchar obuf[2*sizeof(ibuf)]; int n, m; int dflag = 0; ARGBEGIN { case 'd': dflag++; break; default: usage(); } ARGEND while((n = read(0, ibuf, sizeof ibuf)) > 0) { if(dflag) m = dec(obuf, sizeof obuf, (char *)ibuf, n); else m = enc((char *)obuf, sizeof obuf, ibuf, n); if(m < 0) abort(); if(write(1, obuf, m) < m) sysfatal("write: %r"); } if(n < 0) sysfatal("read: %r"); exits(nil); }