Mercurial > hg > Applications > mh
comparison miscellany/audit/mh.pl @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:bce86c4163a3 |
---|---|
1 | |
2 | |
3 # ===== | |
4 # Subroutine mh_profile | |
5 # Parse the user's .mh_profile and get arguments and settings | |
6 # | |
7 sub mh_profile { | |
8 local($PROFILE); | |
9 | |
10 ($PROFILE = $ENV{"MH"}) || ($PROFILE = $ENV{"HOME"} . "/.mh_profile"); | |
11 | |
12 open PROFILE || "$0: can't read mh_profile $PROFILE: $!\n"; | |
13 | |
14 while (<PROFILE>) { | |
15 next if /^#/; | |
16 next unless ($key, $value) = /([^:\s]+):\s*(.+)/; | |
17 $key =~ tr/A-Z/a-z/; | |
18 $MH{$key} = $value; | |
19 } | |
20 close PROFILE; | |
21 | |
22 $MH{'path'} = $ENV{'HOME'} . '/' . $MH{'path'}; | |
23 } | |
24 | |
25 | |
26 # ===== | |
27 # Subroutine rcvstore | |
28 # Convenience routine for MH users. Pipes incoming | |
29 # mail message to rcvstore. Expects one argument - the | |
30 # name of the folder to rcvstore into. | |
31 # | |
32 sub rcvstore { | |
33 local($folder) = @_; | |
34 | |
35 &openpipe("/usr/local/bin/mh/lib/rcvstore +$folder -create"); | |
36 } | |
37 | |
38 | |
39 # ===== | |
40 # Subroutine rcvdist | |
41 # Convenience routine for MH users. Pipes incoming | |
42 # mail message to rcvdist. Expects one argument - the | |
43 # list of users to distribute the mail message to | |
44 # | |
45 sub rcvdist { | |
46 local($recips) = @_; | |
47 | |
48 &openpipe("/usr/local/bin/mh/lib/rcvdist $recips"); | |
49 } | |
50 | |
51 | |
52 # ===== | |
53 # Subroutine rcvtty | |
54 # Convenience routine for MH users. Pipes incoming | |
55 # mail message to rcvtty. This is MH's version of biff. | |
56 # | |
57 sub rcvtty { | |
58 | |
59 &openpipe("/usr/local/bin/mh/lib/rcvtty"); | |
60 } | |
61 | |
62 | |
63 # ===== | |
64 # Subroutine ali | |
65 # Expand an MH alias into a list of names usable by | |
66 # rcvdist | |
67 # | |
68 sub ali { | |
69 local($alias) = @_; | |
70 local($recips); | |
71 local(@list) = (); | |
72 | |
73 $recips = `/usr/local/bin/mh/ali $alias`; | |
74 chop $recips; | |
75 return(@list) if ($alias eq $recips); | |
76 | |
77 @list = split(/,/, $recips); | |
78 return(@list); | |
79 } | |
80 | |
81 | |
82 # ===== | |
83 # Subroutine refile_from | |
84 # Refile a message into a folder by organization and | |
85 # sender name. The top-level folder is an argument | |
86 # the user can specify. | |
87 # | |
88 sub refile_from { | |
89 local($toplevel) = @_; | |
90 | |
91 return if (length($from) <= 0); | |
92 return if ($from eq $user); | |
93 | |
94 $toplevel = "log" if ($toplevel eq ''); | |
95 &rcvstore("$toplevel/$organization/$from"); | |
96 } | |
97 | |
98 # ===== | |
99 # Subroutine make_mhpath | |
100 # Make a directory path recursively. | |
101 # | |
102 sub make_mhpath { | |
103 local($dir) = @_; | |
104 local($i); | |
105 local($mode) = 0755; | |
106 | |
107 $mode = oct($MH{'folder-protect'}) if (defined $MH{'folder-protect'}); | |
108 | |
109 $_ = $dir; | |
110 s#^/.*#/# || s#^[^/].*#.#; | |
111 $start = $_; | |
112 foreach $i (split('/', $dir)) { | |
113 $start = $start . '/' . $i; | |
114 next if (-d $start); | |
115 mkdir($start, $mode) || return(1); | |
116 }; | |
117 | |
118 return(0); | |
119 } | |
120 | |
121 | |
122 # ===== | |
123 # Subroutine mh_parse | |
124 # Parse the command line options | |
125 # | |
126 sub mh_parse { | |
127 local(@argdesc) = @SW; | |
128 local($wantarg); | |
129 | |
130 while (($#ARGV >= 0) && ($ARGV[0] !~ /^-.+/)) { # must be a message list | |
131 push(@MSGS, shift @ARGV); | |
132 }; | |
133 | |
134 grep(s/(\W)/\\$1/g, @argdesc); | |
135 | |
136 @ARGV = (split(' ', $MH{$program}), @ARGV) if defined($MH{$program}); | |
137 | |
138 return if ($#ARGV < 0); | |
139 | |
140 while ($ARGV[0] =~ /^-.+/) { | |
141 | |
142 $ARGV = shift @ARGV; | |
143 | |
144 unless (@matches = grep(/$ARGV/, @argdesc)) { | |
145 print "$program: unknown option: $ARGV\n"; | |
146 exit 1; | |
147 &usage; | |
148 } | |
149 | |
150 for (@matches) { s/\\(\W)/$1/g; } | |
151 | |
152 if ($#matches > $[) { | |
153 print "$program: ambiguous switch $ARGV matches:\n"; | |
154 for (@matches) { | |
155 print "\ ", $_, "\n"; | |
156 } | |
157 exit 1; | |
158 } | |
159 | |
160 ($switch,$wantarg) = $matches[$[] =~ /^-(\S+)\s*(\S*)/; | |
161 | |
162 $SW{$switch} = $wantarg ? shift @ARGV : 1; | |
163 if ($SW{$switch} =~ /^(['"]).*$/ && $SW{$switch} !~ /^(['"]).*\1$/) { | |
164 do { | |
165 $SW{$switch} .= ' ' . (shift @ARGV); | |
166 } until $#ARGV < 0 || $SW{$switch} =~ /^(['"]).*\1$/; | |
167 $SW{$switch} =~ s/^(['"])(.*)\1$/$2/; | |
168 } | |
169 } | |
170 } | |
171 | |
172 | |
173 # ===== | |
174 # Subroutine print_switches | |
175 # print the valid command line switches | |
176 # | |
177 sub print_switches { | |
178 local(@argdesc) = @SW; | |
179 | |
180 print " switches are:\n"; | |
181 for (sort @SW) { | |
182 print " $_\n"; | |
183 }; | |
184 print "\n"; | |
185 } | |
186 | |
187 | |
188 1; |