00001 #include "util.h"
00002 #include <limits.h>
00003
00004 QString filesize(unsigned long l)
00005 {
00006 char units[] = { 'K', 'M', 'G' };
00007 int iu = 0;
00008 while (l > 999 && iu < sizeof(units))
00009 {
00010 l = (l+512)/1024;
00011 iu++;
00012 }
00013 QString ret = QString::number(l);
00014 if (iu != 0)
00015 {
00016 ret += QChar(units[iu-1]);
00017 }
00018 return ret;
00019 }
00020
00021 QString percent(unsigned long pos, unsigned long len)
00022 {
00023 unsigned long permil = 0;
00024 if (len != 0)
00025 {
00026 if (pos > UINT_MAX/1000)
00027 {
00028 unsigned long l1 = (len+500)/1000;
00029 permil = (pos+l1/2)/l1;
00030 }
00031 else
00032 {
00033 permil = (1000*pos+len/2)/len;
00034 }
00035 }
00036 unsigned long percen = permil/10;
00037 unsigned long frac = permil - 10*percen;
00038 return QString::number(percen) + "." + QString::number(frac);
00039 }
00040
00041 QString fmt(unsigned long pos, unsigned long len)
00042 {
00043 QString ret = filesize(pos) + "/" + filesize(len) + " : " + percent(pos,len) +"%";
00044 return ret;
00045 }