#! @im_path_perl@ ################################################################ ### ### impath ### ### Author: Internet Message Group ### Created: Apr 23, 1997 ### Revised: Mar 8, 2005 ### BEGIN { @im_my_siteperl@ @im_src_siteperl@ }; $Prog = 'impath'; my $VERSION_DATE = "20050308"; my $VERSION_NUMBER = "148"; my $VERSION = "${Prog} version ${VERSION_DATE}(IM${VERSION_NUMBER})"; my $VERSION_INFORMATION = "${Prog} (IM ${VERSION_NUMBER}) ${VERSION_DATE} Copyright (C) 1999 IM developing team This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. "; ## ## Require packages ## use IM::Config; use IM::Util; use IM::Folder qw(cur_folder get_impath); use integer; use strict; use vars qw($Prog $EXPLANATION @OptConfig $opt_src $opt_list $opt_path $opt_verbose $opt_debug $opt_help $opt_version); ## ## Environments ## $EXPLANATION = "$VERSION print full pathnames of a mail/news folder Usage: $Prog [OPTIONS] [FOLDER] "; @OptConfig =( 'src;F;;' => "Set source folder", 'list;b;;' => "Show list of folders", 'path;b;;' => "Show important paths", 'verbose;b;;' => 'With verbose messages', 'debug;d;;' => "With debug message", 'help;b;;' => "Display this help and exit", 'version,V;b;;' => "Output version information and exit", ); ## ## Profile and option processing ## init_opt(\@OptConfig); read_cfg(); read_opt(\@ARGV); # help? print("${VERSION_INFORMATION}") && exit $EXIT_SUCCESS if $opt_version; help($EXPLANATION) && exit $EXIT_SUCCESS if $opt_help; debug_option($opt_debug) if $opt_debug; ## ## Main ## my $FOLDER_ROOT; my $folder = &cur_folder(); $folder = $opt_src if (defined $opt_src); if ($opt_path) { show_path(); exit $EXIT_SUCCESS; } if ($opt_list) { if ($folder =~ /^([+=])/) { imfolders($folder, $1); exit $EXIT_SUCCESS; } else { im_die("can't get list for $folder\n"); } } my @msgs; foreach (@ARGV) { if (/^[+=%]/) { $folder = $_; } else { push(@msgs, $_); } } if ($folder =~ /^%/) { require IM::Imap && import IM::Imap qw(imap_folder_regname); print imap_folder_regname($folder), "\n"; } else { impath($folder, @msgs); } exit $EXIT_SUCCESS; ################################################## ## ## Work horse ## ## ## --path ## sub show_path() { print "MailPath=" . mail_path() . "\n"; print "NewsPath=" . news_path() . "\n"; print "InboxFolder=" . inbox_folder() . "\n"; print "DraftFolder=" . draft_folder() . "\n"; print "TrashFolder=" . trash_folder() . "\n"; print "AddrBookFile=" . addrbook_file() . "\n"; print "AliasFile=" . aliases_file() . "\n"; print "PetnameFile=" . petname_file() . "\n"; print "QueuePath=" . queue_path() . "\n"; print "ImapAccount=" . imapaccount() . "\n"; print "ConfigCases=" . config_cases() . "\n"; print "ConfigCaseInbox=" . config_case_inbox() . "\n"; } ## ## --list ## sub imfolders($$) { my($folder, $prefix) = @_; $FOLDER_ROOT = get_impath($folder); $FOLDER_ROOT =~ s:/$::; dig_dir($FOLDER_ROOT, $prefix); } sub dig_dir($$) { my($abs_dir, $p) = @_; my @direntries; my($child, $rel_dir); opendir(DIR, $abs_dir); @direntries = sort(grep(-d "$abs_dir/$_" && $_ ne '.' && $_ ne '..', readdir(DIR))); closedir(DIR); foreach (@direntries) { $child = $rel_dir = "$abs_dir/$_"; $rel_dir =~ s:$FOLDER_ROOT/*::; print "$p$rel_dir\n"; dig_dir($child, $p) if win95p() || os2p() || ((stat($child))[3] != 2); } } ### ### do things like mhpath. ### sub impath($@) { my $folder = shift; my @msgs = @_; my @paths = get_impath($folder, @msgs); die $@ if (scalar(@paths) == 0); # XXX foreach (@paths) { print "$_\n"; } } __END__ =head1 NAME impath - print full pathnames of a mail/news folder =head1 SYNOPSIS B [OPTIONS] [FOLDER] =head1 DESCRIPTION The I command expands a mail/news folder to a file path, or list up folders. This command is provided by IM (Internet Message). =head1 OPTIONS =over 5 =item I<-s, --src=FOLDER> Set source folder. Default value is "+inbox". "--src=+xxx" is equivalent to "+xxx". =item I<-l, --list={on,off}> Show list of folders. =item I<-p, --path={on,off}> Show important paths. =item I<-v, --verbose={on,off}> Print verbose messages when running. =item I<--debug=DEBUG_OPTION> Print debug messages when running. =item I<-h, --help> Display help message and exit. =item I<--version> Output version information and exit. =back =head1 COPYRIGHT IM (Internet Message) is copyrighted by IM developing team. You can redistribute it and/or modify it under the modified BSD license. See the copyright file for more details. =cut ### Copyright (C) 1997, 1998, 1999 IM developing team ### All rights reserved. ### ### Redistribution and use in source and binary forms, with or without ### modification, are permitted provided that the following conditions ### are met: ### ### 1. Redistributions of source code must retain the above copyright ### notice, this list of conditions and the following disclaimer. ### 2. Redistributions in binary form must reproduce the above copyright ### notice, this list of conditions and the following disclaimer in the ### documentation and/or other materials provided with the distribution. ### 3. Neither the name of the team nor the names of its contributors ### may be used to endorse or promote products derived from this software ### without specific prior written permission. ### ### THIS SOFTWARE IS PROVIDED BY THE TEAM AND CONTRIBUTORS ``AS IS'' AND ### ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ### IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ### PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TEAM OR CONTRIBUTORS BE ### LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ### CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ### SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ### BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ### WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE ### OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN ### IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ### Local Variables: ### mode: perl ### End: