Prima
view release on metacpan or search on metacpan
Prima/Utils.pm view on Meta::CPAN
#
# Created by:
# Vadim Belman <voland@plab.ku.dk>
# Anton Berezin <tobez@plab.ku.dk>
#
package Prima::Utils;
use strict;
use warnings;
require Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK);
@ISA = qw(Exporter);
@EXPORT = ();
@EXPORT_OK = qw(
query_drives_map query_drive_type
get_os get_gui
beep sound
username
xcolor
find_image path
alarm post last_error
chdir chmod closedir getcwd link mkdir open_file open_dir
read_dir rename rmdir unlink utime
seekdir telldir rewinddir
getenv setenv stat access getdir sv2local local2sv
nearest_d nearest_i
);
sub xcolor {
# input: '#rgb' or '#rrggbb' or '#rrrgggbbb'
# output: internal color used by Prima
my ($r,$g,$b,$d);
$_ = $_[0];
$d=1/16, ($r,$g,$b) = /^#([\da-fA-F]{3})([\da-fA-F]{3})([\da-fA-F]{3})/
or
$d=1, ($r,$g,$b) = /^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/
or
$d=16, ($r,$g,$b) = /^#([\da-fA-F])([\da-fA-F])([\da-fA-F])/
or return 0;
($r,$g,$b) = (hex($r)*$d,hex($g)*$d,hex($b)*$d);
return ($r<<16)|($g<<8)|($b);
}
sub find_image
{
my $mod = @_ > 1 ? shift : 'Prima';
my $name = shift;
$name =~ s!::!/!g;
$mod =~ s!::!/!g;
for (@INC) {
return "$_/$mod/$name" if -f "$_/$mod/$name" && -r _;
}
return undef;
}
# returns a preferred path for the toolkit configuration files,
# or, if a filename given, returns the name appended to the path
# and proofs that the path exists
sub path
{
my $path;
if ( exists $ENV{HOME}) {
$path = "$ENV{HOME}/.prima";
} elsif ( $^O =~ /win/i && exists $ENV{USERPROFILE}) {
$path = "$ENV{USERPROFILE}/.prima";
} elsif ( $^O =~ /win/i && exists $ENV{WINDIR}) {
$path = "$ENV{WINDIR}/.prima";
} else {
$path = "/.prima";
}
if ( $_[0]) {
unless ( -d $path) {
eval "use File::Path"; die "$@\n" if $@;
File::Path::mkpath( $path);
}
$path .= "/$_[0]";
}
return $path;
}
sub alarm
{
Prima/Utils.pm view on Meta::CPAN
Same as C<Cwd::getcwd>
=item getdir PATH
Reads content of PATH directory and
returns array of string pairs, where the first item is a file
name, and the second is a file type.
The file type is a string, one of the following:
"fifo" - named pipe
"chr" - character special file
"dir" - directory
"blk" - block special file
"reg" - regular file
"lnk" - symbolic link
"sock" - socket
"wht" - whiteout
This function was implemented for faster directory reading,
to avoid successive call of C<stat> for every file.
Also, getdir is consistently inclined to treat filenames in utf8,
disregarding both perl unicode settings and the locale.
=item getenv NAME
Reads directly from environment, possibly bypassing C< %ENV >, and disregarding
thread local environment on Win32.
=item link OLDNAME, NEWNAME
Same as C<CORE::link>.
=item local2sv TEXT
Converts 8-bit text into either 8-bit non-utf8-bit or unicode utf8-bit string.
May return undef on memory allocation failure.
=item mkdir DIR, [ MODE = 0666 ]
Same as C<CORE::mkdir>.
=item open_file PATH, FLAGS
Same as C<POSIX::open>
=item open_dir PATH
Returns directory handle to be used on C<readdir>, C<closedir>, C<rewinddir>, C<telldir>, C<seekdir>.
=item rename OLDNAME, NEWNAME
Same as C<CORE::rename>
=item rmdir PATH
Same as C<CORE::rmdir>
=item setenv NAME, VAL
Directly sets environment variable, possibly bypassing C< %ENV >, depending on
how perl is built. Also disregards thread local environment on Win32.
Note that effective synchronization between this call and C< %ENV > is not
always possible, since Win32 perl implementation simply does not allow that.
One is advised to assign to C< %ENV > manually, but only if both NAME and VAL
don't have their utf8 bit set, otherwise perl will warn about wide characters.
=item stat PATH
Same as C<CORE::stat>, except where there is sub-second time resolution provided,
returns atime/mtime/ctime entries as floats, same as C<Time::HiRes::stat>.
=item sv2local TEXT, FAIL_IF_CANNOT = 1
Converts either 8-bit non-utf8-bit or unicode utf8-bit string into a local encoding.
May return undef on memory allocation failure, or if TEXT contains unconvertible
characters when FAIL_IF_CANNOT = 1
=item unlink PATH
Same as C<CORE::unlink>.
=item utime ATIME, MTIME, PATH
Same as C<CORE::utime>, except where there is sub-second time resolution provided,
accepts atime/mtime/ctime entries as floats, same as C<Time::HiRes::utime>.
=back
=head1 AUTHOR
Dmitry Karasik, E<lt>dmitry@karasik.eu.orgE<gt>.
=head1 SEE ALSO
L<Prima>, L<Prima::sys::FS>.
( run in 1.634 second using v1.01-cache-2.11-cpan-39bf76dae61 )