[#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:6859] register calc (call for scripts)
鄭です。
サイン本欲しさに私もノミネートしたいのですが……
(こんなスクリプトでも需要は有るのだろうか。^_^;)
デバイスドライバを作っていて、デバイスのハードウエアレジスタの
各フィールドのビット位置を覚え切れなくてでっちあげたスクリプトです。
使っているうちにだんだん膨れてきたこのスクリプトを、この土日に整理して
人様にお見せできるように整理してみたのですが、こうしたらもっと簡潔になるとか
rubyらしくなるといったコメントもよろしくおねがいします。_o_
このスクリプト単体では使えなくて、対象のハードウエアレジスタの定義ファイルを
作ってやる必要が有ります。
たとえば、例として R3000 の Status Register の定義を "sr2sym.tbl" という
ファイルに以下のように書いておきます。
--------- sr2sym.tbl --------------------------------------------------------
TITLE = "R3000 COP0 Status Register"
PREFIX = "SR_"
TABLE = [
[ "CU", 28, 4, "Coprocessor Usability" ],
[ "BEV", 22, 1, "BootStrap Exception Vectors" ],
[ "TS", 21, 1, "TLB Shutdown" ],
[ "PE", 20, 1, "Parity Error" ],
[ "CM", 19, 1, "Cache Miss" ],
[ "PZ", 18, 1, "Parity Zero" ],
[ "SwC", 17, 1, "Swap Caches" ],
[ "IsC", 16, 1, "Isolate Cache" ],
[ "Intr", 10, 6, "Hardware Interrupt Mask" ],
[ "Sw", 8, 2, "Software Interrupt Mask" ],
[ "KUo", 5, 1, "Kernel-User mode Old" ],
[ "EIo", 4, 1, "Interrupt Enable Old" ],
[ "KUp", 3, 1, "Kernel-User mode Previous" ],
[ "EIp", 2, 1, "Interrupt Enable Previous" ],
[ "KUc", 1, 1, "Kernel-User mode Current" ],
[ "EIc", 0, 1, "Interrupt Enable Current" ]
]
-----------------------------------------------------------------------------
そして、このスクリプトのシンボリックリンクを作ります。
% ln -s hardreg2symbol.rb sr2sym
(sr2sym と sr2sym.tbl は同じディレクトリに置くかなければいけません)
そうすると、こんな風に使えます。
レジスタの値をみて、各フィールドがどんな値か知りたい時は
% sr2sym 2000040c
CU=2 BEV=0 TS=0 PE=0 CM=0 PZ=0 SwC=0 IsC=0 Intr=1 Sw=0 KUo=0 EIo=0 KUp=1 EIp=1 KUc=0 EIc=0
各フィールドの値を指定して、レジスタに書かなければいけない値を求めるには
% sr2sym -r CU=2 Intr=1 KUp=1 EIp=1 KUc=0 EIc=0
0x2000040c
いまのレジスタの値をちょっと変更したいという時には
% sr2sym -r -o 0x2000040c EIp=0
0x20000408
以下スクリプトです。
--------- hardreg2symbol.rb ------------------------------------------------
#! /usr/local/bin/ruby
#
# hardreg2symbol.rb
#
# このスクリプトは、細かなフィールドにわかれているハードウエアレジスタを
# 扱う人のための補助ツールです。
# 以下の機能があります。
# ハードウエアレジスタの値を、各フィールドにわけて分かりやすく表示する。
# 各フィールドの値を合成して、ハードウエアレジスタに書くべき値を求める。
#
require "getopts"
def usage()
myname = $0.split("/").pop
print "Usage:\n"
printf " %s [-v] HEX ... データをフィールドに分解\n", myname
printf " %s -r [-o HEX] FNAME=value ... フィールドの値からデータを求める\n", myname
printf " %s [-v] -c HEX ... データをC言語の式に変換\n", myname
printf " %s -h C言語のマクロ定義の生成\n", myname
end
# 'コマンド名.tbl' という名前のファイルをこのコマンドとおなじディレクトリに
# 用意し以下の内容を書いておく
=begin
TITLE = "hogehoge register" # 記述するレジスタのフルネーム
PREFIX = "y" # C言語のマクロを定義するときのプレフィックス文字
TABLE = [
# "フィールド名", ビット位置, ビット幅, "フィールドの説明"
[ "HOGE1", 0, 1, "hoge1 bit" ],
[ "HOGE2", 2, 4, "hoge2 bits" ],
....くりかえす。
]
=end
orgarg = ARGV.dup
if getopts("vhrc","o:") == nil
printf("Unkown option %s\n",
orgarg.join("\n").sub(ARGV.join("\n"),"").split("\n").pop )
usage()
exit 1
end
# フィールド定義ファイルを読み込む。
open( $0.sub(/\.[a-z]+?$/,"") +".tbl" ) { |fd|
src = fd.readlines(nil).join("")
eval src if src != nil && src.length > 0
}
PTABLE = {};
NAMES = [];
body = Struct.new("Body", :pos, :width, :mask, :comment)
# 各フィールドの情報を構造体オブジェクトにして、名前で引ける連想配列に格納する
TABLE.each { |f|
i = body.new( f[1], f[2], ((1<<f[2])-1)<<f[1], f[3] )
PTABLE[f[0]] = i
NAMES << f[0] # フィールド名リストをつくる。
}
# データをフィールドに分解して表示
def printreg(r)
print format("#{TITLE} -- 0x%x\n",r) if $OPT_v
result = []
NAMES.each { |fname|
p = PTABLE[fname]
v = (r & p.mask)>>p.pos
if( $OPT_v )
printf(" %6s = %2d -- %s\n", fname, v, p.comment);
end
result << "#{fname}=#{v}"
}
print result.join(" "),"\n"
end
# データをC言語の式に変換
# 後述の printmacro で生成されるマクロを当てにしている。
def printregC(r)
print format("/* #{TITLE} -- 0x%x\n",r) if $OPT_v
result = []
NAMES.each { |fname|
p = PTABLE[fname]
v = (r & p.mask)>>p.pos
printf(" * %8s = %2d -- %s\n", fname,v, p.comment) if $OPT_v
if( p.width == 2 )
result << "#{PREFIX}#{fname}_#{v}"
else
result << "#{PREFIX}#{fname}(#{v})"
end
}
printf" */\n" if $OPT_v
print "\t( " + result.join("|") + " )\n"
end
# フィールドの値からデータを求める
def printhex(arg)
if $OPT_o then total = $OPT_o.hex else total = 0 end
narg = arg.join(" ").gsub('\|'," ").gsub(/[ ]*=[ ]*/,"=").split(" ")
narg.each { |term|
if (term =~ /([^=]*)=([0-9]*)/) \
|| (term =~ /([^(]*)\(([0-9]*)\)/) \
|| (term =~ /([^_]*)_([0-9]*)/) then
name = $1
value = $2.to_i
if (p = PTABLE[name]) || (p = PTABLE[name.sub(/^#{PREFIX}/,"")])
total = (total & (p.mask^0x0ffffffff)) | (value<<p.pos)
else
printf("'%s' unknown in '%s'\n", name, term);
end
else
printf("'%s' unknown format\n", term);
end
}
printf( "0x%08x\n", total )
end
# C言語のマクロ定義の生成
def printmacro
print "/* #{TITLE}\n";
NAMES.each { |fname|
p = PTABLE[fname]
printf(" * %6s = 0x%08x [%2d:%d] -- %s\n",
fname, p.mask, p.pos, p.width, p.comment);
}
print " */\n";
sample = []
NAMES.each { |fname|
p = PTABLE[fname]
if p.width == 1
( 0..1 ).each { |i|
printf("#define %-14s\t(#{i}<<#{p.pos})\n","#{PREFIX}#{fname}_#{i}");
}
sample << "#{PREFIX}#{fname}_0"
else
printf("#define %-14s\t((x)<<%d)\n", "#{PREFIX}#{fname}(x)", p.pos);
sample << "#{PREFIX}#{fname}(x)"
end
}
printf("\n/* Fully Qualified Bits\n ( %s )\n */\n",sample.join("|"));
end
# =========== main =========
if $OPT_r
printhex ARGV
elsif $OPT_h
printmacro
elsif $OPT_c
while carg = ARGV.shift
printregC carg.hex
end
else
while carg = ARGV.shift
printreg carg.hex
end
end
-----------------------------------------------------------------------------
--
┌─鄭 明毅───────────────────┐
└──tei@harmony.co.jp──tei@mirage.linc.or.jp─┘