login

#include <stdio.h>
#include <stdlib.h>
#include <poll.h>

void
hide_cursor()
{
    printf("\x1B[?25l");
    fflush(stdout);
}

void
show_cursor()
{
    printf("\x1B[?25h");
    fflush(stdout);
}

void
print_bar(unsigned long percent)
{
    printf("\r%3lu%%", percent);
    fflush(stdout);
}

int
main(int argc, char *argv[])
{
    int ret = 0;
    unsigned long count, total, percent;
    if (argc != 2) {
        fprintf(stderr, "usage:\n  %s total\n", argv[0]);
        ret = 1;
        goto quit;
    }
    total = (unsigned) atol(argv[1]);
    if (total == 0) {
        fprintf(stderr, "total must be nonzero\n");
        ret = 1;
        goto quit;
    }
    hide_cursor();
    print_bar(0);
    for (count = 0; count < total; count++) {
        poll(NULL, 0, 25);
        percent = count * 100 / total;
        print_bar(percent);
    }
    print_bar(100);
quit:
    show_cursor();
    puts("");
    return ret;
}