#include #include #include unsigned char *utf8_check(unsigned char *s); int all_lines = 0; int scan_file(FILE *f, char *filename) { char s[2048], *s1, *s2, *s3; int error = 0; while (fgets(s, sizeof(s), f)) { if ((s1 = s2 = utf8_check(s)) || all_lines) { if (filename) { printf("%s:\n", filename); filename = NULL; } fputs(s, stdout); } s3 = s; while (s2) { while (s3++ < s2) putchar('-'); putchar('^'); s2 = utf8_check(s3); } if (s1) { putchar('\n'); error = 1; } } return error; } int main(int argc, char **argv) { int option, i, error = 0; FILE *f; while ((option = getopt(argc, argv, "a")) >= 0) { switch(option) { case 'a': all_lines = 1; break; default: printf("Usage: utf8_test [option] [files ...]\n" "\nOptions:\n\n -a print all lines\n"); exit(1); } } if (optind < argc) for (i = optind; i < argc; i++) { if ((f = fopen(argv[i], "r"))) { error |= scan_file(f, argv[i]); fclose(f); } else { printf("Cannot read file '%s", argv[i]); perror("'"); } } else error |= scan_file(stdin, NULL); return error; }