new utilities.
the .C files compile but are renamed to avoid building automatically.
This commit is contained in:
parent
f08fdedcee
commit
bc7cb1a15a
45 changed files with 16585 additions and 0 deletions
111
src/cmd/freq.c
Normal file
111
src/cmd/freq.c
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
|
||||
long count[1<<16];
|
||||
Biobuf bout;
|
||||
|
||||
void freq(int, char*);
|
||||
long flag;
|
||||
enum
|
||||
{
|
||||
Fdec = 1<<0,
|
||||
Fhex = 1<<1,
|
||||
Foct = 1<<2,
|
||||
Fchar = 1<<3,
|
||||
Frune = 1<<4,
|
||||
};
|
||||
|
||||
void
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int f, i;
|
||||
|
||||
flag = 0;
|
||||
Binit(&bout, 1, OWRITE);
|
||||
ARGBEGIN{
|
||||
default:
|
||||
fprint(2, "freq: unknown option %c\n", ARGC());
|
||||
exits("usage");
|
||||
case 'd':
|
||||
flag |= Fdec;
|
||||
break;
|
||||
case 'x':
|
||||
flag |= Fhex;
|
||||
break;
|
||||
case 'o':
|
||||
flag |= Foct;
|
||||
break;
|
||||
case 'c':
|
||||
flag |= Fchar;
|
||||
break;
|
||||
case 'r':
|
||||
flag |= Frune;
|
||||
break;
|
||||
}ARGEND
|
||||
if((flag&(Fdec|Fhex|Foct|Fchar)) == 0)
|
||||
flag |= Fdec | Fhex | Foct | Fchar;
|
||||
if(argc < 1) {
|
||||
freq(0, "-");
|
||||
exits(0);
|
||||
}
|
||||
for(i=0; i<argc; i++) {
|
||||
f = open(argv[i], 0);
|
||||
if(f < 0) {
|
||||
fprint(2, "cannot open %s\n", argv[i]);
|
||||
continue;
|
||||
}
|
||||
freq(f, argv[i]);
|
||||
close(f);
|
||||
}
|
||||
exits(0);
|
||||
}
|
||||
|
||||
void
|
||||
freq(int f, char *s)
|
||||
{
|
||||
Biobuf bin;
|
||||
long c, i;
|
||||
|
||||
memset(count, 0, sizeof(count));
|
||||
Binit(&bin, f, OREAD);
|
||||
if(flag & Frune) {
|
||||
for(;;) {
|
||||
c = Bgetrune(&bin);
|
||||
if(c < 0)
|
||||
break;
|
||||
count[c]++;
|
||||
}
|
||||
} else {
|
||||
for(;;) {
|
||||
c = Bgetc(&bin);
|
||||
if(c < 0)
|
||||
break;
|
||||
count[c]++;
|
||||
}
|
||||
}
|
||||
Bterm(&bin);
|
||||
if(c != Beof)
|
||||
fprint(2, "freq: read error on %s\n", s);
|
||||
|
||||
for(i=0; i<nelem(count); i++) {
|
||||
if(count[i] == 0)
|
||||
continue;
|
||||
if(flag & Fdec)
|
||||
Bprint(&bout, "%3ld ", i);
|
||||
if(flag & Foct)
|
||||
Bprint(&bout, "%.3lo ", i);
|
||||
if(flag & Fhex)
|
||||
Bprint(&bout, "%.2lx ", i);
|
||||
if(flag & Fchar) {
|
||||
if(i <= 0x20 ||
|
||||
i >= 0x7f && i < 0xa0 ||
|
||||
i > 0xff && !(flag & Frune))
|
||||
Bprint(&bout, "- ");
|
||||
else
|
||||
Bprint(&bout, "%C ", (int)i);
|
||||
}
|
||||
Bprint(&bout, "%8ld\n", count[i]);
|
||||
}
|
||||
Bflush(&bout);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue