.hy 0 .ad l .br

Prev, Top | Notes, Next

# Using the Library
cat

.nf

    #include <libexplain/libexplain.h>
    #include <stdlib.h>
    #include <unistd.h>

    static void
    process(FILE *fp)
    {
        for (;;)
        {
            char buffer[4096];
            size_t n = explain_fread_or_die(buffer, 1, sizeof(buffer), fp);
            if (!n)
                break;
            explain_fwrite_or_die(buffer, 1, n, stdout);
        }
    }

    int
    main(int argc, char **argv)
    {
        for (;;)
        {
            int c = getopt(argc, argv, "o:");
            if (c == EOF)
                break;
            switch (c)
            {
            case 'o':
                explain_freopen_or_die(optarg, "w", stdout);
                break;
            default:
                fprintf(stderr, "Usage: %ss [ -o <filename> ] "
                    "<filename>...\en", argv[0]);
                return EXIT_FAILURE;
            }
        }
        if (optind == argc)
            process(stdin);
        else
        {
            while (optind < argc)
            {
                FILE *fp = explain_fopen_or_die(argv[optind]++, "r");
                process(fp);
                explain_fclose_or_die(fp);
            }
        }
        explain_fflush_or_die(stdout);
        return EXIT_SUCCESS;
    }