Commits

Anonymous committed 6ce48b9

Finished.

Comments (0)

Files changed (1)

File-Format-CRD/lib/File/Format/CRD/Reader.pm

 
 use Carp;
 
+use Encode;
+
 =head1 NAME
 
 File::Format::CRD::Reader - read Windows .CRD files.
     return unpack("v", $buffer);
 }
 
+sub _read_long
+{
+    my $self = shift;
+
+    my $buffer = "";
+
+    if (read($self->{_fh}, $buffer, 4) != 4)
+    {
+        Carp::confess("Could not read a long.");
+    }
+
+    return unpack("V", $buffer);
+}
+
 sub _init
 {
     my ($self, $args) = @_;
 sub get_next_card
 {
     my $self = shift;
+    my $args = shift;
+
+    my $encoding = $args->{'encoding'};
 
     my $card_idx = $self->{_card_idx};
 
         return;
     }
 
+    my $loc = 11 + $card_idx * 52;
+
+    my $textloc = $self->_read_long($loc);
+
+    if (! ($textloc >= 57))
+    {
+        Carp::confess("textloc is too small");
+    }
+
+    my $transform = sub {
+        my $text = shift;
+
+        if (defined($encoding))
+        {
+            return decode($encoding, $title);
+        }
+        else
+        {
+            return $text;
+        }
+    };
+
+    my $title = $self->_read_from($loc+5, 52-5);
+
+    my $ret = { 'title' => $transform->($title) };
+
+    my $textlen = $self->_read_short($textloc+2);
+
+    my $text = $self->_read_from($textloc+4, $textlen);
+
+    $ret->{'body'} = $transform->($text);
     $self->{_card_idx}++;
 
-    
+    return $ret;
 }
 
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.