0. 这个是在oschina上看到的,很实用,可在代码中添加,权当库使用,小巧实用
1. 地址在此
url = https://git.oschina.net/lionsoul/ltpro.git
2. 细看代码,实现原理就是按比例打印对应彩色字符。可用于进度等。此方法也可用于任何彩色终端
看主要应用
3.详细代码
/**
* linux terminal progress bar (no thread safe).
* @package progress.c
*
* @author chenxin <chenxin619315@gmail.com>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ltpro.h"
/**
* initialize the progress bar.
* @max = 0
* @val = 0
* bar:结构体
* max:bar长度
* title:bar的名字,显示在前面
* style:显示模式
*/
extern void progress_init(
progress_t *bar, char *title, int max, int style)
{
bar->chr = '#';//这个可以改成=
bar->title = title;
bar->style = style;
bar->max = max;
bar->offset = 100 / (float)max;
bar->pro = (char *) malloc(max+1);
if ( style == PROGRESS_BGC_STYLE )
memset(bar->pro, 0x00, max+1);
else {
memset(bar->pro, 32, max);
memset(bar->pro+max, 0x00, 1);
}
}
extern void progress_show( progress_t *bar, float bit )
{
int val = (int)(bit * bar->max);
switch ( bar->style )
{
case PROGRESS_NUM_STYLE:
printf("\033[?25l\033[31m\033[1m%s%d%%\033[?25h\033[0m\r",
bar->title, (int)(bar->offset * val));
fflush(stdout);
break;
case PROGRESS_CHR_STYLE:
memset(bar->pro, '#', val);
printf("\033[?25l\033[31m\033[1m%s[%-s] %d%%\033[?25h\033[0m\r",
bar->title, bar->pro, (int)(bar->offset * val));
fflush(stdout);
break;
case PROGRESS_BGC_STYLE:
memset(bar->pro, 32, val);
printf("\033[?25l\033[31m\033[1m%s\033[41m %d%% %s\033[?25h\033[0m\r",
bar->title, (int)(bar->offset * val), bar->pro);
fflush(stdout);
break;
}
}
//destroy the the progress bar.
extern void progress_destroy(progress_t *bar)
{
free(bar->pro);
}