diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-03-13 21:05:34 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-03-13 21:05:34 -0400 |
commit | 39ecba0032be794a1f4d66f61e09e4910270330f (patch) | |
tree | 9b68f25a597891afce13825328e837da168dfada /trigraph.c |
migrate to gitlab
Diffstat (limited to 'trigraph.c')
-rw-r--r-- | trigraph.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/trigraph.c b/trigraph.c new file mode 100644 index 0000000..b80b198 --- /dev/null +++ b/trigraph.c @@ -0,0 +1,53 @@ +#include <stdio.h> + +int main(int argc, char *argv[]) +{ + FILE *in = stdin; + + if (argc > 2) { + printf("usage: %s [file]\n", argv[0]); + return 1; + } + + if (argc == 2) { + in = fopen(argv[1], "r"); + if (in == NULL) { + perror(argv[1]); + return 1; + } + } + + int c; + int q = 0; + while ((c = fgetc(in)) != EOF) { + if (q == 2) { + switch (c) { + case '=': putchar('#'); break; + case '/': putchar('\\'); break; + case '\'': putchar('^'); break; + case '(': putchar('['); break; + case ')': putchar(']'); break; + case '!': putchar('|'); break; + case '<': putchar('{'); break; + case '>': putchar('}'); break; + case '-': putchar('~'); break; + case '?': putchar('?'); break; + + default: + printf("??%c", c); + break; + } + + if (c != '?') { + q = 0; + } + } else if (c == '?') { + q++; + } else { + putchar(c); + q = 0; + } + } + + return 0; +} |