[#4060] ruby-tk on Windows — Eiji-usagi-MATSUmoto <ematsu@...>

うさぎです。

70 messages 1997/09/03
[#4061] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/03

まつもと ゆきひろです

[#4064] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/03

>まつもと ゆきひろです

[#4071] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/03

[#4075] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/03

助田です

[#4089] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/04

助田です

[#4165] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/08

助田です

[#4168] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/08

[#4169] Re: ruby-tk on Windows — Shin-ichiro HARA <sinara@...> 1997/09/08

原です。

[#4170] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4172] Re: ruby-tk on Windows — WATANABE Hirofumi <watanabe@...> 1997/09/08

わたなべです.

[#4174] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4187] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/08

[#4188] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4190] Re: ruby-tk on Windows — sakamoto@... (Sadayuki Sakamoto) 1997/09/08

酒本です。

[#4083] ruby 1.0-970903 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

14 messages 1997/09/03

[#4278] Is there any english documentation ? [FreeBSD ports] — Eiji-usagi-MATSUmoto <ematsu@...>

うさぎです。

11 messages 1997/09/11

[#4313] mail address class — akira yamada / やまだあきら <akira@...>

36 messages 1997/09/15
[#4406] Re: mail address class — akira yamada <akira@...> 1997/09/18

[#4408] Re: mail address class — keiju@... (石塚圭樹 ) 1997/09/18

けいじゅ@日本ラショナルソフトウェアです.

[#4506] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/09/22

[#4637] Re: mail address class — keiju@... (石塚圭樹 ) 1997/09/25

けいじゅ@日本ラショナルソフトウェアです.

[#5042] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/17

[#5043] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/18

前田です。

[#5044] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/18

[#5047] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/18

前田です。

[#5053] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/19

[#5067] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/20

前田です。

[#4324] ruby seminar — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

37 messages 1997/09/16
[#4337] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/16

前田です。

[#4339] Re: ruby seminar — matz@... (Yukihiro Matsumoto) 1997/09/16

まつもと ゆきひろです

[#4387] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/18

前田です。

[#4391] Re: ruby seminar — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/18

うさぎ@勤務地は西田幾太郎生誕の地です。

[#4407] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/18

前田です。

[#4366] socket — Kikutani Makoto <kikutani@...>

きくたにです。

21 messages 1997/09/17
[#4389] Re: socket — matz@... (Yukihiro Matsumoto) 1997/09/18

まつもと ゆきひろです

[#4449] Bug?? (ruby-1.0-970911) — Yuji Shigehiro <sigehiro@...>

ruby-1.0-970701 から, ruby-1.0-970911 にバージョンアップしたところ,

16 messages 1997/09/19

[#4510] python doc — Kikutani Makoto <kikutani@...>

ここで聞くべきことじゃないのですが、きっと知ってる人がいるだろう

34 messages 1997/09/22
[#4555] Re: python doc — Kikutani Makoto <kikutani@...> 1997/09/24

きくたにです。

[#4562] Re: python doc — gotoken@... (GOTO Kentaro) 1997/09/24

きくたにさん>

[#4563] ruby animal (Re: python doc) — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4567] Re: ruby animal (Re: python doc) — gotoken@... (GOTO Kentaro) 1997/09/24

まつもと ゆきひろさん>

[#4577] Re: ruby animal (Re: python doc) — Masaki Suketa <suke@...> 1997/09/24

助田です

[#4556] install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...>

30 messages 1997/09/24
[#4559] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4574] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4580] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4595] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4603] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4612] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4614] Re: install problem of mudule for postgreSQL — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4616] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4622] Re: install problem of mudule for postgreSQL — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4632] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/25

[#4738] ruby 1.0-970930 install failed — Yoshiyuki Kusano <kusano@...>

草野@構造計画です.

15 messages 1997/09/30

[#4741] rbc.rb — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

33 messages 1997/09/30
[#4759] Re: rbc.rb — shugo@... (MAEDA Shugo) 1997/10/02

前田です。

[#4773] Re: rbc.rb — keiju@... (石塚圭樹 ) 1997/10/03

けいじゅ@日本ラショナルソフトウェアです.

[#4778] Re: rbc.rb — shugo@... (MAEDA Shugo) 1997/10/03

前田です。

[#4793] Re: rbc.rb — keiju@... (石塚圭樹 ) 1997/10/04

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:4201] Mini ML Program

From: Yasunari Momoi <conan@...>
Date: 1997-09-08 09:31:54 UTC
List: ruby-list #4201
ももちゃん@あるもにこすです.

とりあえず ruby 入門ということで,最も単純な ML のプログラムを
書いてみました.

本当はもっとちゃんと機能を付けてから出したかったんですが,
  ・次に触るのがいつになるか分からない
  ・まずそうな所はとっとと指摘された方が矯正が楽 :-)
というのがあるので,とりあえず送ってみます.

より美しいスタイル,的確な例外処理 (今はやってない) をどういう
風に入れると頑丈になるか,など,いろいろ教えて頂けると嬉しいで
す (_ _).

-- 
最終的には,ML や procmail みたいなものを作るための toolkit に
なる部品郡を作ろうと思ってます.

# 最初は perl で書こうと思ってたんだけど,perl で OOP しようと
# してごちゃごちゃになって,嫌になってやめた.

今後欲しい/作るもの:
  libSMTP
  libMIME
  libMailHeader

とりあえず libMailHeader から作ろう...

class CMail
  # コンストラクタ
  def CMail.new(f)
    unless f.kind_of?(IO)
      f = open(f, "r")
      me = super(f)		# call initialize(f)
      f.close
    else
      me = super
    end
    return me
  end

  # 初期化
  def initialize(f)
    @header = []
    @body = []
    while f.gets()
      $_.chop!
      next if /^From /		# skip From-line
      break if /^$/		# end of header

      if /^(\S+):\s*(.*)/
	attr = $1
	@header << $1 + ": " + $2 + "\n"
      else
	sub!(/^\s+/, '')
	@header << @header.pop + "\t" + $_ + "\n"
      end
    end
    return unless $_
    while f.gets()
      break if /^From /
      @body.push($_)
    end
  end

  # メールヘッダを取り出す
  def header
    return @header
  end

  # メールボディを取り出す
  def body
    return @body
  end

  # 指定ヘッダフィールドを全て取り出す
  def [](field)
    f = []
    @header.each {
      |l|
      f << l if l =~ /^#{field}: /i
    }
    return f
  end

  # ヘッダフィールドの継続行をつなげて一行にする
  def join_header
    header = []
    @header.each {
      |l|
      line = l.clone
      line.gsub!(/\r/, '')
      line.gsub!(/\n/, '')
      line.gsub!(/\t/, ' ')

      if line =~ /^\s+(.*)/
	line = header.pop + " " + $1
      else
	if not header.empty?
	  header << header.pop + "\n"
	end
      end
      header << line
    }
    header << header.pop + "\n"
    return header
  end

end
class CMailSpool
  MAX_FILES = 1000		# 1つのディレクトリ以下の最大ファイル数

  # コンストラクタ
  def CMailSpool.new(d)
    return super(d)
  end

  # 初期化
  def initialize(d)
    @dir = d
  end

  # ディレクトリを作る
  def create_dir(dir)
    Dir.mkdir(dir) if not File.exist?(dir)
  end
  private :create_dir

  # ファイルを入れるべき場所を返す
  def where_to_go(article)
    return @dir if MAX_FILES <= 0
    base = (article / MAX_FILES).to_i * MAX_FILES
    return @dir + "/" + base.to_s
  end
  private :where_to_go

  # 現在ある sequence ファイルの中で最大のモノを取り出す
  def last_sequence()
    dirs = Dir.glob(@dir + "/*")
    max = 0
    dirs.each {
      |l|
      next if File.directory?(l)
      i = File.basename(l).to_i
      max = i if max < i
    }

    dir = @dir + "/" + max.to_s
    files = Dir.glob(dir + "/*")
    files.each {
      |l|
      i = File.basename(l).to_i
      max = i if max < i
    }
    return max
  end
  private :last_sequence

  # sequence 番のファイルに body を書く
  def put(seq, body)
    dir = where_to_go(seq)
    create_dir(dir)
    f = File.new(dir + "/" + seq.to_s, "w")
    f << body
    f.close
  end

  # 最大の sequence を持つファイルを追加する
  def add(body)
    print last_sequence, "\n"
    put(last_sequence + 1, body)
  end

  # sequence 番のファイルを get する
  def get(seq)
    fn = where_to_go(seq) + "/" + seq.to_s
    return [] if not File.exist?(fn)
    f = File.new(fn, "r")
    body = []
    f.each {
      |l|
      body << l
    }
    f.close
    return body
  end

end
#!/usr/local/bin/ruby
##########
#

$ml_address = 'hoge-ml@hoge.co.jp'
$ml_admin = 'owner-hoge-ml@hoge.co.jp'
$ml_member = './members'
$ml_spool = './spool'

$sendmail = '/usr/lib/sendmail'

##########
# メンバリストを作る
def get_members(file)
  f = File.open(file)
  members = ""
  f.each_line {
    |l|
    line = l.clone
    line.sub!(/#.*$/, '')
    if /(\S+@\S+)/
      members += $1 + " "
    end
  }
  f.close
  return members
end

##########
# ヘッダを作る
## Reply-To を付ける.元のメールにあったらそれを get.
## いらないフィールドは削る.X-* は残す?
def create_header(header)
  field_proc = { 
    "from:" => Proc.new { |l| l },
    "to:" => Proc.new { |l| l },
    "cc:" => Proc.new { |l| l },
    "mime-version:" => Proc.new { |l| l },
    "content-type:" => Proc.new { |l| l },
    "content-transfer-encoding:" => Proc.new { |l| l },
    "reply-to:" => Proc.new {
      |l|
      reply_flag = TRUE
      l
    },
    "subject:" => Proc.new {
      |l|
      s = ""
      if l =~ /^subject:\s*(.*)/i
	s = $1
      end
      s.gsub(/re:\s*re:/i, "Re:")
      "Subject: " + s + "\n"
    },
  }

  target = []
  reply_flag = FALSE
  header.each {
    |l|
    f = l.split[0].downcase
    if field_proc.key?(f)
      target << field_proc[f].call(l)
    end
  }
  if reply_flag == FALSE
    target << "Reply-To: " + $ml_address + "\n"
  end
  return target
end

##########
# main
require "CMail"

orig = CMail.new(STDIN)
head = create_header(orig.join_header)
body = orig.body

mail = head + "\n" + body
print mail

# メンバリストを取得
member = get_members($ml_member)

print member, "\n"

exit 0

# メールを送る
com = "|" + $sendmail + " -oi -f" + $ml_admin + " " + member
sendmail = open(com, "w")
sendmail.write(mail + "\n")
sendmail.close

# spool に保存
require "CMailSpool"

s = CMailSpool.new($ml_spool)
s.add(mail)

exit 0

In This Thread

Prev Next