/usr/share/doc/ruby1.9.1-examples/examples/from.rb is in ruby1.9.1-examples 1.9.3.0-1ubuntu2.10.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #!/usr/bin/ruby1.9.1
require "time"
require "kconv"
class String
def kjust(len)
res = ''
rlen = 0
self.each_char do |char|
delta = char.bytesize > 1 ? 2 : 1
break if rlen + delta > len
rlen += delta
res += char
end
res += ' ' * (len - rlen) if rlen < len
res
end
end
def fromout(date, from, subj)
return 0 if !date
y, m, d = Time.parse(date).to_a.reverse[4, 3] if date
y ||= 0; m ||= 0; d ||= 0
from ||= "sombody@somewhere"
from.delete!("\r\n")
from = from.kconv(Encoding.default_external).kjust(28)
subj ||= "(nil)"
subj.delete!("\r\n")
subj = subj.kconv(Encoding.default_external).kjust(40)
printf "%02d/%02d/%02d [%s] %s\n", y%100, m, d, from, subj
return 1
end
def get_mailfile(user)
file = user
unless user
file = ENV['MAIL']
user = ENV['USER'] || ENV['USERNAME'] || ENV['LOGNAME']
end
if file == nil or !File.exist?(file)
[ENV['SPOOLDIR'], '/usr/spool', '/var/spool', '/usr', '/var'].each do |m|
path = "#{m}/mail/#{user}"
if File.exist?(path)
file = path
break
end
end
end
file
end
def from_main
if ARGV[0] == '-w'
wait = true
ARGV.shift
end
file = get_mailfile(ARGV[0])
outcount = 0
if File.exist?(file)
atime = File.atime(file)
mtime = File.mtime(file)
open(file, "r") do |f|
until f.eof?
header = {}
f.each_line do |line|
next if /^From / =~ line # skip From-line
break if /^$/ =~ line # end of header
if /^(?<attr>\S+?):\s*(?<value>.*)/ =~ line
attr.capitalize!
header[attr] = value
elsif attr
header[attr] += "\n" + line.lstrip
end
end
f.each_line do |line|
break if /^From / =~ line
end
outcount += fromout(header['Date'], header['From'], header['Subject'])
end
end
File.utime(atime, mtime, file)
end
if outcount == 0
print "You have no mail.\n"
sleep 2 if wait
elsif wait
system "stty cbreak -echo"
$stdin.getc
system "stty cooked echo"
end
end
if __FILE__ == $0
from_main
end
__END__
=begin
= from.rb
== USAGE
ruby from.rb [-w] [username_or_filename]
=end
|