On Mon, 19 Mar 2001 15:29:14 -0500, Ronald J Kimball wrote:
>I think adding a line to your code should fix this bug:
>
>#!perl
>use Mac::LowMem;
>
>$lmh = LMGetScrapHandle;
>$str = $lmh->get;
>
># diagnostics...
> #print "$str\n\n";
> #@l = split(//, $str);
> #foreach (@l) {print ord($_), '|'}; print "\n\n";
>
>while(length $str) {
> $key = substr($str, 0, 4);
> print $key, "/";
> $num = substr($str, 4, 4);
> $len = unpack("L", $num);
> print "$len\n";
> print substr($str, 8, $len), "\n";
>
> $len % 2 and $len++;
> # skip the extra padding byte when $len is odd
>
> $str = substr($str, 8+$len);
> #print $str, "\n";
>}
Damn, you guys beat me to it. Ok, here's how I would have done it. Note
that the functionality is the same.
#!perl
use Data::Dumper; $Data::Dumper::Useqq = 1; # diagnostics
use Mac::LowMem;
{
my $lmh = LMGetScrapHandle;
$_ = $lmh->get;
} # does this release the clipboard? I hope so...
print Dumper $_;
while(length) {
my($key, $len) = unpack 'a4N', $_; # Mac is Big Endian
(my $data, $_) = unpack "x8a${len}x@{[$len & 1]}a*", $_;
print Dumper $key, $len, $data;
}
A hash, anyone?
#!perl
use Data::Dumper; $Data::Dumper::Useqq = 1; # diagnostics
print Dumper scalar get_clipboard();
sub get_clipboard {
use Mac::LowMem;
local $_ = do {
my $lmh = LMGetScrapHandle;
$lmh->get;
};
my %data;
while(length) {
my($key, $len) = unpack 'a4N', $_;
($data{$key}, $_) = unpack "x8a${len}x@{[$len & 1]}a*", $_;
}
return wantarray?%data:\%data;
}
--
Bart.