#!/usr/bin/perl -w # gutenpod.pl # Program to convert plain text documents into iPod readable format # by fridgemagnet, 2004-10-15 10:12 EDT # http://www.fridgemagnet.org.uk/ # iPod notes must be less than 4kb long each my $previous = "previous\n---\n"; my $next = "\n---\nnext"; my $header = "home\n"; my $maxsize = 4*1024 - length($next); use strict; sub writepage { my ($pagenum, $pagetext, $line, $outdir, $newpage) = (shift, shift, shift, shift, shift); if ($newpage) { # Add "Next" link if required my $thisnext = $next; my $nextnum = sprintf("%03d", $pagenum+1); $thisnext =~ s/xxx/$nextnum/; $pagetext .= $thisnext; } # Output collected data to page print "$pagenum "; my $pagefile = "$outdir/".sprintf("%03d", $pagenum); open OUT, ">$pagefile" || die "Couldn't write to $pagefile"; print OUT $pagetext; close OUT; # Return start of new page if required if ($newpage) { my $thisprev = $previous; my $prevnum = sprintf("%03d", $pagenum); $thisprev =~ s/xxx/$prevnum/; return $header.$thisprev.$line; } else { return 0; } } foreach my $textfile (@ARGV) { if (-e $textfile and !(-d $textfile)) { print "Processing $textfile... "; # Get output directory filename my $outdir = $textfile.".ipodnote"; # Create directory unless (-d $outdir) { mkdir ($outdir, 0777) || die "Couldn't make $outdir"; } # Initialise variables my ($line, $pagetext, $pagenum) = ("", $header, 1); open TEXT, "<$textfile" || die "Can't open $textfile"; while (!eof(TEXT)) { $line = ; $line =~ s/[\n\r]//g; # If new paragraph put double linebreak if ($line eq "" or $line =~ /^ /) { $line = "\n\n$line"; } else { $line .= " "; } # If page is too long or we've finished, output and start a new page if (length($pagetext.$line) > $maxsize) { $pagetext = writepage($pagenum, $pagetext, $line, $outdir, 1); $pagenum++; } else { $pagetext .= $line; } } # Write any remaining text writepage($pagenum, $pagetext, "", $outdir, 0); close TEXT; print "done.\nData is in directory $outdir\n"; } } print "All done.\n";