git @ Cat's Eye Technologies Corona-Realm-of-Magic / master src / Saveable.pm
master

Tree @master (Download .tar.gz)

Saveable.pm @masterraw · history · blame

package Saveable;

# Copyright (c)2000-2013, Chris Pressey, Cat's Eye Technologies.
# All rights reserved.
# Distributed under a BSD-style license; see the file LICENSE for more info.

$::saved_objects = 0;
# This is the default save method, overrided on some classes
sub save
{
  my $self = shift;
  my $fh = shift;
  my $indent = shift || 0;
  my $k;
  if (not defined $self)
  {
    print $fh "undef";
  }
  elsif (not $self)
  {
    if ($self =~ /^\d+/)
    {
      print $fh $self;
    } else
    {
      print $fh "''";
    }
  }
  elsif (not ref($self))
  {
    print $fh "q`$self`";
  }
  elsif (ref($self) eq 'Adj')
  {
    my $n = $self->{name};
    $n =~ s/\-/_/g;
    print $fh "\$Adj::$n";
  }
  elsif ($self =~ /SCALAR/)
  {
    print $fh "q`$$self`";
  }
  elsif ($self =~ /HASH/)
  {
    my $b = " "; $b = "bless(" if ref($self) ne 'HASH';
    print $fh "${b}\{\n";
    foreach $k (sort keys %{$self})
    {
      next if defined($k) and
              $k =~ /^_/ or $k eq 'location' or $k eq 'target' or
              $k eq 'party' or $k eq 'caster' or $k eq 'owner';
# print ' ' x ($indent+2), "$k\n" if $k;
      print $fh ' ' x ($indent+2), "'$k' => ";
      save($self->{$k}, $fh, $indent + 2);
    }
    print $fh ' ' x $indent, "}";
    print $fh (",'", ref($self), "')") if ref($self) ne 'HASH';
  }
  elsif ($self =~ /ARRAY/)
  {
    my $b = " "; $b = "bless(" if ref($self) ne 'ARRAY';
    print $fh "${b}\[\n";
    my $i;
    for($i=0;$i<=$#{$self};$i++)
    {
      print $fh ' ' x ($indent + 2);
      save($self->[$i], $fh, $indent + 2)
        unless defined($self->[$i]) and $self->[$i] eq $::leader;
    }
    print $fh ' ' x $indent, "]";
    print $fh (",'", ref($self), "')") if ref($self) ne 'ARRAY';
  } else
  {
    die "What the hell is a '$self' ???";
  }
  $::saved_objects++;
  print $fh ",\n";
}

1;