Проблема реализации cat utility согласно правилам структурного программирования UNIX C
Необходимо вывести в stdout работу функции my_cat, чтобы та работала идентично стандартной утилите cat linux.
Как избежать использования операторов continue and break, чтобы не возникали конфликты в работе нескольких опций командной строки. Таких как -sn и т.п.
void print_with_opt(FILE* fp, my_opt* opt) {
int ch, skip = 0, line = 0, prev_ch;
for (prev_ch = '\n'; (ch = fgetc(fp)) != EOF; prev_ch = ch) {
if (prev_ch == '\n') {
if (opt->mutual & OPT_SQUEEZE) {
if (ch == '\n') {
if (skip)
continue;
skip = 1;
} else
skip = 0;
}
if (((opt->mutual & OPT_NUM_ALL_LINE) && !(opt->mutual & OPT_NUM_NONBLANK)) ||
((opt->mutual & OPT_NUM_NONBLANK) && ch != '\n'))
fprintf(stdout, "%6d\t", ++line);
}
if (ch == '\n' && (opt->mutual & OPT_END_OF_LINE)) {
fprintf(stdout, "$\n");
} else if (ch == '\t' && (opt->mutual & OPT_TABS)) {
fprintf(stdout, "^I");
} else if ((opt->mutual & OPT_NONPRINTING) && ch != '\n' && ch != '\t') {
if (!isascii(ch) && !isprint(ch)) {
fprintf(stdout, "M-");
ch = toascii(ch);
}
if (iscntrl(ch))
fprintf(stdout, "^%c", ch == '\177' ? '?' : ch | 0100);
else
putchar(ch);
} else {
putchar(ch);
}
}
}
Link on github