[#6862] Re: http_get.rb — 青山 和光 <PXN11625@...>
In-Reply-To: [ruby-list:6844] Re: http_get.rb
藤本です、こんにちは。
まつもと ゆきひろです
藤本です、こんにちは。
まつもと ゆきひろです
[#6889] lib/date.rb — Tadayoshi Funaba <tadf@...>
ふなばです。
まつもと ゆきひろです
[#6906] ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...>
藤本です、こんにちは。
まつもと ゆきひろです
藤本です、こんにちは。
小澤さくです。
藤本です、こんにちは。
藤本です、こんばんは。
まつもと ゆきひろです
にしなです。
[#6918] manual 1.18b index — WATANABE Tetsuya <tetsu@...>
ruby-man-1.1b8 で、name タグがついているものを拾い集めて
まつもと ゆきひろです
小澤さくです。
まつもと ゆきひろです
小澤さくです。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
前田です。
[#6929] Expect lib for ruby — nosuzuki@... (Norio Suzuki)
はじめまして。Perl から ruby or python に乗り換えようと考えている鈴木
[#6954] Re: ruby's Icon ? — nosuzuki@... (Norio Suzuki)
こんばんは。鈴木教郎です。
まつもと ゆきひろです
小澤さくです。
Thu, Mar 05, 1998 at 02:52:26PM +0900 において
まつもと ゆきひろです
原です。
[#6978] win32 版 ruby の getc について — ARIMA Yasuhiro <fit0298@...>
はじめまして。有馬と申します。
[#6983] ext POSIX.setsid — WATANABE Tetsuya <tetsu@...>
拡張ライブラリの作り方はこんな感じでいいでしょうか?
[#7004] gtk 0.99.4 and gtk module — Noritsugu Nakamura <nnakamur@...>
[#7008] builtin class inherit — TEI meiki <tei@...>
鄭です。
前田です。
まつもと ゆきひろです
鄭です。
まつもと ゆきひろです
[#7022] スレッドの終了待ち — densuke@...2.so-net.or.jp
佐藤@東邦大です。
[#7023] infinity — Tadayoshi Funaba <tadf@...>
ふなばです。
前田です。
けいじゅ@日本ラショナルソフトウェアです.
In message <199803091741.CAA05774.keiju@cupmail0.rational.com>
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
In message <199803100359.MAA08628.keiju@cupmail0.rational.com>
けいじゅ@日本ラショナルソフトウェアです.
[#7083] about rbc — Kazuhisa YANAGAWA <katze@...>
rbc について二つ質問があります.
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
[#7107] calender-html.rb (Re: call for scripts) — Shin-ichiro HARA <sinara@...>
原です。
原です。
原です。
ごとけんです
原です。
原です。
[#7111] How to simulate Perl's DATA file handle — OZAWA Sakuro <crouton@...>
小澤さくです.
[#7126] do end or {} — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです
[#7145] gsub — WATANABE Tetsuya <tetsu@...>
gsub について
[#7147] each_char — TEI meiki <tei@...>
鄭です。
[#7153] please apply me — SHUDOH Kazuyuki <shudoh@...>
首藤といいます。
まつもと ゆきひろです
[#7192] I hope join. — Takashi Shimizu <simtak@...>
清水と申します。
[#7208] for in bsh — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
まつもと ゆきひろです
小澤さくです。
まつもと ゆきひろです
前田です。
けいじゅ@日本ラショナルソフトウェアです.
[#7222] jcode.rb — NAGAI Hidetoshi <nagai@...>
はじめまして.永井@知能.九工大と申します.
[#7232] final.rb error? — tateishi@...
立石です。
まつもと ゆきひろです
立石です。
In message <19980326102918.3974.qmail@localhost>
まつもと ゆきひろです
In message <199803270403.NAA00909@picachu.netlab.co.jp>
[#7244] [Q] test file1 -nt file2 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#7257] TkScale.new(parent){to -0.1} — gotoken@... (GOTO Kentaro)
ごとけんです
[#7259] Socket#shutdown — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[ruby-list:7116] select() & Delegated class (Re: builtin class inherit)
鄭です。
まつもとさん、前田さん、石塚さん、delegateの件、教えて頂いて
ありがとうございます。
なんだか、間が空いてしまいましたが、くだんの私のスクリプトの Modem を
あつかうコードは、結局、このメールの末尾のようになりました。
(lock ファイルを作るところがずいぶん長くなってしまった。)
ところで、この Tty<Delegator を select に渡すと type エラーになってしまいます。
前の、Tty<File のころは、select で扱えたのですが。
しかたがないので、いまは、top level で
alias sysselect select
def select(i,o,e,t)
si = []; so = []; se = []
i.each {|f| si << ( if defined? f.__getobj__ then f.__getobj__ else f end)}
o.each {|f| so << ( if defined? f.__getobj__ then f.__getobj__ else f end)}
e.each {|f| se << ( if defined? f.__getobj__ then f.__getobj__ else f end)}
sysselect(si,so,se,t)
end
という具合に逃げています。
もっとスマートな方法が有りましたら教えて下さい。
あと、下記のコードで、特定の例外を発生させて捕捉するために
class ErrLocked < Exception; end と宣言して使いました。
こんな使い方であっていますか?
例外についてはリファレンスマニュアルの文法の raise の項に
例外はクラスであるらしいこと、全ての例外のスーパークラスが Exception で
あること、ユーザーズガイドに begin/rescure/raise の簡単な使い方の説明
くらいしか記述が無くて、いまひとつよくわかりませんでした。
ruby-1.1bx/lib の下をのぞきまわって、どうやらException のサブクラスを
宣言してそのクラス名を、例外の名前として使用するらしいと判断しました。
(これであってますでしょうか?)
ここらへん、何かの文書でもうすこし記述があるとありがたいです。
それと、既存の例外一覧とその階層図が欲しい所です。
ruby のソース(ついに見てしまった、、^_^;) error.c:Init_Exception() から
以下のようになってるらしいとはわかりましたし、名前から内容も大体想像つきます
が、やっぱり文書が欲しいです。
String
GlobalExit
SystemExit
fatal
Interrupt
Exception
SyntaxError
TypeError
ArgumentError
NameError
IndexError
NotImplementError
LoadError
RuntimeError
SecurityError
それと、例外の使い方を調べていたら、catch/throw という似たような用途と
おもわれる組み込み関数をみつけたのですが、どのように使い分ける物なのでしょう?
(和文のリファレンスマニュアルの throwの説明だけ英文でした ^^;)
---------------- Tty class ---------------------
require "delegate"
require 'final'
class Tty < Delegator
CBREAK = 0x00000002
RAW = 0x00000020
ECHO = 0x00000008
TIOCGETP = 0x40067408
TIOCSETP = 0x80067409
class ErrLocked < Exception; end
class << Tty
# create lock file
def uu_dolock(tfile, lfile)
lf = File.open(tfile, "w")
lf.printf("%10d\n", $$); lf.chmod(0444); lf.close
begin
File.link(tfile, lfile)
rescue
raise ErrLocked, "#{lfile} locked"
ensure
File.unlink(tfile)
end
end
# check who was lock and cleanup
def uu_lockactive(lfile)
File.open(lfile, "r") do |f|
pid = f.gets; f.close
if pid == nil || pid.length != 11 || pid.to_i <= 0 then
File.unlink(lfile)
raise "#{lfile} unkown format"
end
begin
Process.kill(0, pid.to_i)
raise ErrLocked, "#{lfile} already locked"
rescue Errno::ESRCH
# not found process
File.unlink(lfile)
end
end
end
def uu_lock(lfile,tfile)
begin
uu_dolock(tfile, lfile)
rescue ErrLocked
uu_lockactive(lfile)
uu_dolock(tfile, lfile)
end
end
private :uu_lock, :uu_lockactive, :uu_dolock
def new(name, mode)
lockfile = "/var/spool/locks/LCK..#{name}"
tmpfile = "/var/spool/locks/LTMP.#{$$}"
begin
uu_lock(lockfile,tmpfile)
rescue ErrLocked
raise ErrLocked, "/dev/#{name} locked"
end
begin
super(File.open("/dev/" + name, mode), lockfile)
rescue
File.unlink(lockfile)
raise
end
end
alias open new
def unlockcallback(path)
proc {
if File.exist?(path)
File.unlink(path)
end
}
end
end
def initialize(file, lockfile)
@file = file
@lockfile = lockfile
ObjectSpace.define_finalizer(self, Tty.unlockcallback(lockfile))
super(file)
end
def close
@file.close
File.unlink(@lockfile)
ObjectSpace.undefine_finalizer(self)
end
def __getobj__
return @file
end
def raw_mode
tty = "\0" * 256
self.ioctl(TIOCGETP, tty)
ttys = tty.unpack("C4 S")
ttys[4] |= RAW
ttys[4] &= ~(ECHO|CBREAK)
tty = ttys.pack("C4 S")
self.ioctl(TIOCSETP, tty)
end
def cbreak_mode
tty = "\0" * 256
self.ioctl(TIOCGETP, tty)
ttys = tty.unpack("C4 S")
ttys[4] |= CBREAK
ttys[4] &= ~(ECHO|RAW)
tty = ttys.pack("C4 S")
self.ioctl(TIOCSETP, tty)
end
def cooked_mode
tty = "\0" * 256
self.ioctl(TIOCGETP, tty)
ttys = tty.unpack("C4 S")
ttys[4] &= ~(CBREAK|RAW)
ttys[4] |= ECHO
tty = ttys.pack("C4 S")
self.ioctl(TIOCSETP, tty)
end
end
------------------------------------------------
--
┌─鄭 明毅───────────────────┐
└──tei@harmony.co.jp──tei@mirage.linc.or.jp─┘