diff options
Diffstat (limited to 'flags.c')
-rw-r--r-- | flags.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/flags.c b/flags.c new file mode 100644 index 0000000..fd66951 --- /dev/null +++ b/flags.c @@ -0,0 +1,48 @@ +#include <string.h> +#include <stdio.h> +#include <stdint.h> + +int +main(int argc, char *argv[]) +{ + int i; + unsigned int j; + char *f, *e; + + int8_t flagmod[255] = { 0 }; + + for (i = 1; i < argc; i++) { + if (*argv[i] == '+') { + f = argv[i] + 1; + while (*f) + flagmod[(int)*f++]++; + continue; + } else if (*argv[i] == '-') { + f = argv[i] + 1; + while (*f) + flagmod[(int)*f++]--; + continue; + } + + int8_t flags[255] = { 0 }; + char flagstr[255]; + f = e = strstr(argv[i], ":2,"); + + if (!f) + continue; + f += 3; + while (*f) + flags[(int)*f++] = 1; + + *e = 0; + f = flagstr; + for (j = 0; j < sizeof flags; j++) + if (flags[j] + flagmod[j]) + *f++ = j; + *f = 0; + + printf("%s:2,%s\n", argv[i], flagstr); + } + + return 0; +} |