木村です。今年も宜しくお願いします。
プログラム(スクリプト)の引数として渡されたファイルを別のプログラ
ムで処理させた結果をスクリプトで処理したい。というときの話なんで
すが、↓のように backticks(``)を使うしかないのでしょうか?
#とりあえず自分で pipe(), fork(), exec()するのはなしという前提で
#お願いします
Perlみたいに
f=open("dumpbin /symbols #{ofile}|", "r")
^
とできるとうれしいのですが…
以下のスクリプトは、*.objのファイルから必要(と思われる)シンボル
を抜き出すものです。直接*.objの中身は覗けないので、dumpbinという
ツールにシンボルを抜き出させています。
#ところで BCC (or C++ Builder)には同様のツールってあるんでしょうか?
---
undefvars = {}
while ofile = ARGV.shift
print "; #{ofile}\n"
#f=open("dumpbin /symbols #{ofile}|", "r")
#while f.gets
# print
# next if !/External/
# next if !/SECT/
# /\| +(.+)$/ =~ $_
# extname = $1
# extname.gsub!(/^_/, "")
# print "#{extname}\n" if extname
#end
#f.close
s = `dumpbin /symbols #{ofile}`
s.each_line("\n") {
if (/External/)
/\| +(.+)$/ =~ $_
extname = $1
extname.gsub!(/^_/, "")
if (/SECT[0-9]/)
if (/notype \(\)/)
#print "function\n"
print "\t#{extname}\n" if extname
else
#print "variable\n"
undefvars[extname] = TRUE
end
elsif (/UNDEF/ && /notype(?! \(\))/)
#elsif (/UNDEF/)
print "undef #{extname}\n"
undefvars[extname] = TRUE
end
end
}
end
print "; variables\n"
undefvars.keys.each{|i| print "#{i}\n"}
#print "\t_matherr"
--
木村浩一
May the source be with you.
e-mail kbk / kt.rim.or.jp
kkimura / pure.cpdc.canon.co.jp