• Welcome to Overclockers Forums! Join us to reply in threads, receive reduced ads, and to customize your site experience!

F@H stats in your sig: not just for Linux anymore!

Overclockers is supported by our readers. When you click a link to make a purchase, we may earn a commission. Learn More.
JerMe said:
When you wrote the spacer code, you were creating the whole sig_gen and mksig at the same time :p

So we can't set a path to a folder on a networked that we already have permissions to access?

\\networkedcomputer\\FAH\\unitinfo.txt

I haven't tried it, but I figured if we can access local files on the computer, we might be able to access files on the network. *shrug* I wish it were that easy.

Edit: Remote. Offsite. Non-networked. Right? I used
Code:
$fah_folder="/\/\networkedcomputer/\/\FAH";		#path for networked FAH instance

to read unitinfo.txt on one of the comps on my network. I guess I can add that in somehow, while the more difficult remote accessing is worked out.

The file only needs to be read into memory. It doesn't matter if it's read via a network share, from a local drive, ramdisk, the web or whatever else you can come up with.

From everything I've seen, there isn't any way to get info directly from the f@h client. (By this I mean that you can't send stuff to the client over a network and get stats back, like you can with the s@h client.) I've been looking at various f@h monitors and haven't found any that do, so I assume that it can't be done. The fact that the EM3 guy over at Stanford's folding forum recommends Samba reinforces this.
 
I see. F@H monitors use the logfiles generated by F@H, the same way we're using unitinfo.txt? Why is it that I can see you creating an executable that combines everything that you'd ever need for FAH.. stats, monitoring, and all? :)0
 
I'm giving this a try because I feel there are some who wish to manipulate the colors in a quick way. JerMe, let me know if this conflicts with anything you are doing and I will change it.


The first thing is to decide which lines you wish to color. In this example, which is used from my sig below, you have a choice of:

1. The "Folding for" line
2. The "Progress indicator"
3. The "Protein names"

It's very easy to manipulate these by commenting all the variables at the beginning. You will also need to add the "Protein name" variables highlighted below.

Code:
#---------======Enter User Name======----------#
$user="GTFouts";
#---------======Enter Team Name======----------#
$team=32;
#---------=======Enter EOC ID#=======----------#
$eoc_id=119649;
#---------===========================----------#

#string to use for progress indicator
$progress_char="»";

#how many of the above char to use at 100%
$prog_len = 20;

#starting/ending color for progress indicator
$prog_start = "ff0000";
$prog_end   = "33ff33";

[COLOR=Red][B]#starting/ending color for protein name
$pro1_start = "97ffff";
$pro1_end   = "ff00ff";[/B][/COLOR]

#starting/ending color for folding line
$fstr_start = "ff00ff";
$fstr_end   = "97ffff";

#how many times to cycle through the progress indicator gradient
$prog_cycles = 1;

These color numbers can be quickly and easily changed for a completely different look. A good web page to look at for the color numbers is http://www.december.com/html/spec/colorhex.html


Here is where it needs to be changed for the "Protein name":

Code:
$f_prog = $f_name;
  
  $f_name =~ s/.*Name:\s//;
  $f_name =~ s/Download.*//;
  $f_name = color_string([B][COLOR=Red]"ffff00","ff0000",$f_name[/COLOR][/B]);#,0,1,sub {my $x = shift; return abs(sin($x*$pi))});

Change the above color numbers to the assigned variables so it looks like this:

Code:
$f_name = color_string([B][COLOR=Red]$pro1_start,$pro1_end,$f_name[/COLOR][/B]);#,0,1,sub {my $x = shift; return abs(sin($x*$pi))});

That should be all you have to change in the program. You can now change all your colors at the beginning. Remember that darker colors don’t show up too well.
 
Last edited:
Nah, I'm glad you're chiming in. Nice writeup! Your sig inspired me to bring color into my life, so thanks!

Since I'm not all too familiar with the advanced Perl functions, I thought it would be a good academic exercise to figure out the following from Christoph's original sig_gen:

# might be cool:
# * use a funky character helix for the progress bar

so I tried it out. This is what I ended up with:

Build!.Borg!.Recruit!.Folding.for.Team.32!
My Folding Stats:____Currently Monitored WUs:
score:______20262____{§¤´²¨ª*»§¤´²___}_84%: p1134_RIBO_FSpeptide_EXT
Pts Per Day:__224____{§¤´²¨ª*»§¤´²___}_84%: OneIsTheLoneliestNumber(Fake)
Pts 7 Days:_1,569____{§¤´²¨ª_________}_50%: UnitTwoWhereAreYou(Fake)
Clients:________4____{§¤´²¨ª*»§¤´²¨ª}_99%: ThreeisMe_MeToo_MeToo(Fake)
Work Units:___208____{§¤´²¨ª___________}_33%: p1275_proj1275_A21ext_d1
Team 32 Rank:_579 (+21.in.7.days)____


I set up it up so that you enter any length string for the $progress_char like "d7*&d7ils7AYo", then it does the rest. That one up there is

Code:
$progress_char="§¤´²¨ª‰•*»";

If you only enter say 2 or 3 chars, it'll loop those chars until it gets to the end of the progress bar.

auto_spacer() now lets you define colors for the description of the stat, and the stat itself. So if you want "score:" to be whiteish, and "20262" to be blueish, you just have to put

Code:
auto_spacer("score",$pts,"FFFAF0","00BFFF");

and it'll look like above.

I also mooched Christoph's color gradient code for the percentages. Yum. :)0

Some variable names were changed 'cause I'm a dunce and had to change them in order to understand the code, so again this isn't a drop-in-my-existing-code kinda deal. :( Here it is, attached:
 

Attachments

  • sig_gen.txt
    30.6 KB · Views: 100
JerMe,
I took your latest sig_gen.pl and changed it a little. I added comments to the FAH directory comment area to make it more user friendly by using actual examples. I also added variables for everything in the following area so they can all be entered at the beginning.

Code:
#enter header titles in string below
$hdr_left  = "[ u][color=#$myfoldstats_color]My Folding Stats[/color][/u]:";
$hdr_right = "[ u][color=#$curmonwus_color]Currently Monitored WUs[/color][/u]:";

#enter stats
#auto_spacer("statisitc",$statistic)
#for colors... autospacer("statistic",$statistic,"description_color","statistic_color")

$col_left1 = auto_spacer("score",$pts,$score_color,$pts_color);
$col_left2 = auto_spacer("Pts Per Day",$ppd,$ptsperday_color,$ppd_color);
$col_left3 = auto_spacer("Pts 7 Days",$stats_gen[3],$pts7days_color,$p7d_color);
$col_left4 = auto_spacer("Clients",$c07,$clients_color,$c07_color);
$col_left5 = auto_spacer("Work Units",$wus,$workunits_color,$wus_color);
$col_left6 = auto_spacer("Team 32 Rank",$rnk,$Team32Rank_color,$rnk_color).
  " ".color_string($r7d_start,$r7d_end,$r7d);

Please check it out and see if you like it or not, and if it works ok on your sig. I tested it on mine and it worked ok. Just trying to make it as simple as possible for everyone to change the colors to the way they want it.
 

Attachments

  • sig_gen.txt
    32.1 KB · Views: 97
I like the idea of people just getting the code, entering their names and paths, changing a few colors around, then they're done. I'll take it. Do you mind the possibilty of me changing variable names at some point? I have the nasty of doing that, I've already thrashed a lot of Christoph's variable names, I don't even know if they make sense anymore. Christoph said he should be shot for the way he named variables - I'm worse.

I think I'm pretty much settling on this version as the "generic" sig_gen that Christoph asked for. Then I can edit that big HOWTO above and be done with my short foray into Perl101.
 
I don't mind at all. I did that for your prg. Change it as you wish. I like mine just the way it is and plan on keeping it, it's a much older version. Just trying to help ya some on the colors cause I know people love to personilize them to their tastes.
 
Wow, I really like what you did with the progress bar JerMe! I'm going to see if I can integrate it with the "dual" progress bar code I just finished... Should be really neat combined!

~~~~~~~~~
Just finished with a new BOINC version :)

Coding Music O' The Day: Tyrian Soundtrack
Changelog:
  • The default RPC variables should now all work. I didn't really do much testing on the last version, so I inadvertantly ended up incorrectly setting a few of them.
  • I've changed variable names (once again!). I think I've finally got some ones I like now though, so they shouldn't change in the future.... I think... Don't worry though, since I've finally also added in a complete list of default variables to the begining of the program like yours JerMe. Should make things a lot simpler for those who want to use the code. It still needs a bit more documentation, but some is better than none! :D
  • I've replaced Christoph's custom parser of Berkeley's Classic stats with the XML::Simple parser.
  • I've added in a new section of code to parse a user's general BOINC statistics. The new code just makes use of a different section of BoincStats.com, so most of the code was copy/paste.
  • The subroutine stripcpu() now automatically calls trimwhitespace() as a part of it's functioning. I don't have the slightest clue why I didn't have it do it itself before....
  • A new subroutine setWidth($string, $width) was added. setWidth() pads invisible chars to make a string a specific width (or uses substr() to truncate said string to the width). I'm not using it anywhere yet, but hopefully it will allow more control over columning the data :)
  • Changes to the progbar() subroutine. It now has the capability of producing two progress bars in the space of one! Calling it with one argument results in the good ol' progress bar we know and love, giving it a second argument will place a second progress bar (and percentage) within the same space. This is especially handy for dual CPU machines, so they don't have to take up 2 lines just to show the progress of both their WUs.

Modified progbar -- Produces following output:
print progbar(0.125, 0.875); -- {>>>>>>>>>>>>>__}__12% / 88%
print progbar(0.644, 0.421); -- {>>>>>>>>>>_____}__64% / 42%
print progbar(0.756); -- {>>>>>>>>>>>____}__76%

