# Palm::Memo32.pm # # Perl class for dealing with PaulComputing pEdit Memo32 databases. # Copyright (C) 2002, 2003, Wayne A. Arthurton # # Large portions are from Palm::Memo by Andrew Arensburger Earensb@ooblick.comE # Copyright (C) 1999, 2000, Andrew Arensburger. # You may distribute this file under the terms of the Artistic # License, as specified in the README file. # # $Id: Memo32.pm,v 1.00 2003/5/01 15:00:00 warthurt Exp $ use strict; package Palm::Memo32; use Palm::Raw(); use Palm::StdAppInfo(); use vars qw( $VERSION @ISA ); # One liner, to allow MakeMaker to work. $VERSION = do { my @r = (q$Revision: 1.00 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; @ISA = qw( Palm::StdAppInfo Palm::Raw ); =head1 NAME Palm::Memo32 - Handler for PaulComputing pEdit Memo32 databases. =head1 SYNOPSIS use Palm::Memo32; =head1 DESCRIPTION The Memo32 PDB handler is a helper class for the Palm::PDB package. It parses PaulComputing (http://www.paulcomputing.com/) pEdit Memo32 databases. =head2 AppInfo block The AppInfo block begins with standard category support. See L for details. Other fields include: $pdb->{appinfo}{sortOrder} I don't know what this is. =head2 Sort block $pdb->{sort} This is a scalar, the raw data of the sort block. =head2 Records $record = $pdb->{records}[N] $record->{data} A string, the text of the memo. =cut #' sub import { &Palm::PDB::RegisterPDBHandlers(__PACKAGE__, [ "pn32", "DATA" ], ); } =head2 new $pdb = new Palm::Memo32; Create a new PDB, initialized with the various Palm::Memo32 fields and an empty record list. Use this method if you're creating a Memo32 PDB from scratch. =cut #' sub new { my $classname = shift; my $self = $classname->SUPER::new(@_); # Create a generic PDB. No need to rebless it, # though. $self->{name} = "Memo32DB"; # Default $self->{creator} = "pn32"; $self->{type} = "DATA"; $self->{attributes}{resource} = 0; # The PDB is not a resource database by # default, but it's worth emphasizing, # since Memo32DB is explicitly not a PRC. # Initialize the AppInfo block $self->{appinfo} = { sortOrder => undef, # XXX - ? }; # Add the standard AppInfo block stuff &Palm::StdAppInfo::seed_StdAppInfo($self->{appinfo}); # Give the PDB a blank sort block $self->{sort} = undef; # Give the PDB an empty list of records $self->{records} = []; return $self; } =head2 new_Record $record = $pdb->new_Record; Creates a new Memo32 record, with blank values for all of the fields. C does B add the new record to C<$pdb>. For that, you want C<$pdb-Eappend_Record>. =cut sub new_Record { my $classname = shift; my $retval = $classname->SUPER::new_Record(@_); $retval->{data} = ""; return $retval; } # ParseAppInfoBlock # Parse the AppInfo block for Memo databases. sub ParseAppInfoBlock { my $self = shift; my $data = shift; my $sortOrder; my $i; my $appinfo = {}; my $std_len; # Get the standard parts of the AppInfo block $std_len = &Palm::StdAppInfo::parse_StdAppInfo($appinfo, $data); $data = $appinfo->{other}; # Look at the non-category part # Get the rest of the AppInfo block my $unpackstr = # Argument to unpack() "x4" . # Padding "C"; # Sort order ($sortOrder) = unpack $unpackstr, $data; $appinfo->{sortOrder} = $sortOrder; return $appinfo; } sub PackAppInfoBlock { my $self = shift; my $retval; my $i; # Pack the non-category part of the AppInfo block $self->{appinfo}{other} = pack("x4 C x1", $self->{appinfo}{sortOrder}); # Pack the AppInfo block $retval = &Palm::StdAppInfo::pack_StdAppInfo($self->{appinfo}); return $retval; } sub PackSortBlock { # XXX return undef; } sub ParseRecord { my $self = shift; my %record = @_; delete $record{offset}; # This is useless $record{data} =~ s/\0$//; # Trim trailing NUL return \%record; } sub PackRecord { my $self = shift; my $record = shift; return $record->{data} . "\0"; # Add the trailing NUL } 1; __END__ =head1 AUTHOR Wayne A. Arthurton Ewayner@arthurton.comE =head1 SEE ALSO Palm::PDB(3) Palm::Memo(3) Palm::StdAppInfo(3) =cut