File Coverage

blib/lib/Palm/MaTirelire/SavedPreferences.pm
Criterion Covered Total %
statement 13 57 22.8
branch 0 16 0.0
condition n/a
subroutine 5 7 71.4
pod 2 2 100.0
total 20 82 24.3


line stmt bran cond sub pod time code
1             #
2             # Author : Maxime Soulé
3             # Created On : Mon Sep 6 00:44:31 2004
4             # Last Modified By: Maxime Soule
5             # Last Modified On: Mon May 3 14:54:33 2010
6             # Update Count : 2
7             #
8             # Copyright (C) 2005, Maxime Soulé
9             # You may distribute this file under the terms of the Artistic
10             # License, as specified in the README file.
11             #
12              
13             package Palm::MaTirelire::SavedPreferences;
14              
15 1     1   1198 use strict;
  1         1  
  1         36  
16              
17 1     1   5 use Palm::BlockPack;
  1         3  
  1         20  
18              
19 1     1   6 use Palm::MaTirelire;
  1         2  
  1         6  
20              
21 1     1   36 use base qw(Palm::MaTirelire);
  1         2  
  1         856  
22              
23             our $VERSION = '1.0';
24              
25              
26             my $ACCOUNTV1_BLOCK = Palm::BlockPack->new
27             (n => 'version',
28             C => 'cur_category',
29             UInt8 => [
30             'country_conv:4',
31             'reserved1:*',
32             ],
33             UInt16 => [
34             'warning:1',
35             'check_locked:1',
36             'repeat_startup:1',
37             'sum_type:3',
38             'replace_desc:1',
39             'repeat_days:6',
40             'show_all_cat:1',
41             'updown_action:2'
42             ],
43             UInt32 => [
44             'sum_date:5',
45             'sum_todayplus:5',
46             'time_select3:1',
47             'remove_type:1',
48             'db_must_be_corrected:1',
49             'left_handed:1',
50             'timeout:3',
51             'reserved2:*'
52             ],
53             N => 'access_code',
54             skip => 12,
55             );
56              
57             my $ACCOUNTV2_BLOCK = Palm::BlockPack->new
58             (
59             n => 'version',
60             UInt32 => [
61             'no_beta_alert:1',
62             'db_must_be_corrected:1',
63             'replace_desc:1',
64             'updown_action:2',
65             'time_select3:1',
66             'left_handed:1',
67             'timeout:3',
68             'remove_type:1',
69             'XXX:2',
70             'firstnext_action:2',
71             'first_form:3',
72             'select_focused_num_flds:1',
73             'reserved:*'
74             ],
75             N => 'access_code',
76             'Z32' => 'last_db',
77             'N' => 'list_font',
78             'N' => 'list_bold_font',
79             '[C8]' => 'colors',
80             'n' => 'list_flags',
81             );
82              
83              
84             sub import
85             {
86 1     1   10 &Palm::PDB::RegisterPRCHandlers(__PACKAGE__, [ "psys", 'sprf' ]);
87             }
88              
89              
90             sub ParseResource
91             {
92 0     0 1   my $self = shift;
93 0           my %record = @_;
94              
95 0           my $data = delete $record{data};
96              
97 0 0         if ($record{type} eq 'MaTi')
    0          
98             {
99 0           $record{data} = {};
100              
101 0           $ACCOUNTV1_BLOCK->unpack_block(\$data, $record{data}, 1);
102              
103 0           my @lists = qw(modes types descriptions);
104 0           @{$record{data}}{@lists} = ([], [], []);
  0            
105              
106 0           while ($data ne '')
107             {
108 0           my $elt = unpack('Z*', $data);
109              
110 0           substr($data, 0, length($elt) + 1) = '';
111              
112 0 0         if ($elt eq '')
113             {
114 0           shift @lists;
115              
116 0 0         if (@lists == 0)
117             {
118             # Too many bytes
119 0           last;
120             }
121             }
122             else
123             {
124 0           push(@{$record{data}{$lists[0]}}, $elt);
  0            
125             }
126             }
127             }
128             elsif ($record{type} eq 'MaT2')
129             {
130 0           $record{data} = {};
131              
132 0           $ACCOUNTV2_BLOCK->unpack_block(\$data, $record{data});
133             }
134             else
135             {
136 0           $record{data} = $data;
137             }
138              
139 0           return \%record;
140             }
141              
142              
143             sub PackResource
144             {
145 0     0 1   my $self = shift;
146 0           my $record = shift;
147 0           my $pack;
148              
149 0 0         if ($record->{type} eq 'MaTi')
    0          
150             {
151 0           my $ref_data = $record->{data};
152              
153 0 0         if (ref $ref_data)
154             {
155 0           $pack = $ACCOUNTV1_BLOCK->pack_block($ref_data);
156              
157 0           $pack .= join("\0",
158 0           join('', map { "$_\0" } @{$ref_data->{modes}}),
  0            
159 0           join('', map { "$_\0" } @{$ref_data->{types}}),
  0            
160 0           join('', map { "$_\0" } @{$ref_data->{descriptions}})
  0            
161             );
162              
163 0           $pack .= "\0"; # Compatibility
164             }
165             else
166             {
167 0           $pack = $ref_data;
168             }
169             }
170             elsif ($record->{type} eq 'MaT2')
171             {
172 0           my $ref_data = $record->{data};
173              
174 0 0         if (ref $ref_data)
175             {
176 0           $pack = $ACCOUNTV2_BLOCK->pack_block($ref_data);
177             }
178             else
179             {
180 0           $pack = $ref_data;
181             }
182             }
183             else
184             {
185 0           $pack = $record->{data};
186             }
187              
188 0           return $pack;
189             }
190              
191             1;
192             __END__