my $CARD;
my $home = $ENV{'HOME'} || $ENV{'LOGDIR'} || (getpwuid($<))[7] || die "You're homeless!\n";
open CARD, "< $home/.gnome/GnomeCard.gcrd" or die "Sorry, could not open default card file: $!";

while (<CARD>) {
    read_card($CARD) if (/^BEGIN:VCARD/);
}

1;

sub read_card {
    my $CARD = shift;
    my ($name, $pobox, $extended, $street, $city, $region, $postalcode, $country);
    while (<CARD>) {
	if (/^END:VCARD/) {
	    chomp($name);
	    chomp($country);
	    my $frame = abi::XAP_Frame::getLastFocussed;
	    my $view = $frame->getCurrentView;
	    $view->write "$pobox\n" unless ($pobox eq "");
	    $view->write "$name\n";
	    $view->write "$street\n";
	    $view->write "$postalcode $city ($region)\n";
	    $view->write "$country\n";
	    return 0;
	}
	else {
	    my ($type, $data) = split /:/;
	    $name = $data if ($type eq "FN");
	    if ($type =~ /^ADR/) {
		($pobox, $extended, $street, $city, $region, $postalcode, $country) = split(/;/, $data);
	    }
	}
    }
}