+ my $out_file = write_card_dump $tag => $card;
+
+ if ( $opt->write ) {
+ read_file $opt->write;
+ foreach my $block ( 0 .. $tag->blocks ) {
+ my $offset = 0x10 * $block;
+ my $data = substr($card,$offset,0x10);
+ print STDERR "writing $uid block $block";
+ $tag->write_block( $block, $data );
+ if ( $opt->verify ) {
+ print STDERR " verify ";
+ my $verify = $tag->read_block( $block );
+ print STDERR $verify eq $data ? "OK" : "ERROR";
+ }
+ print STDERR "\n";
+ }
+ print STDERR "done\n";
+ unlink $card_key_file;
+ $out_file = write_card_dump $tag => $card;
+ } else {
+ # view dump
+ my $txt_file = $out_file;
+ $txt_file =~ s/\.mfd/.txt/ || die "can't change extension of $out_file to txt";
+ system "./mifare-mad.pl $out_file > $txt_file";
+ $ENV{MAD} && system "vi $txt_file";
+ }
+}
+
+sub write_card_dump {
+ my ( $tag, $card ) = @_;
+