sub listToFile {
    local($file, @list) = @_;

    unlink($file);
    open(F, ">$file");
    print F join("\n", @list);
    close(F);
}

sub dumpToDisk {
    local(@list) = @_;

    if($#list > 500){
	$half = int($#list/2);
	@lista = @list[0..$half];
	@listb = @list[$half+1..$#list];
	&listToFile($lista[0], @lista);
	&listToFile($listb[0], @listb);
	push(@files, $listb[0]);
	@files = sort @files;
    }
    else{
	&listToFile($list[0], @list);
    }

}

sub listFromFile {
    local($file) = @_;
    local(@list);

    open(F, $file);
    @list = (<F>);
    foreach (@list) { s/\n//g; }
    close(F);
    return @list;
}

sub uniqList {
    local(@list) = @_;
    local(%uniq);
    local($l);

    for $l (@list){
	next if $l eq "";
	$uniq{$l}=1;
    }
    return keys %uniq;
}

sub reverseSite {
    local($site) = @_;
    local($host, $port, $revhost, $revsite, @parts);

    ($host, $port) = split(":", $site);
    $port = 80 unless $port;
    (@parts) = split(/\./, $host);
    $revhost = join(".", reverse(@parts));
    $revsite = $revhost.":$port";
    return $revsite;
}

sub initFiles {
    local($dir) = @_;

    opendir(D, $dir);
    (@files) = readdir(D);
    closedir(D);
    foreach $f (@files) {
	push(@ret, $f) unless (($f eq ".") || ($f eq ".."));
    }

    @files = sort @ret;
}

sub addSite {
    local($site) = @_;

    $fct = 0;
    $fp = "";
    foreach $f (@files) {
	$rsite = &reverseSite($site);
#	print("Comparing $rsite to $f\n");
	if($rsite lt $f) {
	    if($fp eq ""){
		rename($files[$fct], $rsite);
		$files[$fct] = $rsite;
		&insertSite($rsite, $rsite);
		return;
	    }
	    else{
		&insertSite($rsite, $fp);
		return;
	    }
	}
	$fct++;
	$fp = $f;
    }
    &insertSite($rsite, $fp);
}

sub insertSite {
    local($rsite, $file) = @_;
    print("Inserting $rsite into file $file\n");
    if(`grep -x $rsite $file`){
	print("   (already there)\n");
	return;
    }
    @old = &listFromFile($file);
    if(grep(/^uk\.$/, @old)) {
	print("Whoop2!\n");
    }
    push(@old, $rsite);
    &dumpToDisk(sort &uniqList(@old));
}
1;
