Deliantra-Client
view release on metacpan or search on metacpan
my $theme = load_json find_rcfile "theme.json"
or die "FATAL: theme resource file not found";
@RC_PATH = @{ $theme->{path} } if $theme->{path};
for (@RC_PATH, "") {
my $theme = load_json "$RC_BASE/$_/theme.json"
or next;
%THEME = ( %$theme, %THEME );
}
}
sub read_cfg {
my ($file) = @_;
$::CFG = (load_json $file) || (load_json "$file.bak");
}
sub write_cfg {
my $file = "$Deliantra::VARDIR/client.cf";
$::CFG->{VERSION} = $::VERSION;
$::CFG->{layout} = DC::UI::get_layout ();
open my $fh, ">:utf8", "$file~"
or return;
print $fh JSON::XS->new->utf8->pretty->encode ($::CFG);
close $fh;
rename $file, "$file.bak";
rename "$file~", $file;
}
sub http_proxy {
my @proxy = win32_proxy_info;
if (@proxy) {
"http://" . (@proxy < 2 ? "" : @proxy < 3 ? "$proxy[1]\@" : "$proxy[1]:$proxy[2]\@") . $proxy[0]
} elsif (exists $ENV{http_proxy}) {
$ENV{http_proxy}
} else {
()
}
}
sub set_proxy {
my $proxy = http_proxy
or return;
$ENV{http_proxy} = $proxy;
}
sub lwp_useragent {
require LWP::UserAgent;
DC::set_proxy;
my $ua = LWP::UserAgent->new (
agent => "deliantra $VERSION",
keep_alive => 1,
env_proxy => 1,
timeout => 30,
);
}
sub lwp_check($) {
my ($res) = @_;
$res->is_error
and die $res->status_line;
$res
}
sub fh_nonblocking($$) {
my ($fh, $nb) = @_;
if ($^O eq "MSWin32") {
$nb = (! ! $nb) + 0;
ioctl $fh, 0x8004667e, \$nb; # FIONBIO
} else {
fcntl $fh, &Fcntl::F_SETFL, $nb ? &Fcntl::O_NONBLOCK : 0;
}
}
package DC::Layout;
$DC::OpenGL::INIT_HOOK{"DC::Layout"} = sub {
glyph_cache_restore;
};
$DC::OpenGL::SHUTDOWN_HOOK{"DC::Layout"} = sub {
glyph_cache_backup;
};
1;
=back
=head1 AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
=cut
( run in 2.639 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )