Сможешь написать подробные комментарии к этому коду, который реализует функцию cat на Си?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <getopt.h>

void print_with_flags(FILE *file, int number_nonblank, int number, int squeeze_blank, int show_ends, int show_tabs, int show_nonprinting) {
    char line[4096];
    int line_number = 1;
    int prev_line_empty = 0;

    while (fgets(line, sizeof(line), file)) {
        int is_blank = (line[0] == '\n');
        
        // Сжимаем несколько пустых строк, если включен флаг -s
        if (squeeze_blank && is_blank && prev_line_empty) {
            continue;
        }
        prev_line_empty = is_blank;

        // Добавляем номера строк
        if ((number && (!number_nonblank || !is_blank))  || (number_nonblank && !is_blank)) {
            printf("%6d\t", line_number++);
        }

        // Обработка вывода строки
        for (char *c = line; *c != '\0'; c++) {
            if (*c == 127) {
                printf("^?");
            } else if (*c == '\t' && show_tabs) {
                printf("^I");
            } else if (*c == '\n' && show_ends) {
                printf("$\n");
            } else if (show_nonprinting && !isprint((unsigned char)*c) && *c != '\n' && *c != '\t') {
                printf("^%c", (*c & 0x7F) + '@');
            } else {
                putchar(*c);
            }
        }
    }
}

int main(int argc, char *argv[]) {
    int opt;
    int number_nonblank = 0, number = 0, squeeze_blank = 0;
    int show_ends = 0, show_tabs = 0, show_nonprinting = 0;

    // Определение длинных и коротких опций
    struct option long_options[] = {
        {"number-nonblank", no_argument, 0, 'b'},
        {"number", no_argument, 0, 'n'},
        {"squeeze-blank", no_argument, 0, 's'},
        {"show-ends", no_argument, 0, 'E'},
        {"show-tabs", no_argument, 0, 'T'},
        {"show-nonprinting", no_argument, 0, 'v'},
        {"e", no_argument, 0, 'e'},
        {"t", no_argument, 0, 't'},
        {0, 0, 0, 0}
    };

    while ((opt = getopt_long(argc, argv, "bnsETvet", long_options, NULL)) != -1) {
        switch (opt) {
            case 'b':
                number_nonblank = 1;
                break;
            case 'n':
                number = 1;
                break;
            case 's':
                squeeze_blank = 1;
                break;
            case 'E':
                show_ends = 1;
                break;
            case 'T':
                show_tabs = 1;
                break;
            case 'v':
                show_nonprinting = 1;
                break;
            case 'e':
                show_ends = 1;
                show_nonprinting = 1; // Подразумевает -v
                break;
            case 't':
                show_tabs = 1;
                show_nonprinting = 1; // Подразумевает -v
                break;
            default:
                fprintf(stderr, "Usage: %s [-bnsETvet] [file...]\n", argv[0]);
                exit(EXIT_FAILURE);
        }
    }

    // Если нет файлов, читаем из stdin
    if (optind == argc) {
        print_with_flags(stdin, number_nonblank, number, squeeze_blank, show_ends, show_tabs, show_nonprinting);
    } else {
        // Открываем файлы по очереди
        for (int i = optind; i < argc; i++) {
            FILE *file = fopen(argv[i], "r");
            if (!file) {
                perror(argv[i]);
                continue;
            }
            print_with_flags(file, number_nonblank, number, squeeze_blank, show_ends, show_tabs, show_nonprinting);
            fclose(file);
        }
    }

    return 0;
}