ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-UUlib/UUlib.pm
(Generate patch)

Comparing Convert-UUlib/UUlib.pm (file contents):
Revision 1.47 by root, Fri Feb 28 16:57:25 2020 UTC vs.
Revision 1.53 by root, Sat Dec 12 02:03:14 2020 UTC

1package Convert::UUlib; 1package Convert::UUlib;
2 2
3no warnings; 3use common::sense;
4use strict;
5 4
6use Carp; 5use Carp;
7 6
8require Exporter; 7require Exporter;
9require DynaLoader; 8require DynaLoader;
10 9
11our $VERSION = 1.62; 10our $VERSION = 1.71;
12 11
13our @ISA = qw(Exporter DynaLoader); 12our @ISA = qw(Exporter DynaLoader);
14 13
15our @_consts = qw( 14our @_consts = qw(
16 ACT_COPYING ACT_DECODING ACT_ENCODING ACT_IDLE ACT_SCANNING 15 ACT_COPYING ACT_DECODING ACT_ENCODING ACT_IDLE ACT_SCANNING
48our @EXPORT_OK = @_funcs; 47our @EXPORT_OK = @_funcs;
49our %EXPORT_TAGS = (all => [@_consts,@_funcs], constants => \@_consts); 48our %EXPORT_TAGS = (all => [@_consts,@_funcs], constants => \@_consts);
50 49
51bootstrap Convert::UUlib $VERSION; 50bootstrap Convert::UUlib $VERSION;
52 51
53Initialize(); 52# dummy function for compatiiblity with pre-1.7 versions
54 53sub Initialize { }
55# not when < 5.005_6x
56# END { CleanUp() }
57
58for (@_consts) {
59 my $constant = constant($_);
60 no strict 'refs';
61 *$_ = sub () { $constant };
62}
63 54
64# action code -> string mapping 55# action code -> string mapping
65sub straction($) { 56sub straction($) {
66 return 'copying' if $_[0] == &ACT_COPYING; 57 return 'copying' if $_[0] == &ACT_COPYING;
67 return 'decoding' if $_[0] == &ACT_DECODING; 58 return 'decoding' if $_[0] == &ACT_DECODING;
105 use Convert::UUlib ':all'; 96 use Convert::UUlib ':all';
106 97
107 # read all the files named on the commandline and decode them 98 # read all the files named on the commandline and decode them
108 # into the CURRENT directory. See below for a longer example. 99 # into the CURRENT directory. See below for a longer example.
109 LoadFile $_ for @ARGV; 100 LoadFile $_ for @ARGV;
101
110 for my $uu (GetFileList) { 102 for my $uu (GetFileList) {
111 if ($uu->state & FILE_OK) { 103 if ($uu->state & FILE_OK) {
112 $uu->decode; 104 $uu->decode;
113 print $uu->filename, "\n"; 105 print $uu->filename, "\n";
114 } 106 }
216On my machine, a fairly complete decode with DBI backend needs about 10MB 208On my machine, a fairly complete decode with DBI backend needs about 10MB
217RSS to decode 20000 files. 209RSS to decode 20000 files.
218 210
219=over 211=over
220 212
221=item Initialize
222
223Not normally necessary, (re-)initializes the library.
224
225=item CleanUp 213=item CleanUp
226 214
227Not normally necessary, could be called at the end to release memory 215Release memory, file items and clean up files. Should be called after a
228before starting a new decoding round. 216decoidng run, if you want to start a new one.
229 217
230=back 218=back
231 219
232=head2 Setting and querying options 220=head2 Setting and querying options
233 221
448 436
449=back 437=back
450 438
451=head1 LARGE EXAMPLE DECODER 439=head1 LARGE EXAMPLE DECODER
452 440
441The general workflow for decoding is like this:
442
443=over
444
445=item 1. Configure options with C<SetOption> or C<SetXXXCallback>.
446
447=item 2. Load all source files with C<LoadFile>.
448
449=item 3. Optionally C<Smerge>.
450
451=item 4. Iterate over all C<GetFileList> items (i.e. result files).
452
453=item 5. C<CleanUp> to delete files and free items.
454
455=back
456
453This is the file C<example-decoder> from the distribution, put here 457What follows is the file C<example-decoder> from the distribution that
454instead of more thorough documentation. 458illustrates the above worklfow in a non-trivial example.
455 459
456 #!/usr/bin/perl 460 #!/usr/bin/perl
457 461
458 # decode all the files in the directory uusrc/ and copy 462 # decode all the files in the directory uusrc/ and copy
459 # the resulting files to uudst/ 463 # the resulting files to uudst/
478 SetOption OPT_RBUF, 128*1024; 482 SetOption OPT_RBUF, 128*1024;
479 SetOption OPT_WBUF, 1024*1024; 483 SetOption OPT_WBUF, 1024*1024;
480 SetOption OPT_IGNMODE, 1; 484 SetOption OPT_IGNMODE, 1;
481 SetOption OPT_IGNMODE, 1; 485 SetOption OPT_IGNMODE, 1;
482 SetOption OPT_VERBOSE, 1; 486 SetOption OPT_VERBOSE, 1;
487 SetOption OPT_AUTOCHK, 0;
483 488
484 # show the three ways you can set callback functions. I normally 489 # show the three ways you can set callback functions. I normally
485 # prefer the one with the sub inplace. 490 # prefer the one with the sub inplace.
486 SetFNameFilter \&namefilter; 491 SetFNameFilter \&namefilter;
487 492
525 # now read all files in the directory uusrc/* 530 # now read all files in the directory uusrc/*
526 for (<uusrc/*>) { 531 for (<uusrc/*>) {
527 my ($retval, $count) = LoadFile ($_, $_, 1); 532 my ($retval, $count) = LoadFile ($_, $_, 1);
528 print "file($_), status(", strerror $retval, ") parts($count)\n"; 533 print "file($_), status(", strerror $retval, ") parts($count)\n";
529 } 534 }
535
536 Smerge -1;
530 537
531 SetOption OPT_SAVEPATH, "uudst/"; 538 SetOption OPT_SAVEPATH, "uudst/";
532 539
533 # now wade through all files and their source parts 540 # now wade through all files and their source parts
534 for my $uu (GetFileList) { 541 for my $uu (GetFileList) {
592security purposes requires care. 599security purposes requires care.
593 600
594Likewise, file sizes when the uulib library was written were tiny compared 601Likewise, file sizes when the uulib library was written were tiny compared
595to today, so do not expect this library to handle files larger than 2GB. 602to today, so do not expect this library to handle files larger than 2GB.
596 603
604Lastly, this module uses a very "C-like" interface, which means it doesn't
605protect you from invalid points as you might expect from "more perlish"
606modules - for example, accessing a file item object after callinbg
607C<CleanUp> will likely result in crashes, memory corruption, or worse.
608
597=head1 AUTHOR 609=head1 AUTHOR
598 610
599Marc Lehmann <schmorp@schmorp.de>, the original uulib library was written 611Marc Lehmann <schmorp@schmorp.de>, the original uulib library was written
600by Frank Pilhofer <fp@informatik.uni-frankfurt.de>, and later heavily 612by Frank Pilhofer <fp@informatik.uni-frankfurt.de>, and later heavily
601bugfixed by Marc Lehmann. 613bugfixed by Marc Lehmann.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines