// This function prints a text progress bar within a term window
// Input arguments assume a for loop starting at zero:
//
//      for (index =  0; index < end; index++) { ...

static const char rcsid[] = "$Header: /software/source/minc/conversion/dcm2mnc/progress.c,v 1.2 2005/03/03 18:59:15 bert Exp $";

#include <stdio.h>
#include <math.h>
#include <string.h>

#include "progress.h"

void
progress(long index, int end, const char *message)
{
    int ix;
    const int width = 50;
    int nchars;

    if (index == 0) {
        printf("%-20.20s |<--", message);
        for (ix = 0; ix < width; ix++) { 
            printf(" ");
        }
        printf("|");
        for (ix = 0; ix < width+1; ix++) { 
            printf("\b");
        }
    } 
    else if ((index > 0) && (index < end)) {

        nchars = (((float)index/(float)(end-1)) * width) - 
            floor(((float)(index-1)/(float)(end-1)) * width);

        for (ix = 0; ix < nchars; ix++) {
            printf("\b->");
            fflush(stdout);
        }

        // print terminating newline at end if we're done
        if (index == end-1) {
            printf("\n");
        }
    } 
    else {
        fprintf(stderr,"PROGRESS:  bad input indices!\n");
    }
}







syntax highlighted by Code2HTML, v. 0.9.1