Hello,
I'm a bit desperate while trying to change the 'SIZE' resource
from a MacPerl script.
The problem is more MacOS specific I assume than MacPerlish.
I can sucessfully get the resource values and manipulate them
but in the end the Finder Info does sometimes and sometimes
doesn't reflect those changes, really frustrating ...
In InsideMac I could only find a reference of how to set
SIZE (-1) but not really how ID 0, 1 are to be set.
Thanks for your time
The script follows
Axel
#!perl -w
use vars qw( $DEBUG );
use strict;
$DEBUG = 1;
my( $recommended, $minsize, $maxsize ) = ( 4*1024*1024, 4.5*1024*1024, 6.5*1024*1024 );
print <<eom;
setting Mac mem info to:
recommended = $recommended bytes
minsize = $minsize bytes
maxsize = $maxsize bytes
eom
use Mac::Resources;
use Mac::Memory;
if( $DEBUG ) {
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent= 1;
}
my $pwd;
chomp( $pwd = `pwd` );
my $resfile = "$pwd:DiskCopy";
print "working on: $resfile\n";
## bestätigter Bug: OpenResFile arbeitet nicht im Arbeitsverzeichnis
my $RFD = OpenResFile( $resfile )
or die "can't open res file '$resfile'\n$!\n$^E\n";
my $size_id;
foreach $size_id ( -1 .. 1 )
{
print "\ngetting 'SIZE' resource $size_id\n";
my $sres = GetResource( "SIZE", $size_id )
or die " GetResource( 'SIZE', $size_id ) failed.\n$!\n$^E\n";
my $mem = $sres->get;
my $len = length( $mem );
if( !$len ) { die "got zero length resource info!\n" }
# print "length = $len\n" if $DEBUG;
=for test
my $bits = unpack( "b*", $mem);
print Dumper $bits;
=cut
my @nums = unpack( "sll", $mem);
for( $nums[1], $nums[2] ) { print "$_\n" }
###
#next;
###
my $new_res;
if( $size_id == -1 ) { $new_res = pack( "sll", $nums[0], $recommended,
$minsize ) }
if( $size_id == 0 ) { $new_res = pack( "sll", $nums[0], $maxsize, $minsize ) }
if( $size_id == 1 ) { $new_res = pack( "sll", $nums[0], $maxsize, $minsize ) }
$sres->set( 0, $len, $new_res );
ChangedResource( $sres ) or die "ChangedResource() failed\n$!\n$^E\n";
WriteResource( $sres ) or die "WriteResource() failed\n$!\n$^E\n";
}
CloseResFile( $RFD );
$RFD = OpenResFile( $resfile )
or die "can't open res file '$resfile'\n$!\n$^E\n";
print "\n\ncheck:\n";
foreach $size_id ( -1 .. 1 )
{
print "\ngetting 'SIZE' resource $size_id\n";
my $sres = GetResource( "SIZE", $size_id )
or die " GetResource( 'SIZE', $size_id ) failed.\n$!\n$^E\n";
my $mem = $sres->get;
my $len = length( $mem );
if( !$len ) { die "got zero length resource info!\n" }
my @nums = unpack( "sll", $mem);
for( $nums[1], $nums[2] ) { print "$_\n" }
}
CloseResFile( $RFD );
print "done.\n";
__END__