Skip to content

horta/almosthere

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Almosthere

Progress indicator C library.

ATHR is a simple yet powerful progress indicator library that works on Windows, Linux, and macOS. It is non-blocking as the progress update is done via a dedicated, lightweight thread, as to not impair the performance of the calling program.

Get started

On Linux, macOS, and Windows (Git bash terminal) open a terminal and install it via

/bin/bash -c "$(curl -fsSL https://git.io/Jz7Oa)" -s horta/almosthere

The above commands will download the latest library version, compile it to create a dynamic library and copy the C header into the appropriate directory. (For a more manual approach, see the section Manual installation in this document.)

It is now ready to be linked into in your C/C++ project. Suppose you have a file example.c that makes use of this library. Using gcc compiler, you can do

gcc example.c -lathr -o example

to produce a binary example linked against athr library.

Examples

/* example1.c */

#include "athr.h"

int main() {
    struct athr *at = athr_create(100);
    int i;

    for (i = 0; i < 100; ++i) {
        athr_sleep(50); /* some time-consuming task */
        athr_eat(at, 1);
    }

    athr_finish(at);

    return 0;
}

Example 1

/* example2.c */

#include "athr.h"

int main() {
    struct athr *at = athr_create(100, "My tasks");
    int i;

    for (i = 0; i < 100; ++i) {
        athr_sleep(50); /* some time-consuming task */
        athr_eat(at, 1);
    }

    athr_finish(at);

    return 0;
}

Example 2

/* example3.c */

#include "athr.h"

int main() {
    struct athr *at = athr_create(100, "My tasks", ATHR_PERC);
    int i;

    for (i = 0; i < 100; ++i) {
        athr_sleep(50); /* some time-consuming task */
        athr_eat(at, 1);
    }

    athr_finish(at);

    return 0;
}

Example 3

/* example4.c */

#include "athr.h"

int main() {
    struct athr *at = athr_create(100, .opts = ATHR_PERC);
    int i;

    for (i = 0; i < 100; ++i) {
        athr_sleep(50); /* some time-consuming task */
        athr_eat(at, 1);
    }

    athr_finish(at);

    return 0;
}

Example 4

Manual installation

Clone and enter into the repository folder

git clone https://github.com/horta/almosthere
cd almosthere

Create a build folder to not clutter the project and proceed with cmake steps

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
make && make test && make install

Interface

It consists in two functions

void athr_eat(struct athr *at, uint64_t amount);
void athr_finish(struct athr *at);

a variadic macro

athr_create(...)

and three enum options

enum ATHR_OPTS { ATHR_BAR = 1, ATHR_ETA = 2, ATHR_PERC = 4 };

The variadic macro is better explained by examples

/* progress indicator with ATHR_BAR, ATHR_ETA, and ATHR_PERC widgets */
struct athr *at0 = athr_create(100);

/* progress indicator with all the widgets plus a description */
struct athr *at1 = athr_create(100, "Description");

/* progress indicator with ATHR_BAR widget plus a description */
struct athr *at2 = athr_create(100, "Description", ATHR_BAR);

/* progress indicator with ATHR_BAR and ATHR_ETA widgets plus a description */
struct athr *at3 = athr_create(100, "Description", ATHR_BAR | ATHR_ETA);

/* progress indicator with ATHR_PERC widget plus a description */
struct athr *at4 = athr_create(100, .opts=ATHR_PERC, .desc="Description");

/* progress indicator with ATHR_PERC widget only */
struct athr *at5 = athr_create(100, .opts=ATHR_PERC);

The first parameter is mandatory and specify the total volume from which we will consume through athr_eat calls. A athr_finish call then ends the process.

Authors

Acknowledgements

  • bk. answer for providing the mechanism of defining default arguments in C.
  • asciinema for such amazing recording tool.
  • asciicast2gif for the converter tool from asciinema cast to gif.

License

This project is licensed under the MIT License.

About

Progress indicator library written in C.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published