From bc7cb1a15a67c859c8c71c4b52bb35fe9425a63d Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 23 Nov 2003 18:04:47 +0000 Subject: new utilities. the .C files compile but are renamed to avoid building automatically. --- src/cmd/unicode.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/cmd/unicode.c (limited to 'src/cmd/unicode.c') diff --git a/src/cmd/unicode.c b/src/cmd/unicode.c new file mode 100644 index 00000000..a0447271 --- /dev/null +++ b/src/cmd/unicode.c @@ -0,0 +1,122 @@ +#include +#include +#include + +char usage[] = "unicode { [-t] hex hex ... | hexmin-hexmax ... | [-n] char ... }"; +char hex[] = "0123456789abcdefABCDEF"; +int numout = 0; +int text = 0; +char *err; +Biobuf bout; + +char *range(char*[]); +char *nums(char*[]); +char *chars(char*[]); + +void +main(int argc, char *argv[]) +{ + ARGBEGIN{ + case 'n': + numout = 1; + break; + case 't': + text = 1; + break; + }ARGEND + Binit(&bout, 1, OWRITE); + if(argc == 0){ + fprint(2, "usage: %s\n", usage); + exits("usage"); + } + if(!numout && utfrune(argv[0], '-')) + exits(range(argv)); + if(numout || strchr(hex, argv[0][0])==0) + exits(nums(argv)); + exits(chars(argv)); +} + +char* +range(char *argv[]) +{ + char *q; + int min, max; + int i; + + while(*argv){ + q = *argv; + if(strchr(hex, q[0]) == 0){ + err: + fprint(2, "unicode: bad range %s\n", *argv); + return "bad range"; + } + min = strtoul(q, &q, 16); + if(min<0 || min>0xFFFF || *q!='-') + goto err; + q++; + if(strchr(hex, *q) == 0) + goto err; + max = strtoul(q, &q, 16); + if(max<0 || max>0xFFFF || max0xFFFF || *q!=0) + goto err; + Bprint(&bout, "%C", m); + if(!text) + Bprint(&bout, "\n"); + argv++; + } + return 0; +} -- cgit v1.2.3