Code:
sub progbar($) {
	#make a pretty progress bar
	$cpu1_progress = shift;
	$cpu2_progress = shift;
	
	#length of progress bar
	$prog_len = 15;
	
	#starting and ending colors for progress bar
	$cpu1_start_color = "00ff00";
	$cpu1_end_color   = "ffffff";
	$cpu2_start_color = "ff00ff";
	$cpu2_end_color   = "000000";
	
	#colors for the percent indicator
	$cpu1_pct_begin  = "00ff00";
	$cpu1_pct_end    = "ffffff";
	$cpu2_pct_begin  = "ff00ff";
	$cpu2_pct_end    = "000000";
	
	#charachter(s) to use for the percent indicator
	$cpu1_prog_char = ">";
	$cpu2_prog_char = ">";
	
	#calculate number of filled bars, empty bars, and change progress to %
	$cpu1_filled_bars = sprintf("%.0f",($cpu1_progress)*$prog_len);
	$cpu2_filled_bars = sprintf("%.0f",($cpu2_progress)*$prog_len);	
	$cpu1_empty_bars = $prog_len - $cpu1_filled_bars;
	$cpu2_empty_bars = $prog_len - $cpu2_filled_bars;	
	$cpu1_pct_prog = sprintf("%.0f",$cpu1_progress*100);
	$cpu2_pct_prog = sprintf("%.0f",$cpu2_progress*100);
	

	#print "$cpu1_pct_prog% progress(1) \/ $cpu2_pct_prog% progress(2)\n";
	#print "$cpu1_filled_bars chars(1) \/ $cpu2_filled_bars chars(2)\n";
	#print "$cpu1_empty_bars unfilled(1) \/ $cpu2_empty_bars unfilled(2)\n";
	
	
	$prog_bar = "{";
	
	if ($cpu1_pct_prog <= $cpu2_pct_prog) {
	
		$prog_bar .= "\[b\]";
		for($i=0; $i < $cpu1_filled_bars; $i++) {
			$color=color_grad($cpu1_start_color,$cpu1_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu1_prog_char\[\/color\]";
		}
		$prog_bar .= "\[\/b\]";
		
		for($i=$i; $i < $cpu2_filled_bars; $i++) {
			$color=color_grad($cpu2_start_color,$cpu2_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu2_prog_char\[\/color\]";
		}

		$prog_bar .= "\[color=#$invisible\]";
		$prog_bar .=  "_" x $cpu2_empty_bars;
		$prog_bar .= "\[\/color\]";
		$prog_bar .= "}";	

	}
	else {

		$prog_bar .= "\[b\]";
		for($i=0; $i < $cpu2_filled_bars; $i++) {
			$color=color_grad($cpu2_start_color,$cpu2_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu2_prog_char\[\/color\]";
		}
		$prog_bar .= "\[\/b\]";
		
		for($i=$i; $i < $cpu1_filled_bars; $i++) {
			$color=color_grad($cpu1_start_color,$cpu1_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu1_prog_char\[\/color\]";
		}

		$prog_bar .= "\[color=#$invisible\]";
		$prog_bar .=  "_" x $cpu1_empty_bars;
		$prog_bar .= "\[\/color\]";
		$prog_bar .= "}";

	}
		
	#now $prog_bar looks like "{****___}" but with color tags
	
	
	$cpu1_pct_len = length $cpu1_pct_prog;
	$cpu2_pct_len = length $cpu2_pct_prog;
	
	$spc_len = 2 - $pct_len;
	$spc = "_" x $spc_len;
	$prog_bar =~ s/$/\[color=#$invisible\]$spc\[\/color\]/;
	
	$pct_color = color_grad($cpu1_pct_begin,$cpu1_pct_end,100,$cpu1_pct_prog);
	$prog_bar =~ s/$/\[color=#$pct_color\]$cpu1_pct_prog\%\[\/color\]/;
	
	if ($cpu2_pct_prog != 0) {
		$prog_bar .= " \/ ";
		$pct_color = color_grad($cpu2_pct_begin,$cpu2_pct_end,100,$cpu2_pct_prog);
		$prog_bar =~ s/$/\[color=#$pct_color\]$cpu2_pct_prog\%\[\/color\]/;
	}
	
	
	#progress bar is done!
	#It should look like "{~~~~~~_____} 34%" but will COLOR.
	
	return $prog_bar;
}


Modified sig script in it's entirety -- Produces a sig similar to the following:
Crunching.for.Overclockers.com!
Team Rank: 27th________________90,336.05 Total SETI Credit
World Rank: 1,639th___________________1,059.67090 Recent Average Credit

Current Work As Of 02/12/2005 at 22:38.

{>>>>>>>>>>>____}__70%______ goddess (Athlon XP 1800+)
{>>>>___________}__24%______ Crackerjack (mobile Athlon XP 1500+)
{>>>>>>>>>>>>>__}__84% / 23% Nacho (Mobile Pentium 4 2.80GHz)
{>>>>>>>>>>_____}__64% / 41% SilverSurfer (Mobile Pentium 4 2.80GHz)
{>>>>>>>>>>>>>>>}__97% / 75% ozzlo (Pentium 4 2.80GHz)
{>>>>>>>>>>>>>__}__84%______ footnduji (Pentium 4 1.80GHz)

Code:
#!/usr/bin/perl 

use XML::Simple;
use LWP::Simple;
use LWP::UserAgent;
use IO::Socket;
use Data::Dumper;



# Projects To Provide Data For
#   0 means disable, 1 means enable
################
$get_boinc = 1;

	$boinc_usefile      = 0;	#Get data from the local BOINC install (may not work for non-SETI WUs; 1st CPU's work only)
	$boinc_useremote    = 1;	#Get data from clients via BOINC RPC Calls (this should work with all BOINC projects; all running WUs)
	$boinc_useweb_seti  = 1;	#Get SETI@Home user data from [url]http://www.boincstats.com[/url]
	$boinc_useweb_boinc = 0;	#Get overall BOINC userdata from [url]http://www.boincstats.com[/url]

$get_classic = 0;
	$classic_usefile = 0;	#Not implemented yet!
	$classic_useweb  = 1;	#Get data from [url]http://setiathome.berkeley.edu[/url]



# BOINC Setup
#  If you're in windows, make sure to separate directories with "\\" instead of "\".
################
$boinc_home        = "c:\\program files\\boinc";
@remote_hosts      = ("Goddess", "CRACKERJACK", "Nacho", "Silversurfer");
@remote_ports      = (31416, 31416, 31416, 31416);
$seti_id           = 15576;
$cross_platform_id = "e9827f3ec722cd9bfe38e68b17b6c1f8";


# Classic Setup
################
$classic_home = "c:\\program files\\seti\@home";
$classic_email  = "someone\@juno.com";


# Perl Script Setup
################
$invisible  = "333333";
@time = localtime;
$time[5] += 1900;
$time[4]++;
#[url]http://www.perldoc.com/perl5.6/pod/...-Perl-Functions[/url]
$time_str = sprintf("%02d/%02d/%04d at %02d:%02d.",$time[4],$time[3],$time[5],$time[2],$time[1]);


################################################################################
##
## Variables which can be used in the signiture:
##
##  BOINC_USEFILE:
##    $seti_progress              Fraction of the way through the current WU (0 through 1)
##    $wu_name                    Name of the current WU
##    $seti_credit_total          Total credit for the SETI@Home project
##    $seti_credit_recent         RAC for the SETI@Home project
##
##
##  BOINC_USEREMOTE:
##    * $blah[x]    = $blah for the Xth remote client successfully contacted
##    * $blah[x][0] = The first of (possibly several) values for $blah[x]
##        * Only applies to XML elements that would have multiple values (ie: result_name, project_name, etc)
##
##    $domain_name[x]             Name of the computer
##    $ip_addr[x]                 IP Address of the computer
##    $p_ncpus[x]                 Number of CPUs (logical, not physical) seen by BOINC
##    $p_model[x]                 Model String of the CPU (ie: "Mobile Pentium 4 2.80GHz")
##    $p_vendor[x]                Vendor String of the CPU (ie: "Intel")
##    $project_name[x][y]         Project(s) signed up for at the location (ie: $project_name[0][0]="SETI", $project_name[0][1]="LHC", etc)
##    $total_credit[x][y]         Total credit for the Yth project (see $project_name[x][y]) at the location
##    $recent_credit[x][y]        RAC for the Yth project (see $project_name[x][y]) at the location
##    $result_name[x][y]          Name of the WU(s) currently being processed (Y>0 only used on systems with p_ncpus>=2)
##    $result_url[x][y]           Project URL of the WU(s) currently being processed (Y>0... you know the drill :D)
##    $result_project[x][y]       Project Name of the WU(s) currently being processed (Y>0........)
##    $fraction_done[x][y]        Fraction of the way through the current WU(s) being processed (Y>0 only used on systems with p_ncpus>=2)
##    $cpu_time[x][y]             CPU time in seconds spent on the current WU(s) being processed (Y>0 only used on systems with p_ncpus>=2)
##
##
##  BOINC_USEWEB_SETI:
##    $seti_user                  SETI@Home username
##    $seti_total_credit          Total credit for the SETI@Home project (should be same as $seti_credit_total)
##    $seti_recent_credit         RAC for the SETI@Home project (should be the same as $seti_credit_recent)
##    $seti_hostcount             Number of hosts running the SETI@Home project
##    $seti_overall_rank          Worldwide rank within SETI@Home
##    $seti_percentile            Percentile rank within SETI@Home ("Accumulated more Credit than % of all users")
##    $seti_team_rank             Team rank for SETI@Home
##
##
##  BOINC_USEWEB_BOINC:
##    $boinc_user                 BOINC username
##    $boinc_total_credit         Total credit (among ALL projects) for BOINC
##    $boinc_credit_recent        RAC for (among ALL projects) for BOINC
##    $boinc_overall_rank         Worldwide rank among ALL BOINC users
##    $boinc_percentile           Percentile rank within ALL of BOINC
##    $boinc_sah_total_credit     Total credit crunched for the SETI@Home project
##    $boinc_sah_percentage       Percentage of total credit crunched for SETI@Home
##    $boinc_pah_total_credit     Total credit crunched for the Predictor@Home project
##    $boinc_pah_percentage       Percentage of total credit crunched for Predictor@Home
##    $boinc_cpdn_total_credit    Total credit crunched for the ClimatePrediction.net project
##    $boinc_cpdn_percentage      Percentage of total credit crunched for ClimatePrediction.net
##    $boinc_lhc_total_credit     Total credit crunched for the LHC@Home project
##    $boinc_lhc_percentage       Percentage of total credit crunched for LHC@Home
##    $boinc_pirates_total_credit Total credit crunched for the Pirates@Home project
##    $boinc_pirates_percentage   Percentage of total credit crunched for Pirates@Home
##    $boinc_eah_total_credit     Total credit crunched for the Einstein@Home project
##    $boinc_eah_percentage       Percentage of total credit crunched for Einstein@Home
##
##
##  CLASSIC_USEWEB:
##    $cl_name                    Classic username
##    $cl_num_results             Results returned
##    $cl_cpu_time                Total CPU time
##    $cl_avg_time                Average CPU time
##    $cl_daily_results           Results / day
##    $cl_last_result             Time last WU was recieved
##    $cl_reg_date                Date registered with SETI@Home Classic
##    $cl_user_time               Total time you have been a registered user
##    $cl_rank                    Classic worldwide rank
##    $cl_rank_same               Number of members with the same rank as you
##    $cl_top_percent             Top percentage of users you are in (100.0 - $cl_top_frac = Crunched more than x% of users)
##



if ($get_boinc) { #Get BOINC data
	
	if ($boinc_usefile) { #Get BOINC data from the local instalation
	
		################################################
		# Get data from the local BOINC instalation   ##
		################################################
		
		# SETI Client File Locations
		################
		$wu         = "$boinc_home/slots/0/work_unit.sah";
		$state      = "$boinc_home/slots/0/state.sah";
		$c_state    = "$boinc_home/client_state.xml";
		
		#windows-specific stuff
		if ($^O =~ /win/i) {
  			#change "/" into "\" on windows machines
  			$wu         =~ s/\//\\\\/g;
  			$state      =~ s/\//\\\\/g;
  			$c_state    =~ s/\//\\\\/g;
		}
		
				
		#read client's state into $seti_progress
		open BOINC_STATE, "$state";
		while (<BOINC_STATE>) {
			if (/<prog>[\d\.]*<\/prog>/) {
				s/<prog>([\d\.]*)<\/prog>/$1/;
				chomp;
				$seti_progress = $_;
			}
		}
		close BOINC_STATE;		

		
		open BOINC_WU, "$wu";
 		while (<BOINC_WU>) {
			s/<soft_link>\.\.\\\.\.\\projects\\setiathome\.berkeley\.edu\\//;
			s/<\/soft_link>//;
			chomp;
			$wu_name = $_;
		}
		close BOINC_WU;
 			

		$cs_xml = XMLin($c_state);
		$seti_credit_total = $cs_xml->{project}->{user_total_credit};
		$seti_credit_recent = $cs_xml->{project}->{user_expavg_credit};
		
	}
	
	
	
	
	
	if ($boinc_useremote) { #Get BOINC data from remote RPC calls
	
		##########################################################
		# Get data from the remote locations in @remote_hosts   ##
		##########################################################
		
		#Cycle through all hosts declared in the array at top
		################
		$contacted_hosts=0;
		for($i=0; $i<@remote_hosts; $i++) {
			
			my $name = $remote_hosts[$i] or die "Missing server name\n";
			my $port = $remote_ports[$i] or die "Missing port number\n";
			
			my $socket = IO::Socket::INET->new('PeerAddr' => $name, 'PeerPort' => $port, 'Proto' => 'tcp');	
			
			if ($socket) { #ONLY do the following if socket creation sucessful
				
				# Get first 100K of state data from BOINC client
				################
				print $socket "<get_state/>\n";
				$socket->recv($reply,102400);
				#print "$reply";
				
				close $socket or die "Can't close socket ($!)\n";
				
				
				# Remove trailing charachter from string (to make XML compliant)
				################
				$reply = substr($reply, 0, -1, );
				
				
				# Push the XML reply onto the array of replys
				################
				$xml = new XML::Simple keyattr => [];
				push(@rpc, $xml->XMLin($reply));
				
				$contacted_hosts += 1;
			}
		
		}
		
		
		# Set up some initial vars into arrays
		# Not extremely useful for "foreach" loops, as you will have to use
		# the @index array to sucessfully substitute in array values.
		################
		
		$host_num = 0;
		foreach $host (@rpc) {
			
			$index[$host_num] = $host_num;	#index is NOTHING more than a cheap way of letting the predefined vars work with a foreach loop
			
			$domain_name[$host_num] = $host->{host_info}->{domain_name};

			$ip_addr[$host_num]     = $host->{host_info}->{ip_addr};
			$p_ncpus[$host_num]     = $host->{host_info}->{p_ncpus};
			$p_model[$host_num]     = $host->{host_info}->{p_model};
			$p_vendor[$host_num]    = $host->{host_info}->{p_vendor};
			
			if (ref($host->{project}) eq 'ARRAY') { #If signed up for multiple projects...
				$i = 0;
				foreach $project (@{$host->{project}}) { #Store each project into it's own array
					$project_name[$host_num][$i]  = $project->{project_name};
					$total_credit[$host_num][$i]  = $project->{user_total_credit};
					$recent_credit[$host_num][$i] = $project->{user_expavg_credit};
					
					$i = $i + 1;
				}
			}
			else { #Get only the single project's data
					$project_name[$host_num][0]  = $project->{project_name};
					$total_credit[$host_num][0]  = $project->{user_total_credit};
					$recent_credit[$host_num][0] = $project->{user_expavg_credit};
			}
			
			
			if (ref($host->{result}) eq 'ARRAY') { #If more than one result is on the system...
				$i = 0;
				foreach $result (@{$host->{result}}) { #Extract the results....
					$active = $result->{active_task}->{result_name};
					if ($active ne "") { #Looking only for the "active" one.
						$result_name[$host_num][$i] = $result->{active_task}->{result_name};
						$result_url[$host_num][$i] = $result->{active_task}->{project_master_url};
						
						#Get name of the project the WU is for
						#   note: this requires making a new XML object for this
						#   specific RPC so that we can "fold" the tree and find
						#   the title from what data we are given
						###############
						$temp_xml = XMLin($reply, keyattr => [ 'master_url' ]);
						$result_project[$host_num][$i] = $temp_xml->{project}->{$result_url[$host_num][$i]}->{project_name};
						
						$fraction_done[$host_num][$i] = $result->{active_task}->{fraction_done};
						$cpu_time[$host_num][$i] = $result->{active_task}->{current_cpu_time};
						
						$i = $i + 1;
					}
				}
			}
			else { #Extract the only result (which should be active...)
						$result_name[$host_num][0]   = $host->{result}->{active_task}->{result_name};
						$fraction_done[$host_num][0] = $host->{result}->{active_task}->{fraction_done};
						$cpu_time[$host_num][0]      = $host->{result}->{active_task}->{current_cpu_time};
			}
			
			$host_num = $host_num + 1;
			
		}
		
	}
	
	


	
	if ($boinc_useweb_seti) { #Get BOINC data from [url]http://www.boincstats.com[/url]
		
		##########################################
		# Get SETI@Home BOINC stats from web    ##
		##########################################
		  
		$boinc_page = "http://www.boincstats.com/stats/user_graph.php?pr=sah&id=$seti_id";
		$local_boinc_cache = "boinc_seti.html";
		
		getstore($boinc_page, $local_boinc_cache);
		
		if (! -e $local_boinc_cache) {
			print "get the file, stupid\n";
			exit;
		}
  
		#extract stats from boinc page
		open BC, "$local_boinc_cache";
		while(<BC>){
			
			if (/Detailed statistics for<br>/) {
				$_ =~ s/"([a-zA-Z][\w\s]*)/$1/;
				$seti_user = $1;
						
			} elsif (/<td>Total Credit</) {
				<BC>;
				$seti_total_credit = <BC>;
				chomp($seti_total_credit);
				$seti_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
			
			} elsif (/Number of hosts/) { 
				<BC>;
				$seti_hostcount = <BC>;
				chomp($seti_hostcount);
				$seti_hostcount =~ s/\s*(\d*).*/$1/;
			
			} elsif (/World Position/) {
				<BC>;
				$seti_overall_rank = <BC>;
				chomp($seti_overall_rank);
				$seti_overall_rank =~ s/\s*([\d,]*).*/$1/;
			
			} elsif (/Recent Average Credit/) {
				<BC>;
				$seti_recent_credit = <BC>;
				chomp($seti_recent_credit);
				$seti_recent_credit =~ s/\s*([\d\.\,]*).*/$1/;
			
			} elsif (/than % of all users/) {
				$seti_percentile = <BC>;
				chomp($seti_percentile);
				$seti_percentile =~ s/<td>(\d*.\d*)%.*/$1/;
			
			} elsif (/Position in Team/) {
				<BC>;
				$seti_team_rank = <BC>;
				chomp($seti_team_rank);
				$seti_team_rank =~ s/\s*(\d*).*/$1/;
			}
		}
		close BC;
	}
	
	


	
	if ($boinc_useweb_boinc) { #Get BOINC data from [url]http://www.boincstats.com[/url]
		
		########################################
		# Get Overall BOINC stats from web    ##
		########################################
		
		$boinc_page = "http://www.boincstats.com/stats/boinc_user_graph.php?pr=bo&id=$cross_platform_id";
		$local_boinc_cache = "boinc_overall.html";
		
		getstore($boinc_page, $local_boinc_cache);
		
		if (! -e $local_boinc_cache) {
			print "get the file, stupid\n";
			exit;
		}
  
		#extract stats from boinc page
		open BC, "$local_boinc_cache";
		while(<BC>){

			if (/Detailed statistics for<br>/) {

				$_ =~ s/"([a-zA-Z][\w\s]*)/$1/;
				$boinc_user = $1;
						
			} elsif (/<td>Total Credit</) {
				#<BC>;
				$boinc_total_credit = <BC>;
				chomp($boinc_total_credit);
				$boinc_total_credit =~ s/<td>([\d\.\,]*)<.*/$1/;
			
			} elsif (/BOINC World Position/) {
				<BC>;
				$boinc_overall_rank = <BC>;
				chomp($boinc_overall_rank);
				$boinc_overall_rank =~ s/\s*([\d,]*).*/$1/;
			
			} elsif (/<td>Recent Average Credit</) { 
				<BC>;
				$boinc_credit_recent = <BC>;
				chomp($boinc_credit_recent);
				$boinc_credit_recent =~ s/\s*([\d,]*).*/$1/;
			
			} elsif (/than % of all BOINC users/) {
				$boinc_percentile = <BC>;
				chomp($boinc_percentile);
				$boinc_percentile =~ s/<td>(\d*.\d*)%.*/$1/;
			
			} elsif (/SETI\@Home credits/) {
				<BC>;
				$boinc_sah_total_credit = <BC>;
				chomp($boinc_sah_total_credit);
				$boinc_sah_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
			
			} elsif (/Percentage of credits crunched for SETI\@Home/) {
				<BC>;
				$boinc_sah_percentage = <BC>;
				chomp($boinc_sah_percentage);
				$boinc_sah_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_sah_percentage = trimwhitespace($boinc_sah_percentage);
			
			} elsif (/Predictor\@Home credits/) {
				<BC>;
				$boinc_pah_total_credit = <BC>;
				chomp($boinc_pah_total_credit);
				$boinc_pah_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
				$boinc_pah_total_credit = trimwhitespace($boinc_pah_total_credit);
			
			} elsif (/Percentage of credits crunched for Predictor\@Home/) {
				<BC>;
				$boinc_pah_percentage = <BC>;
				chomp($boinc_pah_percentage);
				$boinc_pah_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_pah_percentage = trimwhitespace($boinc_pah_percentage);
			
			} elsif (/Climate Prediction credits/) {
				<BC>;
				$boinc_cpdn_total_credit = <BC>;
				chomp($boinc_cpdn_total_credit);
				$boinc_cpdn_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
				$boinc_cpdn_total_credit = trimwhitespace($boinc_cpdn_total_credit);
			
			} elsif (/Percentage of credits crunched for Climate Prediction/) {
				<BC>;
				$boinc_cpdn_percentage = <BC>;
				chomp($boinc_cpdn_percentage);
				$boinc_cpdn_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_cpdn_percentage = trimwhitespace($boinc_cpdn_percentage);
			
			} elsif (/LHC\@Home credits/) {
				<BC>;
				$boinc_lhc_total_credit = <BC>;
				chomp($boinc_lhc_total_credit);
				$boinc_lhc_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
				$boinc_lhc_total_credit = trimwhitespace($boinc_lhc_total_credit);
			
			} elsif (/Percentage of credits crunched for LHC\@Home/) {
				<BC>;
				$boinc_lhc_percentage = <BC>;
				chomp($boinc_lhc_percentage);
				$boinc_lhc_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_lhc_percentage = trimwhitespace($boinc_lhc_percentage);
			
			} elsif (/Pirates\@Home credits/) {
				<BC>;
				$boinc_pirates_total_credit = <BC>;
				chomp($boinc_pirates_total_credit);
				$boinc_pirates_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
				$boinc_pirates_total_credit = trimwhitespace($boinc_pirates_total_credit);
			
			} elsif (/Percentage of credits crunched for Pirates\@Home/) {
				<BC>;
				$boinc_pirates_percentage = <BC>;
				chomp($boinc_pirates_percentage);
				$boinc_pirates_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_pirates_percentage = trimwhitespace($boinc_pirates_percentage);
			
			} elsif (/Einstein\@Home credits/) {
				<BC>;
				$boinc_eah_total_credit = <BC>;
				chomp($boinc_eah_total_credit);
				$boinc_eah_total_credit =~ s/\s*([\d\.\,]*)<.*/$1/;
				$boinc_eah_total_credit = trimwhitespace($boinc_eah_total_credit);
			
			} elsif (/Percentage of credits crunched for Einstein\@Home/) {
				<BC>;
				$boinc_eah_percentage = <BC>;
				chomp($boinc_eah_percentage);
				$boinc_eah_percentage =~ s/\b(\d*.\d*)%.*/$1/;
				$boinc_eah_percentage = trimwhitespace($boinc_eah_percentage);
			
			}
		}
		close BC;
	}
}





if ($get_classic) { #Get Classic Data
	
	if ($classic_usefile) {
		
		#NOT YET IMPLMENTED!!
	
	}
	



	
	if ($classic_useweb) {
	
		################################
		# Get stats from Berkeley     ##
		################################
		 
		$berk_url = "http://setiathome2.ssl.berkeley.edu/fcgi-bin/fcgi?email=$classic_email&cmd=user_xml";
		$berk_url =~ s/@/%40/;
		
		
		$ua = LWP::UserAgent->new();
		$berk_xml = $ua->get( "$berk_url");
				
		
		#extract info from Berkeley's not-quite XML 
		$xmld = "";
		foreach $line (split /^/, $berk_xml->content) {
			$xmld .= $line;
		}
		
		#print "XML: $xmld";
		$berkeley_xml = new XML::Simple keyattr => [];
		$berkeley_xml = XMLin($xmld);
		
		$cl_name          = trimwhitespace($berkeley_xml->{userinfo}->{name});
		$cl_num_results   = trimwhitespace($berkeley_xml->{userinfo}->{numresults});
		$cl_cpu_time      = trimwhitespace($berkeley_xml->{userinfo}->{cputime});
		$cl_avg_time      = trimwhitespace($berkeley_xml->{userinfo}->{avecpu});
		$cl_daily_results = trimwhitespace($berkeley_xml->{userinfo}->{resultsperday});
		$cl_last_result   = trimwhitespace($berkeley_xml->{userinfo}->{lastresulttime});
		$cl_reg_date      = trimwhitespace($berkeley_xml->{userinfo}->{regdate});
		$cl_user_time     = trimwhitespace($berkeley_xml->{userinfo}->{usertime});
		
		$cl_rank          = trimwhitespace($berkeley_xml->{rankinfo}->{rank});
		$cl_rank_same     = trimwhitespace($berkeley_xml->{rankinfo}->{num_samerank});
		$cl_top_percent   = toPercent(trimwhitespace($berkeley_xml->{rankinfo}->{top_rankpct}));
	}
}





#These are boring examples of how to print out stuff.
#Hopefully, you'll come up with something more interesting. ;)

#print "LOCAL BOINC INFO:\n";
#print "progress is $seti_progress\n";
#print "total credits is $seti_credit\n";
#print "wu name is $wu_name\n";

#if ($boinc_useweb_seti) {
#  print "BOINC INFO:\n";
#  print "username = $boinc_user\n";
#  print "ID = $boinc_id\n";
#  print "total credit = $boinc_total_credit\n";
#  print "hosts = $boinc_hostcount\n";
#  print "overall rank = $boinc_overall_rank\n";
#  print "percentile = $boinc_percentile\n";
#  print "team rank = $boinc_team_rank\n";
#}

#if ($boinc_useweb_boinc) {
#	print "$boinc_user\n";
#	print "Total: $boinc_total_credit\n";
#	print "Total2: $seti_total_credit\n";
#	print "RAC: $boinc_credit_recent\n";
#	print "Rank: $boinc_overall_rank\n";
#	print "Percentile: $boinc_percentile\n";
#	print "SETI Total: $boinc_sah_total_credit\n";
#	print "SETI Percentile: $boinc_sah_percentage\n";
#	print "PAH Total: $boinc_pah_total_credit\n";
#	print "PAH Percentile: $boinc_pah_percentage\n";
#	print "CPDN Total: $boinc_cpdn_total_credit\n";
#	print "CPDN Percentile: $boinc_cpdn_percentage\n";
#	print "LHC Total: $boinc_lhc_total_credit\n";
#	print "LHC Percentile: $boinc_lhc_percentage\n";
#	print "Pirates Total: $boinc_pirates_total_credit\n";
#	print "Pirates Percentile: $boinc_pirates_percentage\n";
#	print "Einstein Total: $boinc_eah_total_credit\n";
#	print "Einstein Percentile: $boinc_eah_percentage\n";
#}

#if ($classic_useweb) { 
#	print "CLASSIC INFO:\n";
#	print "username is $cl_name\n";
#	print "number of results is $cl_num_results\n";
#	print "total cpu time donated is $cl_cpu_time\n";
#	print "average cpu time is $cl_avg_time\n";
#	print "results per day is $cl_daily_results\n";
#	print "last result returned on $cl_last_result\n";
#	print "registration date: $cl_reg_date\n";
#	print "total user time: $cl_user_time\n";
#	print "overall rank is $cl_rank\n";
#	print "$cl_rank_same members have the same rank as you\n";
#	print "you are in the top $cl_top_percent% of all SETI@Home users)";
#}



$crunch_start = "ff00ff";
$crunch_end   = "00ff00";

$crunch_str = color_string($crunch_start,$crunch_end,"Crunching for Overclockers.com!");

#99% means you're in the top 1%, so put that in $top_pct
$top_pct = sprintf("%.2f",100.0 - $seti_percentile);
$rank = $seti_overall_rank;
$boinc_total_credit =~ s/,//g;
$credits = sprintf("%.0f",$seti_total_credit);


##################################
#This is where stuff is printed.##
##################################

print "\[b\]$crunch_str\[\/b\]\n";
print "\[size=1\]Team Rank: \[b\]$seti_team_rank" . "th\[\/b\]\[color=#$invisible\]________________\[\/color\]\[b\]$seti_total_credit\[\/b\] Total SETI@Home Credit\n";
print "World Rank: \[b\]$seti_overall_rank" . "th\[\/b\]\[color=#$invisible\]___________________\[\/color\]\[b\]$seti_recent_credit\[\/b\] Recent Average Credit\n";
print "\n";
print "Current Work As Of $time_str \[\/size\]\n";

for ($host = 0; $host < $contacted_hosts; $host++) { #Go through all this code for every host that we managed to connect to via RPC

	$line = "";
	$line .= "\[FONT=Courier New\] ";
	$line .= progbar($fraction_done[$host][0], $fraction_done[$host][1]); 

	if ($p_ncpus[$host]==1) {$line .= "\[color=#$invisible\]______\[\/color\]";}
	$line .= " $domain_name[$host]";
	
	
	#Color the project depending on if it's a SETI@Home WU or not...
	###############
	if ($result_project[$host][0] eq "SETI@Home") { #If a SETI@Home WU....
		$project = "\[color=PaleTurquoise\]" . $result_project[$host][0] . "\[\/color\]";
	}
	else { #If not a SETI@Home WU (LHC, CPDN, Predictor, etc)...
		$project = "\[color=RoyalBlue\]" . $result_project[$host][0] . "\[\/color\]";
	}
	$line .= " $project";
		
	if ($result_project[$host][1] ne "") {
		if ($result_project[$host][1] eq "SETI@Home") { #If a SETI@Home WU....
			$project = "\[color=PaleTurquoise\]" . $result_project[$host][1] . "\[\/color\]";



		}
		else { #If not a SETI@Home WU (LHC, CPDN, Predictor, etc)...
			$project = "\[color=RoyalBlue\]" . $result_project[$host][1] . "\[\/color\]";
		}					
	
		$line .= " \/ $project";	
	}

	

	#Colorize / Trim CPU data
	#   note: aparently some chips have the actual CPU info
	#   stored in the p_vendor space instead of the p_model
	#   space. This if statement sees which is longer, and
	#   sets CPU to that (this assumes the CPU info will
	#   take more room)
	################
	if ($p_model[$host] =~ /AMD/i  |  $p_vendor[$host] =~ /AMD/i) {
		$cpu = "\[color=Lime\]";
	}
	elsif ($p_model[$host] =~ /Intel/i  |  $p_vendor[$host] =~ /Intel/i) {
		$cpu = "\[color=DeepSkyBlue\]";
	}
	else {
		$cpu = "\[color=White\]";
	}
	
	if ( length(stripcpu($p_model[$host])) > length(stripcpu($p_vendor[$host])) ) {
		$cpu .= stripcpu($p_model[$host]);
	}else {
		$cpu .= stripcpu($p_vendor[$host]);
	}
	
	$cpu .= "\[\/color\]";

	
	$line .= " ($cpu) \[\/FONT\] \n";
	
	print "$line";


}





#Given a starting color, an ending color, a total number of steps, the
#current step and an optional error, return the color that corresponds
#to that step in a gradient.
sub color_grad
{
  $start_rgb = shift; #"ff00ff"
  $end_rgb   = shift; #"00ff00"
  $last_step = shift; #"36"
  $curr_step = shift; #"12"
  #error is random variation, in decimal shades
  $error     = shift;
  $periods   = shift;
  $fun       = shift;

  return color_grad_fun($start_rgb,$end_rgb,$curr_step/$last_step,$error,$periods,$fun);
}


sub color_grad_fun
{
  my $start_rgb = shift; #"ff00ff"
  my $end_rgb   = shift; #"00ff00"
  my $curr_step = shift; #floating pt number, modded between 0 and 1. inclusive
  
  #OPTIONAL ARG: error is random variation, in decimal shades
  my $error     = shift;
  $error = 0 if (! defined $error);
  
  #OPTIONAL ARG: how many times to cycle through the above function
  my $periods   = shift;
  $periods = 1 if (! defined $periods);
  
  #OPTIONAL ARG: function with a period of 1 and a range 0-1 to determine color distribution
  my $fun       = shift; 
  #This function has the same behavior as the previous implementation.
  $fun = sub {my $x = shift; return ((255*$x % 255)/255);} if (!defined $fun);
  
  $error /= 255;
  
  for $curr (0,1,2) {
  
    $min   = hex(substr($start_rgb,$curr*2,2)) / 255;
    $max   = hex(substr($end_rgb,$curr*2,2)) / 255;
    $range = $max - $min;
    $funval = &$fun($curr_step*$periods);
  
    #print "max is $max, min is $min, range is $range, step is $curr_step,";
    $color[$curr] = ($min + $range*$funval);
    
    if ($error == 0) {
      $my_error = 0;
    } else {
      $my_error = (rand 2*$error) - $error;
    }
    
    while (($color[$curr]+$my_error) < 0 || ($color[$curr]+$my_error) > 1) {
      $my_error = ((rand 2*$error) - $error);
    }
    #print "using error of $my_error, max is $error\n";
    #$norml = $color[$curr]*255;
    #print "normal color is $norml, ";
    $color[$curr] += $my_error;

    $color[$curr] *= 255;
    #$color[$curr] = sprintf("%.0f",)
    #print "color is $color[$curr]\n";
  
  }
  return sprintf("%02x%02x%02x",$color[0],$color[1],$color[2]);
}

sub color_string
{
  $start_rgb = shift;

  $end_rgb = shift;
  $string = shift;
  $error = shift;
  #print "COLOR STRING: passed $string\n";
  $error = 0 if (! defined $error);
  
  #ugly bug if this isn't declared my
  my $color_string;
  $str_len = length $string;
  $i=0;
  
  foreach $char (split //, $string) {
     $fstr_color=color_grad($start_rgb,$end_rgb,$str_len,$i++,$error);
     #vb3 seems to treat individually colored spaces an non-printable
     if ($char eq " ") {
       $color_string .= "\[color\=\#$invisible\].\[\/color\]";
     } else {
       $color_string .= "\[color\=\#$fstr_color\]$char\[\/color\]";
     }
  }
  #print "COLOR STRING: returning $color_string\n";
  return $color_string;
}

# Remove whitespace from the start and end of the string
sub trimwhitespace($)
{
	my $string = shift;
	$string =~ s/^\s+//;
	$string =~ s/\s+$//;
	return $string;
}

sub stripcpu($) {
	$string = shift;
	$string =~ s/Intel//ig;
	$string =~ s/AMD//ig;
	$string =~ s/\(R\)//ig;
	$string =~ s/\(tm\)//ig;
	$string =~ s/CPU//ig;
	$string = trimwhitespace($string);
	return $string;
}


sub progbar($) {
	#make a pretty progress bar
	$cpu1_progress = shift;
	$cpu2_progress = shift;
	
	#length of progress bar
	$prog_len = 15;
	
	#starting and ending colors for progress bar
	$cpu1_start_color = "00ff00";
	$cpu1_end_color   = "ffffff";
	$cpu2_start_color = "ff00ff";
	$cpu2_end_color   = "000000";
	
	#colors for the percent indicator
	$cpu1_pct_begin  = "00ff00";
	$cpu1_pct_end    = "ffffff";
	$cpu2_pct_begin  = "ff00ff";
	$cpu2_pct_end    = "000000";
	
	#charachter(s) to use for the percent indicator
	$cpu1_prog_char = ">";
	$cpu2_prog_char = ">";
	
	#calculate number of filled bars, empty bars, and change progress to %
	$cpu1_filled_bars = sprintf("%.0f",($cpu1_progress)*$prog_len);
	$cpu2_filled_bars = sprintf("%.0f",($cpu2_progress)*$prog_len);	
	$cpu1_empty_bars = $prog_len - $cpu1_filled_bars;
	$cpu2_empty_bars = $prog_len - $cpu2_filled_bars;	
	$cpu1_pct_prog = sprintf("%.0f",$cpu1_progress*100);
	$cpu2_pct_prog = sprintf("%.0f",$cpu2_progress*100);
	

	#print "$cpu1_pct_prog% progress(1) \/ $cpu2_pct_prog% progress(2)\n";
	#print "$cpu1_filled_bars chars(1) \/ $cpu2_filled_bars chars(2)\n";
	#print "$cpu1_empty_bars unfilled(1) \/ $cpu2_empty_bars unfilled(2)\n";
	
	
	$prog_bar = "{";
	
	if ($cpu1_pct_prog <= $cpu2_pct_prog) {
	
		$prog_bar .= "\[b\]";
		for($i=0; $i < $cpu1_filled_bars; $i++) {
			$color=color_grad($cpu1_start_color,$cpu1_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu1_prog_char\[\/color\]";
		}
		$prog_bar .= "\[\/b\]";
		
		for($i=$i; $i < $cpu2_filled_bars; $i++) {
			$color=color_grad($cpu2_start_color,$cpu2_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu2_prog_char\[\/color\]";
		}

		$prog_bar .= "\[color=#$invisible\]";
		$prog_bar .=  "_" x $cpu2_empty_bars;
		$prog_bar .= "\[\/color\]";
		$prog_bar .= "}";	

	}
	else {

		$prog_bar .= "\[b\]";
		for($i=0; $i < $cpu2_filled_bars; $i++) {
			$color=color_grad($cpu2_start_color,$cpu2_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu2_prog_char\[\/color\]";
		}
		$prog_bar .= "\[\/b\]";
		
		for($i=$i; $i < $cpu1_filled_bars; $i++) {
			$color=color_grad($cpu1_start_color,$cpu1_end_color,$prog_len,  $i);
			$prog_bar .= "\[color=#$color\]$cpu1_prog_char\[\/color\]";
		}

		$prog_bar .= "\[color=#$invisible\]";
		$prog_bar .=  "_" x $cpu1_empty_bars;
		$prog_bar .= "\[\/color\]";
		$prog_bar .= "}";

	}
		
	#now $prog_bar looks like "{****___}" but with color tags
	
	
	$cpu1_pct_len = length $cpu1_pct_prog;
	$cpu2_pct_len = length $cpu2_pct_prog;
	
	$spc_len = 2 - $pct_len;
	$spc = "_" x $spc_len;
	$prog_bar =~ s/$/\[color=#$invisible\]$spc\[\/color\]/;
	
	$pct_color = color_grad($cpu1_pct_begin,$cpu1_pct_end,100,$cpu1_pct_prog);
	$prog_bar =~ s/$/\[color=#$pct_color\]$cpu1_pct_prog\%\[\/color\]/;
	
	if ($cpu2_pct_prog != 0) {
		$prog_bar .= " \/ ";
		$pct_color = color_grad($cpu2_pct_begin,$cpu2_pct_end,100,$cpu2_pct_prog);
		$prog_bar =~ s/$/\[color=#$pct_color\]$cpu2_pct_prog\%\[\/color\]/;
	}
	
	
	#progress bar is done!
	#It should look like "{~~~~~~_____} 34%" but will COLOR.
	
	return $prog_bar;
}

sub toPercent($) {
	$fraction = shift;
	$percent = sprintf("%.2f",$fraction);
}

sub setWidth {
	#Pads a string with invisible charachters to the right to
	#make it a certian width. If the string is LONGER than
	#the passed in width, a substring will be taken to truncate
	#it down to the specified width
	
	$string = shift;
	$width = shift;
	
	if (length $string > $width) {
		$string = substr($string,0,$width);
	}
	else {
		$num_blanks = $width - length $string;
		
		$string .= "\[color=#$invisible\]";
		$string .=  "_" x $num_blanks;
		$string .= "\[\/color\]";
	}

	return $string;
}

EDIT: Copy/pasted the wrong progen examples...

JigPu
 
Last edited:
Major Update

I'm done with modifying the sig_gen.pl file. My current sig is what's going to be available for everyone to hack and criticize. Any changes will be minor bug fixes.

I've written a big bugger of a HOWTO in post #241. Everything from changing colors, to changing the stats, to changing spacing, to adding stats, to basic Perl printing... it's in there. If I forgot something, or my explanation isn't clear, please let me know.

I'll still be watching this thread, so if anyone needs help, just holla hea' or send a PM.

GTFouts, I was considering your suggestion on making variable names out of the colors, but then I realized that it would be harder on people who want to change the stat description and stats. Don't hate me ;) I did put in your comments though, so thanks.
 
Last edited:
It's alive!
Nice hack with the progress bars. I was noticing that having three of them takes up a bunch of space, and that's a slick way to get more info across.
Once I get the time, I'll definitely have to play with this some more. Thanks for the good work, JerMe. I appreciate it.
 
No prob, it's fun to learn to new things.

JigPu, you think I can borrow your spiffy dual progressbar stuff and maybe try a "yellow 'n blue make green" kinda deal with the colors? I haven't thought it through all the way, and it wouldn't be for the "generic" sig_gen, but it'd be a fun attempt to learn about meshing hex colors and the like.
 
I was thinking about trying that kind of blending, but I didn't really have much of a plan of attack so I scrapped it for the simpler overlaying method. By all means, if you've got an idea, tweak the code man! :D

JigPu
 
No problem JerMe. You do have tons of stats to choose from, and declaring variables and then not using them tends to upset perl, and we don't wanna upset perl. You've done a bang up job there. You should be proud.
 
Code:
[font=monospace]{[color=#000033]o[/color][color=#000537]o[/color][color=#000a3b]o[/color][color=#000f3f]o[/color][color=#001443]o[/color][color=#001947]o[/color][color=#001e4b]o[/color][color=#00234f]o[/color][color=#002853]o[/color][color=#002d57]o[/color][color=#00335b]o[/color][color=#00385f]o[/color][color=#003d63]o[/color][color=#004267]o[/color][color=#00476b]o[/color][color=#004c6f]o[/color][color=#005173]o[/color][color=#005677]o[/color][color=#005b7b]o[/color][color=#00607f]o[/color][color=#006684]o[/color][color=#006b88]o[/color][color=#00708c]o[/color][color=#007590]o[/color][color=#007a94]o[/color][color=#333333]_________________________[/color]} [color=#990000]0%[/color] / [color=#007f98]50%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#003d63]o[/color][color=#004267]o[/color][color=#00476b]o[/color][color=#004c6f]o[/color][color=#005173]o[/color][color=#005677]o[/color][color=#005b7b]o[/color][color=#00607f]o[/color][color=#006684]o[/color][color=#006b88]o[/color][color=#00708c]o[/color][color=#007590]o[/color][color=#007a94]o[/color][color=#333333]_________________________[/color]} [color=#b2193f]25%[/color] / [color=#007f98]50%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#333333]_________________________[/color]} [color=#cb327f]50%[/color] / [color=#007f98]50%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#cb327f]o[/color][color=#cd3484]o[/color][color=#cf3689]o[/color][color=#d1388e]o[/color][color=#d33a93]o[/color][color=#d63d99]o[/color][color=#d83f9e]o[/color][color=#da41a3]o[/color][color=#dc43a8]o[/color][color=#de45ad]o[/color][color=#e047b2]o[/color][color=#e249b7]o[/color][color=#e44bbc]o[/color][color=#333333]____________[/color]} [color=#e54cbf]75%[/color] / [color=#007f98]50%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#cb327f]o[/color][color=#cd3484]o[/color][color=#cf3689]o[/color][color=#d1388e]o[/color][color=#d33a93]o[/color][color=#d63d99]o[/color][color=#d83f9e]o[/color][color=#da41a3]o[/color][color=#dc43a8]o[/color][color=#de45ad]o[/color][color=#e047b2]o[/color][color=#e249b7]o[/color][color=#e44bbc]o[/color][color=#e64dc1]o[/color][color=#e84fc6]o[/color][color=#ea51cc]o[/color][color=#ec53d1]o[/color][color=#ee55d6]o[/color][color=#f057db]o[/color][color=#f259e0]o[/color][color=#f45be5]o[/color][color=#f65dea]o[/color][color=#f85fef]o[/color][color=#fa61f4]o[/color][color=#fc63f9]o[/color][color=#333333][/color]} [color=#990000]100%[/color] / [color=#007f98]50%[/color]
{[color=#990000]o[/color][color=#9b0205]o[/color][color=#9d040a]o[/color][color=#9f060f]o[/color][color=#a10814]o[/color][color=#a30a19]o[/color][color=#a40c1e]o[/color][color=#a70e23]o[/color][color=#a91028]o[/color][color=#ab122d]o[/color][color=#ad1433]o[/color][color=#af1638]o[/color][color=#b1183d]o[/color][color=#b31a42]o[/color][color=#b51c47]o[/color][color=#b71e4c]o[/color][color=#b92051]o[/color][color=#bb2256]o[/color][color=#bd245b]o[/color][color=#bf2660]o[/color][color=#c12866]o[/color][color=#c32a6b]o[/color][color=#c52c70]o[/color][color=#c72e75]o[/color][color=#c9307a]o[/color][color=#333333]_________________________[/color]} [color=#cb327f]50%[/color] / [color=#000033]0%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#b1183d]o[/color][color=#b31a42]o[/color][color=#b51c47]o[/color][color=#b71e4c]o[/color][color=#b92051]o[/color][color=#bb2256]o[/color][color=#bd245b]o[/color][color=#bf2660]o[/color][color=#c12866]o[/color][color=#c32a6b]o[/color][color=#c52c70]o[/color][color=#c72e75]o[/color][color=#c9307a]o[/color][color=#333333]_________________________[/color]} [color=#cb327f]50%[/color] / [color=#003f65]25%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#333333]_________________________[/color]} [color=#cb327f]50%[/color] / [color=#007f98]50%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#007f98]o[/color][color=#00849c]o[/color][color=#0089a0]o[/color][color=#008ea4]o[/color][color=#0093a8]o[/color][color=#0099ad]o[/color][color=#009eb1]o[/color][color=#00a3b5]o[/color][color=#00a8b9]o[/color][color=#00adbd]o[/color][color=#00b2c1]o[/color][color=#00b7c5]o[/color][color=#00bcc9]o[/color][color=#333333]____________[/color]} [color=#cb327f]50%[/color] / [color=#00bfcb]75%[/color]
{[color=#4c0019]o[/color][color=#4d031d]o[/color][color=#4e0622]o[/color][color=#4f0a26]o[/color][color=#500d2b]o[/color][color=#51112f]o[/color][color=#511434]o[/color][color=#531838]o[/color][color=#541b3d]o[/color][color=#551f41]o[/color][color=#562347]o[/color][color=#57274b]o[/color][color=#582a50]o[/color][color=#592e54]o[/color][color=#5a3159]o[/color][color=#5b355d]o[/color][color=#5c3862]o[/color][color=#5d3c66]o[/color][color=#5e3f6b]o[/color][color=#5f436f]o[/color][color=#604775]o[/color][color=#614a79]o[/color][color=#624e7e]o[/color][color=#635182]o[/color][color=#645587]o[/color][color=#007f98]o[/color][color=#00849c]o[/color][color=#0089a0]o[/color][color=#008ea4]o[/color][color=#0093a8]o[/color][color=#0099ad]o[/color][color=#009eb1]o[/color][color=#00a3b5]o[/color][color=#00a8b9]o[/color][color=#00adbd]o[/color][color=#00b2c1]o[/color][color=#00b7c5]o[/color][color=#00bcc9]o[/color][color=#00c1cd]o[/color][color=#00c6d1]o[/color][color=#00ccd6]o[/color][color=#00d1da]o[/color][color=#00d6de]o[/color][color=#00dbe2]o[/color][color=#00e0e6]o[/color][color=#00e5ea]o[/color][color=#00eaee]o[/color][color=#00eff2]o[/color][color=#00f4f6]o[/color][color=#00f9fa]o[/color][color=#333333][/color]} [color=#cb327f]50%[/color] / [color=#000033]100%[/color]

{[color=#0000ff]o[/color][color=#0005ff]o[/color][color=#000aff]o[/color][color=#000fff]o[/color][color=#0014ff]o[/color][color=#0019ff]o[/color][color=#001eff]o[/color][color=#0023ff]o[/color][color=#0028ff]o[/color][color=#002dff]o[/color][color=#0033ff]o[/color][color=#0038ff]o[/color][color=#003dff]o[/color][color=#0042ff]o[/color][color=#0047ff]o[/color][color=#004cff]o[/color][color=#0051ff]o[/color][color=#0056ff]o[/color][color=#005bff]o[/color][color=#0060ff]o[/color][color=#0066ff]o[/color][color=#006bff]o[/color][color=#0070ff]o[/color][color=#0075ff]o[/color][color=#007aff]o[/color][color=#007fff]o[/color][color=#0084ff]o[/color][color=#0089ff]o[/color][color=#008eff]o[/color][color=#0093ff]o[/color][color=#0099ff]o[/color][color=#009eff]o[/color][color=#00a3ff]o[/color][color=#00a8ff]o[/color][color=#00adff]o[/color][color=#00b2ff]o[/color][color=#00b7ff]o[/color][color=#00bcff]o[/color][color=#00c1ff]o[/color][color=#00c6ff]o[/color][color=#00ccff]o[/color][color=#00d1ff]o[/color][color=#00d6ff]o[/color][color=#00dbff]o[/color][color=#00e0ff]o[/color][color=#00e5ff]o[/color][color=#00eaff]o[/color][color=#00efff]o[/color][color=#00f4ff]o[/color][color=#00f9ff]o[/color][color=#333333][/color]} [color=#ffff00]0%[/color] / [color=#00fcff]99%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#003dff]o[/color][color=#0042ff]o[/color][color=#0047ff]o[/color][color=#004cff]o[/color][color=#0051ff]o[/color][color=#0056ff]o[/color][color=#005bff]o[/color][color=#0060ff]o[/color][color=#0066ff]o[/color][color=#006bff]o[/color][color=#0070ff]o[/color][color=#0075ff]o[/color][color=#007aff]o[/color][color=#007fff]o[/color][color=#0084ff]o[/color][color=#0089ff]o[/color][color=#008eff]o[/color][color=#0093ff]o[/color][color=#0099ff]o[/color][color=#009eff]o[/color][color=#00a3ff]o[/color][color=#00a8ff]o[/color][color=#00adff]o[/color][color=#00b2ff]o[/color][color=#00b7ff]o[/color][color=#00bcff]o[/color][color=#00c1ff]o[/color][color=#00c6ff]o[/color][color=#00ccff]o[/color][color=#00d1ff]o[/color][color=#00d6ff]o[/color][color=#00dbff]o[/color][color=#00e0ff]o[/color][color=#00e5ff]o[/color][color=#00eaff]o[/color][color=#00efff]o[/color][color=#00f4ff]o[/color][color=#00f9ff]o[/color][color=#333333][/color]} [color=#ffff00]25%[/color] / [color=#00fcff]99%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#007fff]o[/color][color=#0084ff]o[/color][color=#0089ff]o[/color][color=#008eff]o[/color][color=#0093ff]o[/color][color=#0099ff]o[/color][color=#009eff]o[/color][color=#00a3ff]o[/color][color=#00a8ff]o[/color][color=#00adff]o[/color][color=#00b2ff]o[/color][color=#00b7ff]o[/color][color=#00bcff]o[/color][color=#00c1ff]o[/color][color=#00c6ff]o[/color][color=#00ccff]o[/color][color=#00d1ff]o[/color][color=#00d6ff]o[/color][color=#00dbff]o[/color][color=#00e0ff]o[/color][color=#00e5ff]o[/color][color=#00eaff]o[/color][color=#00efff]o[/color][color=#00f4ff]o[/color][color=#00f9ff]o[/color][color=#333333][/color]} [color=#ffff00]50%[/color] / [color=#00fcff]99%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#7fbe7f]o[/color][color=#7fc17f]o[/color][color=#7fc37f]o[/color][color=#7fc67f]o[/color][color=#7fc87f]o[/color][color=#7fcb7f]o[/color][color=#7fce7f]o[/color][color=#7fd07f]o[/color][color=#7fd37f]o[/color][color=#7fd57f]o[/color][color=#7fd87f]o[/color][color=#7fda7f]o[/color][color=#7fdd7f]o[/color][color=#00c1ff]o[/color][color=#00c6ff]o[/color][color=#00ccff]o[/color][color=#00d1ff]o[/color][color=#00d6ff]o[/color][color=#00dbff]o[/color][color=#00e0ff]o[/color][color=#00e5ff]o[/color][color=#00eaff]o[/color][color=#00efff]o[/color][color=#00f4ff]o[/color][color=#00f9ff]o[/color][color=#333333][/color]} [color=#ffff00]75%[/color] / [color=#00fcff]99%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#7fbe7f]o[/color][color=#7fc17f]o[/color][color=#7fc37f]o[/color][color=#7fc67f]o[/color][color=#7fc87f]o[/color][color=#7fcb7f]o[/color][color=#7fce7f]o[/color][color=#7fd07f]o[/color][color=#7fd37f]o[/color][color=#7fd57f]o[/color][color=#7fd87f]o[/color][color=#7fda7f]o[/color][color=#7fdd7f]o[/color][color=#7fdf7f]o[/color][color=#7fe27f]o[/color][color=#7fe57f]o[/color][color=#7fe77f]o[/color][color=#7fea7f]o[/color][color=#7fec7f]o[/color][color=#7fef7f]o[/color][color=#7ff17f]o[/color][color=#7ff47f]o[/color][color=#7ff67f]o[/color][color=#7ff97f]o[/color][color=#7ffb7f]o[/color][color=#333333][/color]} [color=#ffff00]99%[/color] / [color=#00fcff]99%[/color]
{[color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#333333]_________________________[/color]} [color=#ffff00]50%[/color] / [color=#0000ff]0%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#ffff00]o[/color][color=#333333]_________________________[/color]} [color=#ffff00]50%[/color] / [color=#003fff]25%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#333333]_________________________[/color]} [color=#ffff00]50%[/color] / [color=#007fff]50%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#007fff]o[/color][color=#0084ff]o[/color][color=#0089ff]o[/color][color=#008eff]o[/color][color=#0093ff]o[/color][color=#0099ff]o[/color][color=#009eff]o[/color][color=#00a3ff]o[/color][color=#00a8ff]o[/color][color=#00adff]o[/color][color=#00b2ff]o[/color][color=#00b7ff]o[/color][color=#00bcff]o[/color][color=#333333]____________[/color]} [color=#ffff00]50%[/color] / [color=#00bfff]75%[/color]
{[color=#7f7f7f]o[/color][color=#7f817f]o[/color][color=#7f847f]o[/color][color=#7f867f]o[/color][color=#7f897f]o[/color][color=#7f8b7f]o[/color][color=#7f8e7f]o[/color][color=#7f907f]o[/color][color=#7f937f]o[/color][color=#7f957f]o[/color][color=#7f987f]o[/color][color=#7f9b7f]o[/color][color=#7f9d7f]o[/color][color=#7fa07f]o[/color][color=#7fa27f]o[/color][color=#7fa57f]o[/color][color=#7fa77f]o[/color][color=#7faa7f]o[/color][color=#7fac7f]o[/color][color=#7faf7f]o[/color][color=#7fb27f]o[/color][color=#7fb47f]o[/color][color=#7fb77f]o[/color][color=#7fb97f]o[/color][color=#7fbc7f]o[/color][color=#007fff]o[/color][color=#0084ff]o[/color][color=#0089ff]o[/color][color=#008eff]o[/color][color=#0093ff]o[/color][color=#0099ff]o[/color][color=#009eff]o[/color][color=#00a3ff]o[/color][color=#00a8ff]o[/color][color=#00adff]o[/color][color=#00b2ff]o[/color][color=#00b7ff]o[/color][color=#00bcff]o[/color][color=#00c1ff]o[/color][color=#00c6ff]o[/color][color=#00ccff]o[/color][color=#00d1ff]o[/color][color=#00d6ff]o[/color][color=#00dbff]o[/color][color=#00e0ff]o[/color][color=#00e5ff]o[/color][color=#00eaff]o[/color][color=#00efff]o[/color][color=#00f4ff]o[/color][color=#00f9ff]o[/color][color=#333333][/color]} [color=#ffff00]50%[/color] / [color=#00fcff]99%[/color]

{[color=#0000ff]o[/color][color=#0505ff]o[/color][color=#0a0aff]o[/color][color=#0f0fff]o[/color][color=#1414ff]o[/color][color=#1919ff]o[/color][color=#1e1eff]o[/color][color=#2323ff]o[/color][color=#2828ff]o[/color][color=#2d2dff]o[/color][color=#3333ff]o[/color][color=#3838ff]o[/color][color=#3d3dff]o[/color][color=#4242ff]o[/color][color=#4747ff]o[/color][color=#4c4cff]o[/color][color=#5151ff]o[/color][color=#5656ff]o[/color][color=#5b5bff]o[/color][color=#6060ff]o[/color][color=#6666ff]o[/color][color=#6b6bff]o[/color][color=#7070ff]o[/color][color=#7575ff]o[/color][color=#7a7aff]o[/color][color=#7f7fff]o[/color][color=#8484ff]o[/color][color=#8989ff]o[/color][color=#8e8eff]o[/color][color=#9393ff]o[/color][color=#9999ff]o[/color][color=#9e9eff]o[/color][color=#a3a3ff]o[/color][color=#a8a8ff]o[/color][color=#adadff]o[/color][color=#b2b2ff]o[/color][color=#b7b7ff]o[/color][color=#bcbcff]o[/color][color=#c1c1ff]o[/color][color=#c6c6ff]o[/color][color=#ccccff]o[/color][color=#d1d1ff]o[/color][color=#d6d6ff]o[/color][color=#dbdbff]o[/color][color=#e0e0ff]o[/color][color=#e5e5ff]o[/color][color=#eaeaff]o[/color][color=#efefff]o[/color][color=#f4f4ff]o[/color][color=#f9f9ff]o[/color][color=#333333][/color]} [color=#ffff00]0%[/color] / [color=#fcfcff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#3d3dff]o[/color][color=#4242ff]o[/color][color=#4747ff]o[/color][color=#4c4cff]o[/color][color=#5151ff]o[/color][color=#5656ff]o[/color][color=#5b5bff]o[/color][color=#6060ff]o[/color][color=#6666ff]o[/color][color=#6b6bff]o[/color][color=#7070ff]o[/color][color=#7575ff]o[/color][color=#7a7aff]o[/color][color=#7f7fff]o[/color][color=#8484ff]o[/color][color=#8989ff]o[/color][color=#8e8eff]o[/color][color=#9393ff]o[/color][color=#9999ff]o[/color][color=#9e9eff]o[/color][color=#a3a3ff]o[/color][color=#a8a8ff]o[/color][color=#adadff]o[/color][color=#b2b2ff]o[/color][color=#b7b7ff]o[/color][color=#bcbcff]o[/color][color=#c1c1ff]o[/color][color=#c6c6ff]o[/color][color=#ccccff]o[/color][color=#d1d1ff]o[/color][color=#d6d6ff]o[/color][color=#dbdbff]o[/color][color=#e0e0ff]o[/color][color=#e5e5ff]o[/color][color=#eaeaff]o[/color][color=#efefff]o[/color][color=#f4f4ff]o[/color][color=#f9f9ff]o[/color][color=#333333][/color]} [color=#c0c000]25%[/color] / [color=#fcfcff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#7f7fff]o[/color][color=#8484ff]o[/color][color=#8989ff]o[/color][color=#8e8eff]o[/color][color=#9393ff]o[/color][color=#9999ff]o[/color][color=#9e9eff]o[/color][color=#a3a3ff]o[/color][color=#a8a8ff]o[/color][color=#adadff]o[/color][color=#b2b2ff]o[/color][color=#b7b7ff]o[/color][color=#bcbcff]o[/color][color=#c1c1ff]o[/color][color=#c6c6ff]o[/color][color=#ccccff]o[/color][color=#d1d1ff]o[/color][color=#d6d6ff]o[/color][color=#dbdbff]o[/color][color=#e0e0ff]o[/color][color=#e5e5ff]o[/color][color=#eaeaff]o[/color][color=#efefff]o[/color][color=#f4f4ff]o[/color][color=#f9f9ff]o[/color][color=#333333][/color]} [color=#808000]50%[/color] / [color=#fcfcff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#c1c1ff]o[/color][color=#c6c6ff]o[/color][color=#ccccff]o[/color][color=#d1d1ff]o[/color][color=#d6d6ff]o[/color][color=#dbdbff]o[/color][color=#e0e0ff]o[/color][color=#e5e5ff]o[/color][color=#eaeaff]o[/color][color=#efefff]o[/color][color=#f4f4ff]o[/color][color=#f9f9ff]o[/color][color=#333333][/color]} [color=#404000]75%[/color] / [color=#fcfcff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#333333][/color]} [color=#020200]99%[/color] / [color=#fcfcff]99%[/color]

{[color=#ffff00]o[/color][color=#fafa00]o[/color][color=#f5f500]o[/color][color=#f0f000]o[/color][color=#ebeb00]o[/color][color=#e6e600]o[/color][color=#e1e100]o[/color][color=#dcdc00]o[/color][color=#d7d700]o[/color][color=#d2d200]o[/color][color=#cccc00]o[/color][color=#c7c700]o[/color][color=#c2c200]o[/color][color=#bdbd00]o[/color][color=#b8b800]o[/color][color=#b3b300]o[/color][color=#aeae00]o[/color][color=#a9a900]o[/color][color=#a3a300]o[/color][color=#9f9f00]o[/color][color=#999900]o[/color][color=#939300]o[/color][color=#8f8f00]o[/color][color=#8a8a00]o[/color][color=#848400]o[/color][color=#333333]_________________________[/color]} [color=#808000]50%[/color] / [color=#0000ff]0%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#c2c200]o[/color][color=#bdbd00]o[/color][color=#b8b800]o[/color][color=#b3b300]o[/color][color=#aeae00]o[/color][color=#a9a900]o[/color][color=#a3a300]o[/color][color=#9f9f00]o[/color][color=#999900]o[/color][color=#939300]o[/color][color=#8f8f00]o[/color][color=#8a8a00]o[/color][color=#848400]o[/color][color=#333333]_________________________[/color]} [color=#808000]50%[/color] / [color=#3f3fff]25%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#333333]_________________________[/color]} [color=#808000]50%[/color] / [color=#7f7fff]50%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#7f7fff]o[/color][color=#8484ff]o[/color][color=#8989ff]o[/color][color=#8e8eff]o[/color][color=#9393ff]o[/color][color=#9999ff]o[/color][color=#9e9eff]o[/color][color=#a3a3ff]o[/color][color=#a8a8ff]o[/color][color=#adadff]o[/color][color=#b2b2ff]o[/color][color=#b7b7ff]o[/color][color=#bcbcff]o[/color][color=#333333]____________[/color]} [color=#808000]50%[/color] / [color=#bfbfff]75%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#7f7fff]o[/color][color=#8484ff]o[/color][color=#8989ff]o[/color][color=#8e8eff]o[/color][color=#9393ff]o[/color][color=#9999ff]o[/color][color=#9e9eff]o[/color][color=#a3a3ff]o[/color][color=#a8a8ff]o[/color][color=#adadff]o[/color][color=#b2b2ff]o[/color][color=#b7b7ff]o[/color][color=#bcbcff]o[/color][color=#c1c1ff]o[/color][color=#c6c6ff]o[/color][color=#ccccff]o[/color][color=#d1d1ff]o[/color][color=#d6d6ff]o[/color][color=#dbdbff]o[/color][color=#e0e0ff]o[/color][color=#e5e5ff]o[/color][color=#eaeaff]o[/color][color=#efefff]o[/color][color=#f4f4ff]o[/color][color=#f9f9ff]o[/color][color=#333333][/color]} [color=#808000]50%[/color] / [color=#fcfcff]99%[/color]

{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#c2c2ff]o[/color][color=#bdbdff]o[/color][color=#b8b8ff]o[/color][color=#b3b3ff]o[/color][color=#aeaeff]o[/color][color=#a9a9ff]o[/color][color=#a3a3ff]o[/color][color=#9f9fff]o[/color][color=#9999ff]o[/color][color=#9393ff]o[/color][color=#8f8fff]o[/color][color=#8a8aff]o[/color][color=#8484ff]o[/color][color=#8080ff]o[/color][color=#7a7aff]o[/color][color=#7676ff]o[/color][color=#7171ff]o[/color][color=#6c6cff]o[/color][color=#6666ff]o[/color][color=#6161ff]o[/color][color=#5c5cff]o[/color][color=#5757ff]o[/color][color=#5151ff]o[/color][color=#4d4dff]o[/color][color=#4848ff]o[/color][color=#4242ff]o[/color][color=#3e3eff]o[/color][color=#3838ff]o[/color][color=#3232ff]o[/color][color=#2e2eff]o[/color][color=#2828ff]o[/color][color=#2424ff]o[/color][color=#1f1fff]o[/color][color=#1919ff]o[/color][color=#1515ff]o[/color][color=#1010ff]o[/color][color=#0a0aff]o[/color][color=#0606ff]o[/color][color=#333333][/color]} [color=#3f3f00]25%[/color] / [color=#0202ff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#8080ff]o[/color][color=#7a7aff]o[/color][color=#7676ff]o[/color][color=#7171ff]o[/color][color=#6c6cff]o[/color][color=#6666ff]o[/color][color=#6161ff]o[/color][color=#5c5cff]o[/color][color=#5757ff]o[/color][color=#5151ff]o[/color][color=#4d4dff]o[/color][color=#4848ff]o[/color][color=#4242ff]o[/color][color=#3e3eff]o[/color][color=#3838ff]o[/color][color=#3232ff]o[/color][color=#2e2eff]o[/color][color=#2828ff]o[/color][color=#2424ff]o[/color][color=#1f1fff]o[/color][color=#1919ff]o[/color][color=#1515ff]o[/color][color=#1010ff]o[/color][color=#0a0aff]o[/color][color=#0606ff]o[/color][color=#333333][/color]} [color=#7f7f00]50%[/color] / [color=#0202ff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#3e3eff]o[/color][color=#3838ff]o[/color][color=#3232ff]o[/color][color=#2e2eff]o[/color][color=#2828ff]o[/color][color=#2424ff]o[/color][color=#1f1fff]o[/color][color=#1919ff]o[/color][color=#1515ff]o[/color][color=#1010ff]o[/color][color=#0a0aff]o[/color][color=#0606ff]o[/color][color=#333333][/color]} [color=#bfbf00]75%[/color] / [color=#0202ff]99%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#333333][/color]} [color=#fcfc00]99%[/color] / [color=#0202ff]99%[/color]

{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#3d3d00]o[/color][color=#424200]o[/color][color=#474700]o[/color][color=#4c4c00]o[/color][color=#515100]o[/color][color=#565600]o[/color][color=#5b5b00]o[/color][color=#606000]o[/color][color=#666600]o[/color][color=#6b6b00]o[/color][color=#707000]o[/color][color=#757500]o[/color][color=#7a7a00]o[/color][color=#7f7f00]o[/color][color=#848400]o[/color][color=#898900]o[/color][color=#8e8e00]o[/color][color=#939300]o[/color][color=#999900]o[/color][color=#9e9e00]o[/color][color=#a3a300]o[/color][color=#a8a800]o[/color][color=#adad00]o[/color][color=#b2b200]o[/color][color=#b7b700]o[/color][color=#bcbc00]o[/color][color=#c1c100]o[/color][color=#c6c600]o[/color][color=#cccc00]o[/color][color=#d1d100]o[/color][color=#d6d600]o[/color][color=#dbdb00]o[/color][color=#e0e000]o[/color][color=#e5e500]o[/color][color=#eaea00]o[/color][color=#efef00]o[/color][color=#f4f400]o[/color][color=#f9f900]o[/color][color=#333333][/color]} [color=#fcfc00]99%[/color] / [color=#c0c0ff]25%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#7f7f00]o[/color][color=#848400]o[/color][color=#898900]o[/color][color=#8e8e00]o[/color][color=#939300]o[/color][color=#999900]o[/color][color=#9e9e00]o[/color][color=#a3a300]o[/color][color=#a8a800]o[/color][color=#adad00]o[/color][color=#b2b200]o[/color][color=#b7b700]o[/color][color=#bcbc00]o[/color][color=#c1c100]o[/color][color=#c6c600]o[/color][color=#cccc00]o[/color][color=#d1d100]o[/color][color=#d6d600]o[/color][color=#dbdb00]o[/color][color=#e0e000]o[/color][color=#e5e500]o[/color][color=#eaea00]o[/color][color=#efef00]o[/color][color=#f4f400]o[/color][color=#f9f900]o[/color][color=#333333][/color]} [color=#fcfc00]99%[/color] / [color=#8080ff]50%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#c1c100]o[/color][color=#c6c600]o[/color][color=#cccc00]o[/color][color=#d1d100]o[/color][color=#d6d600]o[/color][color=#dbdb00]o[/color][color=#e0e000]o[/color][color=#e5e500]o[/color][color=#eaea00]o[/color][color=#efef00]o[/color][color=#f4f400]o[/color][color=#f9f900]o[/color][color=#333333][/color]} [color=#fcfc00]99%[/color] / [color=#4040ff]75%[/color]
{[color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#808080]o[/color][color=#333333][/color]} [color=#fcfc00]99%[/color] / [color=#0202ff]99%[/color]
[/font]



ARGH. I know this is going to bug me for a while. Maybe it's just not doable. Blending the colors makes it hard to distinguish between the two progressbars. I'm blending the colors wherever the two progressbars overlap, but by blending them, it turns it into mud. Blah. Maybe I'm just picking the wrong colors. Maybe I'll make the colors blend more towards the shorter progressbar so that it's easier to see.
 
Last edited:
Well, it looks like this thread has tapered off a bit. I'll consider this project in maintenance mode, which means I won't be doing a whole lot to change it unless I learn of a bug or a cool feature to implement. Now that I know I won't need to change it, a rewrite of the first post doesn't sound bad. I feel like I could definitely use fewer words, which is a good thing when I've got several thousand already. ;)

I'll still be answering questions that come up and I'll definitely consider implementing any new features that would be useful to more than one person.
I'm still thinking about JerMe's suggestion. It'd definitely be a good learning experience. Who knows. ;)

Also, I think this thread is worth a stick, but I don't exactly have an objective view about it. I'd like to hear that one or two other people think it'd be worthwhile before I PM a mod about it.
 
Which suggestion is that? ;) I really don't know, I think I've said a thing or two in this thread, I forget which is which.

[x] Sticky [ ] No Sticky
 
I was thinking of your suggestion to make everything super-automated, ie you'd only need to use a perl script and it would get f@h setup (if needed) and running, and once it was going you'd only need to give your sig_gen the remote box's IP to get info for that box in your sig.
It's probably overkill. I mean that in a good way, of course.
 
Ahhh... I think this was it... back on page 6...

Me said:
Ok, it's nighttime now, Mr. Coding Christoph, where art thou? :)

I think GTFouts has a lot of good ideas for your new nifty spiffy jiffy code. Here's my wish.. I guess since you have time now, you can parse through EOC and Stanford pages for the different stats available. Seems like everyone has different tastes for what they'd like included in their sig, and it'd be cool for them to just add the $variable name at the bottom, once they know it.

Definitely something to check the sig length, both tall and wide.

Could you add something to snag unitinfo.txt on other computers in the LAN? Perhaps variables at the top for number of folding instances, code to retrieve unitinfo.txt on LANs, and if there are multiple CPUs in the LAN it'd add progress curves in the sig (e.g., 4 CPUs running 1 F@H instance each around the house, 4 locations, it'd add 4 progress curves automatically.. or something to that effect?) Some people might like that.

For the XML, I was using XML::Simple, so there's definitely more stuff that you can do with the XML functions, I just don't know it... I'm sure you'll take that to the nth level..

Please please please rewrite the EOC parsing code, if you'd like you can write mod-friendly regexes that make it easy for us to grab the stats we need off of the EOC summary page (like points 7 days and points last 24 hours). When I wrote it, a lot of people were having trouble with it.

I know I added (hacked up) stuff to your code, so if you'd like to use any of it, use the idea of it, etc. feel free. If I can help in any way at all, just say the word. We're waiting for your next code! :)0

Remote monitoring, like JigPu did... I think that's where the automation idea came up. I was talking about LANs, JigPu and you were researching sockets. LANs are easy enough with a network path, it's connecting to a remote comp that's the trouble?

Edit: Yes, this is all overkill. =) If you figure it out, then you can monitor a bunch of borgs everywhere, not necessarily in your sig. =)
 
JerMe said:
I see. F@H monitors use the logfiles generated by F@H, the same way we're using unitinfo.txt? Why is it that I can see you creating an executable that combines everything that you'd ever need for FAH.. stats, monitoring, and all? :)0

Actually I wanted to do something like this, but Christoph's script is so good that I don't see a reason to make some alternative.
My FAH Manager (start / stop proggie) does some monitoring - in next version I could extend it to display some more stats. Question is - what to display and how. Network monitorin,g over internet - doable, but I'd need exactly what you want. It would also require client-server architecture I think.
 
Back