diff options
author | Yukihiro Matsumoto <[email protected]> | 1995-05-19 15:33:23 +0900 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2019-08-17 22:09:32 +0900 |
commit | 8bf1c909dc31fd4bcdc1488cda9fe89a62bc2830 (patch) | |
tree | 6899d116a280ba8f99f65e21fe9259706474c0aa /sample/from.rb | |
parent | b2420d8ffa4d347a75efbbdc376f4ce65c0eb172 (diff) |
version 0.76v0_76
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.76.tar.gz
Fri May 19 15:33:23 1995 Yukihiro Matsumoto <matz@ix-02>
* version 0.76
Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna)
* string.c (Fstr_each): イテレータブロック中で文字列の変更が行われ
たかどうかをチェック.ポインタの値が変わっていれば例外を発生する.
* ruby-mode.el: ruby-electric-braceの新設.
Thu May 18 12:27:23 1995 Yukihiro Matsumoto <matz@ix-02>
* string.c (Fstr_tr): trの置換対象に`\0'を含む時に正しく置換を行わ
ないバグがあった.更に置換文字列をASCII順に指定しないと動作しな
い問題もあった.結果としてtrを書き換えたので,copyrightの問題は
無くなった(と思う).
* gc.c (gc): the_scopeをマークしていなかったので,ローカル変数が間
違って開放される場合があった.
* gc.c (mark_locations_array): 若干の高速化.
Mon May 15 11:43:49 1995 Yukihiro Matsumoto <matz@ix-02>
* ext/extmk.rb.in: Dynamic Loadモジュールのコンパイル用チェックを
行うruby script.autoconfに近い感覚で使える.新しいモジュールを
提供したい人はextの下にディレクトリを作るだけで良い.必須のファ
イルはファイル名の一覧を記録した`MANIFEST'というファイルのみ.必
要に応じて`depend'(ファイルの依存関係を記述するファイル gcc -MM
の出力),`extconf.rb'(コンパイル用にライブラリと関数の存在チェッ
クするファイル)を用意できる.
* eval.c (rb_call): rubyメソッドの引数チェック時に未初期化の
jmp_bufを使用していた.
* parse.y: `or'と`and'の優先順位を同じにした.
Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna)
* dln.c: Linuxでは`__.SYMDEF/'であった.
* dln.c: system callのエラーチェックを忘れていた.
Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y: イテレータブロックの変数宣言を`|'で括るようにした.これ
でイテレータ変数がない時は宣言そのものを省略できる.文法の変更は
久しぶりだ.
Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c(require): loadからダイナミックロードの機能を移してきた.
さらに拡張子の補完機能を追加してユーザがdln/dlopenの差を意識する
必要のないようにした.
* string.c(sub,sub): イテレータとしても動作するように.
* object.c: init_object -> initialize.
Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02)
* NEWS-OS 3.4対応
* io.c: Solarisのstdioの動作が違うようだ.signalでEOFを返してしま
う….perlでも同様の問題がある.
Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02)
* version 0.75
* signal.c: trapがなくなっていた.うーむ.
* configure: Solaris 2.3対応.
* io.c: #elifのないcppもある.
* dir.c: autoconf 2.xへの対応が不十分
Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02)
* version 0.74
* env.h, gc.c, regex.c: IRIXへの移植対応
* configure: picを生成するoptionの検出のため,システムタイプをチェッ
クするように.
Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02)
* gc.c(xrealloc): ptr=nilの時,malloc()と同じ働きを
* array.c(astore): 空の配列の0番目の要素に代入するとsize=0で
realloc()を呼んでいた.
* configure, glob.c: Solaris 2.xでコンパイルできるように
Diffstat (limited to 'sample/from.rb')
-rwxr-xr-x | sample/from.rb | 140 |
1 files changed, 108 insertions, 32 deletions
diff --git a/sample/from.rb b/sample/from.rb index df82d5a745..f21b1d10f5 100755 --- a/sample/from.rb +++ b/sample/from.rb @@ -1,7 +1,5 @@ #! /usr/local/bin/ruby -$= = TRUE - module ParseDate MONTHS = { 'jan' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, @@ -10,7 +8,7 @@ module ParseDate MONTHPAT = MONTHS.keys.join('|') DAYPAT = 'mon|tue|wed|thu|fri|sat|sun' - def ParseDate.parsedate(date) + def parsedate(date) if date.sub(/(#{DAYPAT})/i, ' ') dayofweek = $1 end @@ -20,13 +18,13 @@ module ParseDate if date =~ /19(\d\d)/ year = $1 end - if date.sub(/\s*(\d+)\s+(#{MONTHPAT})\S*\s+/, ' ') + if date.sub(/\s*(\d+)\s+(#{MONTHPAT})\S*\s+/i, ' ') dayofmonth = $1 monthname = $2 - elsif date.sub(/\s*(#{MONTHPAT})\S*\s+(\d+)\s+/, ' ') + elsif date.sub(/\s*(#{MONTHPAT})\S*\s+(\d+)\s+/i, ' ') monthname = $1 dayofmonth = $2 - elsif date.sub(/\s*(#{MONTHPAT})\S*\s+(\d+)\D+/, ' ') + elsif date.sub(/\s*(#{MONTHPAT})\S*\s+(\d+)\D+/i, ' ') monthname = $1 dayofmonth = $2 elsif date.sub(/\s*(\d\d?)\/(\d\d?)/, ' ') @@ -44,52 +42,130 @@ module ParseDate end - def parsedate(date) - ParseDate.parsedate(date) +include ParseDate + +def decode64(str) + e = -1; + c = "," + for line in str.split("\n") + line.tr 'A-Za-z0-9+/', "\000-\377" + line.each_byte { |ch| + e+=1 + if e==0 + c = ch << 2 + elsif e==1 + c |= ch >>4 + string += [c].pack('c') + c = ch << 4 + elsif e == 2 + c |= ch >> 2 + string += [c].pack('c'); + c = ch << 6 + elsif e==3 + c |= ch + string += [c].pack('c') + e = -1; + end + } + end + return string; +end + +def j2e(str) + while str =~ /\033\$B([^\033]*)\033\(B/ + s = $1 + pre, post = $`, $' + s.gsub(/./) { |ch| + (ch[0]|0x80).chr + } + str = pre + s + post end + str +end -# include ParseDate +def decode_b(str) + while str =~ /=\?ISO-2022-JP\?B\?(.*)=\?=/ + pre, post = $`, $' + s = decode64($1) + str = pre + s + post + end + j2e(str) +end if $ARGV[0] == '-w' wait = TRUE $ARGV.shift end +class Mail + + def Mail.new(f) + if !f.is_kind_of(IO) + f = open(f, "r") + me = super + f.close + else + me = super + end + return me + end + + def initialize(f) + @header = {} + @body = [] + while f.gets() + $_.chop + continue if /^From / # skip From-line + break if /^[ \t]*$/ # end of header + if /^(\S+):\s*(.*)/ + @header[attr = $1.capitalize] = $2 + elsif attr + sub(/^\s*/, '') + @header[attr] += "\n" + $_ + end + end + + return if ! $_ + + while f.gets() + break if /^From / + @body.push($_) + end + end + + def header + return @header + end + + def body + return @body + end + +end + $ARGV[0] = '/usr/spool/mail/' + ENV['USER'] if $ARGV.length == 0 $outcount = 0; def fromout(date, from, subj) + return if !date y = m = d = 0 y, m, d = parsedate(date) if date from = "sombody@somewhere" if ! from subj = "(nil)" if ! subj - printf "%-2d/%02d/%02d [%-28.28s] %-40.40s\n", y, m, d, from, subj + from = decode_b(from) + subj = decode_b(subj) + printf "%-02d/%02d/%02d [%-28.28s] %-40.40s\n", y, m, d, from, subj $outcount += 1 end - -while TRUE - fields = {} - while gets() - $_.chop - continue if /^From / # skip From-line - break if /^[ \t]*$/ # end of header - if /^(\S+):\s*(.*)/ - fields[attr = $1] = $2 - elsif attr - sub(/^\s*/, '') - fields[attr] += "\n" + $_ - end - end - break if ! $_ - - fromout fields['Date'], fields['From'], fields['Subject'] - - while gets() - break if /^From / +for file in $ARGV + continue if !File.exists(file) + f = open(file, "r") + while !f.eof + mail = Mail.new(f) + fromout mail.header['Date'], mail.header['From'], mail.header['Subject'] end - - break if ! $_ + f.close end if $outcount == 0 |